summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/udl/udl_drv.h
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2022-08-04 09:58:23 +0200
committerThomas Zimmermann <tzimmermann@suse.de>2022-08-10 10:06:20 +0200
commitacd45c56790a3b558b0b0081678a20b0a0d89b0f (patch)
tree8a9a3c72e96d8f932c7fe3d0b72383eafa518323 /drivers/gpu/drm/udl/udl_drv.h
parent504a51d70f86e3b989ca8834691bbac4033b6f48 (diff)
downloadlinux-acd45c56790a3b558b0b0081678a20b0a0d89b0f.tar.bz2
drm/udl: Replace semaphore with a simple wait queue
UDL driver uses a semaphore for controlling the emptiness of FIFO in a slightly funky way. This patch replaces it with a wait queue and controls the emptiness with the standard wait_event*() macro instead, which is a more straightforward implementation. While we are at it, drop the dead code for delayed semaphore down, too. Tested-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patchwork.freedesktop.org/patch/msgid/20220804075826.27036-2-tiwai@suse.de
Diffstat (limited to 'drivers/gpu/drm/udl/udl_drv.h')
-rw-r--r--drivers/gpu/drm/udl/udl_drv.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h
index cc16a13316e4..e008686ec738 100644
--- a/drivers/gpu/drm/udl/udl_drv.h
+++ b/drivers/gpu/drm/udl/udl_drv.h
@@ -34,14 +34,13 @@ struct udl_device;
struct urb_node {
struct list_head entry;
struct udl_device *dev;
- struct delayed_work release_urb_work;
struct urb *urb;
};
struct urb_list {
struct list_head list;
spinlock_t lock;
- struct semaphore limit_sem;
+ wait_queue_head_t sleep;
int available;
int count;
size_t size;
@@ -75,7 +74,13 @@ static inline struct usb_device *udl_to_usb_device(struct udl_device *udl)
int udl_modeset_init(struct drm_device *dev);
struct drm_connector *udl_connector_init(struct drm_device *dev);
-struct urb *udl_get_urb(struct drm_device *dev);
+struct urb *udl_get_urb_timeout(struct drm_device *dev, long timeout);
+
+#define GET_URB_TIMEOUT HZ
+static inline struct urb *udl_get_urb(struct drm_device *dev)
+{
+ return udl_get_urb_timeout(dev, GET_URB_TIMEOUT);
+}
int udl_submit_urb(struct drm_device *dev, struct urb *urb, size_t len);
void udl_urb_completion(struct urb *urb);