diff options
author | Sean Howarth <showarth@google.com> | 2019-05-22 14:40:02 -0700 |
---|---|---|
committer | Sean Howarth <showarth@google.com> | 2019-05-22 14:40:02 -0700 |
commit | cf5001af85ca14d3fac20816a744d923477e2ff9 (patch) | |
tree | d099314274c96c7a3b4fbf550576d456c759291c | |
parent | efdff6a1488fb4b08a959e130d688fa50e8756ef (diff) | |
download | arm64-android-blue-intel-linux-4.7-android10-c2f2.tar.gz |
misc: paintbox: allowed reset when session exclusively owns resourcesandroid-r-preview-4_r0.8android-r-preview-4_r0.6android-r-preview-4_r0.4android-r-preview-3_r0.8android-r-preview-3_r0.6android-r-preview-3_r0.4android-r-preview-2_r0.8android-r-preview-2_r0.6android-r-preview-2_r0.4android-r-preview-1_r0.8android-r-preview-1_r0.6android-r-preview-1_r0.4android-q-preview-6_r0.7android-q-preview-6_r0.5android-q-preview-5_r0.7android-q-preview-5_r0.5android-12.0.0_r0.1android-11.0.0_r0.9android-11.0.0_r0.67android-11.0.0_r0.65android-11.0.0_r0.63android-11.0.0_r0.61android-11.0.0_r0.59android-11.0.0_r0.19android-11.0.0_r0.17android-11.0.0_r0.15android-11.0.0_r0.13android-11.0.0_r0.110android-11.0.0_r0.11android-10.0.0_r0.88android-10.0.0_r0.86android-10.0.0_r0.84android-10.0.0_r0.82android-10.0.0_r0.80android-10.0.0_r0.78android-10.0.0_r0.57android-10.0.0_r0.55android-10.0.0_r0.53android-10.0.0_r0.43android-10.0.0_r0.41android-10.0.0_r0.4android-10.0.0_r0.39android-10.0.0_r0.31android-10.0.0_r0.3android-10.0.0_r0.29android-10.0.0_r0.27android-10.0.0_r0.17android-10.0.0_r0.15android-10.0.0_r0.13android-blue-intel-linux-4.7-r-preview-4android-blue-intel-linux-4.7-r-preview-3android-blue-intel-linux-4.7-r-preview-2android-blue-intel-linux-4.7-r-preview-1android-blue-intel-linux-4.7-q-preview-6android-blue-intel-linux-4.7-q-preview-5android-blue-intel-linux-4.7-android12android-blue-intel-linux-4.7-android11-qpr2android-blue-intel-linux-4.7-android11-d2android-blue-intel-linux-4.7-android11-d1android-blue-intel-linux-4.7-android11android-blue-intel-linux-4.7-android10-qpr3android-blue-intel-linux-4.7-android10-qpr1android-blue-intel-linux-4.7-android10-d4android-blue-intel-linux-4.7-android10-c2f2android-blue-intel-linux-4.7-android10
Bug: 132671288
Change-Id: I9a92df520aca022be23aefba28bc95be9a5dd902
Signed-off-by: Sean Howarth <showarth@google.com>
-rw-r--r-- | drivers/misc/paintbox/paintbox.c | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/drivers/misc/paintbox/paintbox.c b/drivers/misc/paintbox/paintbox.c index f1f2450cd58d..b52a7cc4e6f9 100644 --- a/drivers/misc/paintbox/paintbox.c +++ b/drivers/misc/paintbox/paintbox.c @@ -241,13 +241,6 @@ static long paintbox_get_caps_ioctl(struct paintbox_data *pb, /* The caller to this function must hold pb lock */ static long paintbox_ipu_reset(struct paintbox_data *pb) { - if (pb->session_count > 1) { - dev_warn(&pb->pdev->dev, - "%s: ignoring reset request: multiple active sessions\n", - __func__); - return -EBUSY; - } - paintbox_io_disable_interrupt(pb, ~0ULL); mnh_ipu_reset(); paintbox_io_apb_post_ipu_reset(pb); @@ -265,9 +258,43 @@ static long paintbox_ipu_reset_ioctl(struct paintbox_data *pb, struct paintbox_session *session, unsigned long arg) { int ret; + unsigned int i; mutex_lock(&pb->lock); + + for (i = 0; i < pb->lbp.num_lbps; i++) { + if (pb->lbp.lbps[i].session && + (pb->lbp.lbps[i].session != session)) { + ret = -EBUSY; + goto unlock; + } + } + + for (i = 0; i < pb->stp.num_stps; i++) { + if (pb->stp.stps[i].session && + (pb->stp.stps[i].session != session)) { + ret = -EBUSY; + goto unlock; + } + } + + for (i = 0; i < pb->dma.num_channels; i++) { + if (pb->dma.channels[i].session && + (pb->dma.channels[i].session != session)) { + ret = -EBUSY; + goto unlock; + } + } + + for (i = 0; i < pb->io.num_interrupts; i++) { + if (pb->irqs[i].session && (pb->irqs[i].session != session)) { + ret = -EBUSY; + goto unlock; + } + } + ret = paintbox_ipu_reset(pb); +unlock: mutex_unlock(&pb->lock); return ret; |