From c4684e629cb95f5d5be00527a6fd86a72680a69e Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Wed, 17 Jul 2019 20:11:49 -0400 Subject: [PATCH] fixes for 4.19 Signed-off-by: Sasha Levin --- ...roduce-a-macro-to-convert-dev-to-udl.patch | 157 +++++++++++++ ...embedding-drm-device-inside-udl-devi.patch | 219 ++++++++++++++++++ ...place-drm_dev_unref-with-drm_dev_put.patch | 36 +++ queue-4.19/series | 4 + ...ry-32-fix-endproc-of-common_spurious.patch | 37 +++ 5 files changed, 453 insertions(+) create mode 100644 queue-4.19/drm-udl-introduce-a-macro-to-convert-dev-to-udl.patch create mode 100644 queue-4.19/drm-udl-move-to-embedding-drm-device-inside-udl-devi.patch create mode 100644 queue-4.19/drm-udl-replace-drm_dev_unref-with-drm_dev_put.patch create mode 100644 queue-4.19/x86-entry-32-fix-endproc-of-common_spurious.patch diff --git a/queue-4.19/drm-udl-introduce-a-macro-to-convert-dev-to-udl.patch b/queue-4.19/drm-udl-introduce-a-macro-to-convert-dev-to-udl.patch new file mode 100644 index 00000000000..96ce55228c2 --- /dev/null +++ b/queue-4.19/drm-udl-introduce-a-macro-to-convert-dev-to-udl.patch @@ -0,0 +1,157 @@ +From 6160e6eedefda04785f2f13c2628c8fb5e93d888 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Mon, 15 Jul 2019 12:05:56 -0600 +Subject: drm/udl: introduce a macro to convert dev to udl. + +commit fd96e0dba19c53c2d66f2a398716bb74df8ca85e upstream. + +This just makes it easier to later embed drm into udl. + +Reviewed-by: Alex Deucher +Signed-off-by: Dave Airlie +Link: https://patchwork.freedesktop.org/patch/msgid/20190405031715.5959-3-airlied@gmail.com +Signed-off-by: Ross Zwisler +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/udl/udl_drv.h | 2 ++ + drivers/gpu/drm/udl/udl_fb.c | 10 +++++----- + drivers/gpu/drm/udl/udl_gem.c | 2 +- + drivers/gpu/drm/udl/udl_main.c | 12 ++++++------ + 4 files changed, 14 insertions(+), 12 deletions(-) + +diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h +index 4ae67d882eae..b3e08e876d62 100644 +--- a/drivers/gpu/drm/udl/udl_drv.h ++++ b/drivers/gpu/drm/udl/udl_drv.h +@@ -71,6 +71,8 @@ struct udl_device { + atomic_t cpu_kcycles_used; /* transpired during pixel processing */ + }; + ++#define to_udl(x) ((x)->dev_private) ++ + struct udl_gem_object { + struct drm_gem_object base; + struct page **pages; +diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c +index dd9ffded223b..590323ea261f 100644 +--- a/drivers/gpu/drm/udl/udl_fb.c ++++ b/drivers/gpu/drm/udl/udl_fb.c +@@ -82,7 +82,7 @@ int udl_handle_damage(struct udl_framebuffer *fb, int x, int y, + int width, int height) + { + struct drm_device *dev = fb->base.dev; +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + int i, ret; + char *cmd; + cycles_t start_cycles, end_cycles; +@@ -210,7 +210,7 @@ static int udl_fb_open(struct fb_info *info, int user) + { + struct udl_fbdev *ufbdev = info->par; + struct drm_device *dev = ufbdev->ufb.base.dev; +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + + /* If the USB device is gone, we don't accept new opens */ + if (drm_dev_is_unplugged(udl->ddev)) +@@ -441,7 +441,7 @@ static void udl_fbdev_destroy(struct drm_device *dev, + + int udl_fbdev_init(struct drm_device *dev) + { +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + int bpp_sel = fb_bpp; + struct udl_fbdev *ufbdev; + int ret; +@@ -480,7 +480,7 @@ int udl_fbdev_init(struct drm_device *dev) + + void udl_fbdev_cleanup(struct drm_device *dev) + { +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + if (!udl->fbdev) + return; + +@@ -491,7 +491,7 @@ void udl_fbdev_cleanup(struct drm_device *dev) + + void udl_fbdev_unplug(struct drm_device *dev) + { +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + struct udl_fbdev *ufbdev; + if (!udl->fbdev) + return; +diff --git a/drivers/gpu/drm/udl/udl_gem.c b/drivers/gpu/drm/udl/udl_gem.c +index bb7b58407039..3b3e17652bb2 100644 +--- a/drivers/gpu/drm/udl/udl_gem.c ++++ b/drivers/gpu/drm/udl/udl_gem.c +@@ -203,7 +203,7 @@ int udl_gem_mmap(struct drm_file *file, struct drm_device *dev, + { + struct udl_gem_object *gobj; + struct drm_gem_object *obj; +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + int ret = 0; + + mutex_lock(&udl->gem_lock); +diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c +index 19055dda3140..09ce98113c0e 100644 +--- a/drivers/gpu/drm/udl/udl_main.c ++++ b/drivers/gpu/drm/udl/udl_main.c +@@ -29,7 +29,7 @@ + static int udl_parse_vendor_descriptor(struct drm_device *dev, + struct usb_device *usbdev) + { +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + char *desc; + char *buf; + char *desc_end; +@@ -165,7 +165,7 @@ void udl_urb_completion(struct urb *urb) + + static void udl_free_urb_list(struct drm_device *dev) + { +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + int count = udl->urbs.count; + struct list_head *node; + struct urb_node *unode; +@@ -198,7 +198,7 @@ static void udl_free_urb_list(struct drm_device *dev) + + static int udl_alloc_urb_list(struct drm_device *dev, int count, size_t size) + { +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + struct urb *urb; + struct urb_node *unode; + char *buf; +@@ -262,7 +262,7 @@ static int udl_alloc_urb_list(struct drm_device *dev, int count, size_t size) + + struct urb *udl_get_urb(struct drm_device *dev) + { +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + int ret = 0; + struct list_head *entry; + struct urb_node *unode; +@@ -295,7 +295,7 @@ struct urb *udl_get_urb(struct drm_device *dev) + + int udl_submit_urb(struct drm_device *dev, struct urb *urb, size_t len) + { +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + int ret; + + BUG_ON(len > udl->urbs.size); +@@ -370,7 +370,7 @@ int udl_drop_usb(struct drm_device *dev) + + void udl_driver_unload(struct drm_device *dev) + { +- struct udl_device *udl = dev->dev_private; ++ struct udl_device *udl = to_udl(dev); + + drm_kms_helper_poll_fini(dev); + +-- +2.20.1 + diff --git a/queue-4.19/drm-udl-move-to-embedding-drm-device-inside-udl-devi.patch b/queue-4.19/drm-udl-move-to-embedding-drm-device-inside-udl-devi.patch new file mode 100644 index 00000000000..e7498a52811 --- /dev/null +++ b/queue-4.19/drm-udl-move-to-embedding-drm-device-inside-udl-devi.patch @@ -0,0 +1,219 @@ +From 92766a887e88daedd80a6ef3583f3b62515e5adb Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Mon, 15 Jul 2019 12:05:58 -0600 +Subject: drm/udl: move to embedding drm device inside udl device. + +commit 6ecac85eadb9d4065b9038fa3d3c66d49038e14b upstream. + +This should help with some of the lifetime issues, and move us away +from load/unload. + +Acked-by: Alex Deucher +Signed-off-by: Dave Airlie +Link: https://patchwork.freedesktop.org/patch/msgid/20190405031715.5959-4-airlied@gmail.com +Signed-off-by: Ross Zwisler +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/udl/udl_drv.c | 56 +++++++++++++++++++++++++++------- + drivers/gpu/drm/udl/udl_drv.h | 9 +++--- + drivers/gpu/drm/udl/udl_fb.c | 2 +- + drivers/gpu/drm/udl/udl_main.c | 23 ++------------ + 4 files changed, 53 insertions(+), 37 deletions(-) + +diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c +index bd4f0b88bbd7..f28703db8dbd 100644 +--- a/drivers/gpu/drm/udl/udl_drv.c ++++ b/drivers/gpu/drm/udl/udl_drv.c +@@ -47,10 +47,16 @@ static const struct file_operations udl_driver_fops = { + .llseek = noop_llseek, + }; + ++static void udl_driver_release(struct drm_device *dev) ++{ ++ udl_fini(dev); ++ udl_modeset_cleanup(dev); ++ drm_dev_fini(dev); ++ kfree(dev); ++} ++ + static struct drm_driver driver = { + .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME, +- .load = udl_driver_load, +- .unload = udl_driver_unload, + .release = udl_driver_release, + + /* gem hooks */ +@@ -74,28 +80,56 @@ static struct drm_driver driver = { + .patchlevel = DRIVER_PATCHLEVEL, + }; + ++static struct udl_device *udl_driver_create(struct usb_interface *interface) ++{ ++ struct usb_device *udev = interface_to_usbdev(interface); ++ struct udl_device *udl; ++ int r; ++ ++ udl = kzalloc(sizeof(*udl), GFP_KERNEL); ++ if (!udl) ++ return ERR_PTR(-ENOMEM); ++ ++ r = drm_dev_init(&udl->drm, &driver, &interface->dev); ++ if (r) { ++ kfree(udl); ++ return ERR_PTR(r); ++ } ++ ++ udl->udev = udev; ++ udl->drm.dev_private = udl; ++ ++ r = udl_init(udl); ++ if (r) { ++ drm_dev_fini(&udl->drm); ++ kfree(udl); ++ return ERR_PTR(r); ++ } ++ ++ usb_set_intfdata(interface, udl); ++ return udl; ++} ++ + static int udl_usb_probe(struct usb_interface *interface, + const struct usb_device_id *id) + { +- struct usb_device *udev = interface_to_usbdev(interface); +- struct drm_device *dev; + int r; ++ struct udl_device *udl; + +- dev = drm_dev_alloc(&driver, &interface->dev); +- if (IS_ERR(dev)) +- return PTR_ERR(dev); ++ udl = udl_driver_create(interface); ++ if (IS_ERR(udl)) ++ return PTR_ERR(udl); + +- r = drm_dev_register(dev, (unsigned long)udev); ++ r = drm_dev_register(&udl->drm, 0); + if (r) + goto err_free; + +- usb_set_intfdata(interface, dev); +- DRM_INFO("Initialized udl on minor %d\n", dev->primary->index); ++ DRM_INFO("Initialized udl on minor %d\n", udl->drm.primary->index); + + return 0; + + err_free: +- drm_dev_put(dev); ++ drm_dev_put(&udl->drm); + return r; + } + +diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h +index b3e08e876d62..35c1f33fbc1a 100644 +--- a/drivers/gpu/drm/udl/udl_drv.h ++++ b/drivers/gpu/drm/udl/udl_drv.h +@@ -50,8 +50,8 @@ struct urb_list { + struct udl_fbdev; + + struct udl_device { ++ struct drm_device drm; + struct device *dev; +- struct drm_device *ddev; + struct usb_device *udev; + struct drm_crtc *crtc; + +@@ -71,7 +71,7 @@ struct udl_device { + atomic_t cpu_kcycles_used; /* transpired during pixel processing */ + }; + +-#define to_udl(x) ((x)->dev_private) ++#define to_udl(x) container_of(x, struct udl_device, drm) + + struct udl_gem_object { + struct drm_gem_object base; +@@ -104,9 +104,8 @@ struct urb *udl_get_urb(struct drm_device *dev); + int udl_submit_urb(struct drm_device *dev, struct urb *urb, size_t len); + void udl_urb_completion(struct urb *urb); + +-int udl_driver_load(struct drm_device *dev, unsigned long flags); +-void udl_driver_unload(struct drm_device *dev); +-void udl_driver_release(struct drm_device *dev); ++int udl_init(struct udl_device *udl); ++void udl_fini(struct drm_device *dev); + + int udl_fbdev_init(struct drm_device *dev); + void udl_fbdev_cleanup(struct drm_device *dev); +diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c +index 590323ea261f..4ab101bf1df0 100644 +--- a/drivers/gpu/drm/udl/udl_fb.c ++++ b/drivers/gpu/drm/udl/udl_fb.c +@@ -213,7 +213,7 @@ static int udl_fb_open(struct fb_info *info, int user) + struct udl_device *udl = to_udl(dev); + + /* If the USB device is gone, we don't accept new opens */ +- if (drm_dev_is_unplugged(udl->ddev)) ++ if (drm_dev_is_unplugged(&udl->drm)) + return -ENODEV; + + ufbdev->fb_count++; +diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c +index 09ce98113c0e..8d22b6cd5241 100644 +--- a/drivers/gpu/drm/udl/udl_main.c ++++ b/drivers/gpu/drm/udl/udl_main.c +@@ -310,20 +310,12 @@ int udl_submit_urb(struct drm_device *dev, struct urb *urb, size_t len) + return ret; + } + +-int udl_driver_load(struct drm_device *dev, unsigned long flags) ++int udl_init(struct udl_device *udl) + { +- struct usb_device *udev = (void*)flags; +- struct udl_device *udl; ++ struct drm_device *dev = &udl->drm; + int ret = -ENOMEM; + + DRM_DEBUG("\n"); +- udl = kzalloc(sizeof(struct udl_device), GFP_KERNEL); +- if (!udl) +- return -ENOMEM; +- +- udl->udev = udev; +- udl->ddev = dev; +- dev->dev_private = udl; + + mutex_init(&udl->gem_lock); + +@@ -357,7 +349,6 @@ int udl_driver_load(struct drm_device *dev, unsigned long flags) + err: + if (udl->urbs.count) + udl_free_urb_list(dev); +- kfree(udl); + DRM_ERROR("%d\n", ret); + return ret; + } +@@ -368,7 +359,7 @@ int udl_drop_usb(struct drm_device *dev) + return 0; + } + +-void udl_driver_unload(struct drm_device *dev) ++void udl_fini(struct drm_device *dev) + { + struct udl_device *udl = to_udl(dev); + +@@ -378,12 +369,4 @@ void udl_driver_unload(struct drm_device *dev) + udl_free_urb_list(dev); + + udl_fbdev_cleanup(dev); +- kfree(udl); +-} +- +-void udl_driver_release(struct drm_device *dev) +-{ +- udl_modeset_cleanup(dev); +- drm_dev_fini(dev); +- kfree(dev); + } +-- +2.20.1 + diff --git a/queue-4.19/drm-udl-replace-drm_dev_unref-with-drm_dev_put.patch b/queue-4.19/drm-udl-replace-drm_dev_unref-with-drm_dev_put.patch new file mode 100644 index 00000000000..88adbd617ad --- /dev/null +++ b/queue-4.19/drm-udl-replace-drm_dev_unref-with-drm_dev_put.patch @@ -0,0 +1,36 @@ +From 81911de7bc5832a2fa11df3f1d51a03e9273fd5c Mon Sep 17 00:00:00 2001 +From: Thomas Zimmermann +Date: Mon, 15 Jul 2019 12:05:57 -0600 +Subject: drm/udl: Replace drm_dev_unref with drm_dev_put + +commit ac3b35f11a06964f5fe7f6ea9a190a28a7994704 upstream. + +This patch unifies the naming of DRM functions for reference counting +of struct drm_device. The resulting code is more aligned with the rest +of the Linux kernel interfaces. + +Signed-off-by: Thomas Zimmermann +Signed-off-by: Sean Paul +Link: https://patchwork.freedesktop.org/patch/msgid/20180926120212.25359-1-tzimmermann@suse.de +Signed-off-by: Ross Zwisler +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/udl/udl_drv.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c +index 54e767bd5ddb..bd4f0b88bbd7 100644 +--- a/drivers/gpu/drm/udl/udl_drv.c ++++ b/drivers/gpu/drm/udl/udl_drv.c +@@ -95,7 +95,7 @@ static int udl_usb_probe(struct usb_interface *interface, + return 0; + + err_free: +- drm_dev_unref(dev); ++ drm_dev_put(dev); + return r; + } + +-- +2.20.1 + diff --git a/queue-4.19/series b/queue-4.19/series index a06f55399d9..ab118893dcf 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -41,3 +41,7 @@ crypto-talitos-move-struct-talitos_edesc-into-talitos.h.patch crypto-talitos-fix-hash-on-sec1.patch crypto-nx-set-receive-window-credits-to-max-number-of-crbs-in-rxfifo.patch regmap-irq-do-not-write-mask-register-if-mask_base-is-zero.patch +drm-udl-introduce-a-macro-to-convert-dev-to-udl.patch +drm-udl-replace-drm_dev_unref-with-drm_dev_put.patch +drm-udl-move-to-embedding-drm-device-inside-udl-devi.patch +x86-entry-32-fix-endproc-of-common_spurious.patch diff --git a/queue-4.19/x86-entry-32-fix-endproc-of-common_spurious.patch b/queue-4.19/x86-entry-32-fix-endproc-of-common_spurious.patch new file mode 100644 index 00000000000..d3aa66caede --- /dev/null +++ b/queue-4.19/x86-entry-32-fix-endproc-of-common_spurious.patch @@ -0,0 +1,37 @@ +From d72300ac2d06c9cf4d2150ad8184f10093bff8fd Mon Sep 17 00:00:00 2001 +From: Jiri Slaby +Date: Tue, 9 Jul 2019 08:34:02 +0200 +Subject: x86/entry/32: Fix ENDPROC of common_spurious + +[ Upstream commit 1cbec37b3f9cff074a67bef4fc34b30a09958a0a ] + +common_spurious is currently ENDed erroneously. common_interrupt is used +in its ENDPROC. So fix this mistake. + +Found by my asm macros rewrite patchset. + +Fixes: f8a8fe61fec8 ("x86/irq: Seperate unused system vectors from spurious entry again") +Signed-off-by: Jiri Slaby +Signed-off-by: Thomas Gleixner +Link: https://lkml.kernel.org/r/20190709063402.19847-1-jslaby@suse.cz +Signed-off-by: Sasha Levin +--- + arch/x86/entry/entry_32.S | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S +index d7b64c8d1907..8059d4fd915c 100644 +--- a/arch/x86/entry/entry_32.S ++++ b/arch/x86/entry/entry_32.S +@@ -1119,7 +1119,7 @@ common_spurious: + movl %esp, %eax + call smp_spurious_interrupt + jmp ret_from_intr +-ENDPROC(common_interrupt) ++ENDPROC(common_spurious) + #endif + + /* +-- +2.20.1 + -- 2.47.3