Message ID | 20181210215119.1903413-1-arnd@arndb.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | host1x: cdma: use completion instead of semaphore | expand |
On Mon, Dec 10, 2018 at 10:51:04PM +0100, Arnd Bergmann wrote: > In this usage, the two are completely equivalent, but the > completion documents better what is going on, and we generally > try to avoid semaphores these days. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > drivers/gpu/host1x/cdma.c | 6 +++--- > drivers/gpu/host1x/cdma.h | 4 ++-- > 2 files changed, 5 insertions(+), 5 deletions(-) My understanding is that potentially many userspace processes could be blocking on this, which I think is the reason for it being a semaphore. Is the completion going to work for those cases as well? Thierry
On Tue, Dec 11, 2018 at 11:08 AM Thierry Reding <thierry.reding@gmail.com> wrote: > > On Mon, Dec 10, 2018 at 10:51:04PM +0100, Arnd Bergmann wrote: > > In this usage, the two are completely equivalent, but the > > completion documents better what is going on, and we generally > > try to avoid semaphores these days. > > > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > > --- > > drivers/gpu/host1x/cdma.c | 6 +++--- > > drivers/gpu/host1x/cdma.h | 4 ++-- > > 2 files changed, 5 insertions(+), 5 deletions(-) > > My understanding is that potentially many userspace processes could be > blocking on this, which I think is the reason for it being a semaphore. > Is the completion going to work for those cases as well? Yes, it behaves the exact same way here. Arnd
On Tue, Dec 11, 2018 at 11:11:38AM +0100, Arnd Bergmann wrote: > On Tue, Dec 11, 2018 at 11:08 AM Thierry Reding > <thierry.reding@gmail.com> wrote: > > > > On Mon, Dec 10, 2018 at 10:51:04PM +0100, Arnd Bergmann wrote: > > > In this usage, the two are completely equivalent, but the > > > completion documents better what is going on, and we generally > > > try to avoid semaphores these days. > > > > > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > > > --- > > > drivers/gpu/host1x/cdma.c | 6 +++--- > > > drivers/gpu/host1x/cdma.h | 4 ++-- > > > 2 files changed, 5 insertions(+), 5 deletions(-) > > > > My understanding is that potentially many userspace processes could be > > blocking on this, which I think is the reason for it being a semaphore. > > Is the completion going to work for those cases as well? > > Yes, it behaves the exact same way here. Great, I'll queue this for v4.22. Thanks, Thierry
On Mon, Dec 10, 2018 at 10:51:04PM +0100, Arnd Bergmann wrote: > In this usage, the two are completely equivalent, but the > completion documents better what is going on, and we generally > try to avoid semaphores these days. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > drivers/gpu/host1x/cdma.c | 6 +++--- > drivers/gpu/host1x/cdma.h | 4 ++-- > 2 files changed, 5 insertions(+), 5 deletions(-) Applied, thanks. Thierry
diff --git a/drivers/gpu/host1x/cdma.c b/drivers/gpu/host1x/cdma.c index 6bfb3e6f43d7..bdc80a303cec 100644 --- a/drivers/gpu/host1x/cdma.c +++ b/drivers/gpu/host1x/cdma.c @@ -204,7 +204,7 @@ unsigned int host1x_cdma_wait_locked(struct host1x_cdma *cdma, cdma->event = event; mutex_unlock(&cdma->lock); - down(&cdma->sem); + wait_for_completion(&cdma->complete); mutex_lock(&cdma->lock); } @@ -308,7 +308,7 @@ static void update_cdma_locked(struct host1x_cdma *cdma) if (signal) { cdma->event = CDMA_EVENT_NONE; - up(&cdma->sem); + complete(&cdma->complete); } } @@ -410,7 +410,7 @@ int host1x_cdma_init(struct host1x_cdma *cdma) int err; mutex_init(&cdma->lock); - sema_init(&cdma->sem, 0); + init_completion(&cdma->complete); INIT_LIST_HEAD(&cdma->sync_queue); diff --git a/drivers/gpu/host1x/cdma.h b/drivers/gpu/host1x/cdma.h index c628070b94d7..ba790f9bfebc 100644 --- a/drivers/gpu/host1x/cdma.h +++ b/drivers/gpu/host1x/cdma.h @@ -20,7 +20,7 @@ #define __HOST1X_CDMA_H #include <linux/sched.h> -#include <linux/semaphore.h> +#include <linux/completion.h> #include <linux/list.h> struct host1x_syncpt; @@ -70,7 +70,7 @@ enum cdma_event { struct host1x_cdma { struct mutex lock; /* controls access to shared state */ - struct semaphore sem; /* signalled when event occurs */ + struct completion complete; /* signalled when event occurs */ enum cdma_event event; /* event that sem is waiting for */ unsigned int slots_used; /* pb slots used in current submit */ unsigned int slots_free; /* pb slots free in current submit */
In this usage, the two are completely equivalent, but the completion documents better what is going on, and we generally try to avoid semaphores these days. Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- drivers/gpu/host1x/cdma.c | 6 +++--- drivers/gpu/host1x/cdma.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-)