]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Thu, 18 Jul 2019 00:11:49 +0000 (20:11 -0400)
committerSasha Levin <sashal@kernel.org>
Thu, 18 Jul 2019 00:11:49 +0000 (20:11 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/drm-udl-introduce-a-macro-to-convert-dev-to-udl.patch [new file with mode: 0644]
queue-4.19/drm-udl-move-to-embedding-drm-device-inside-udl-devi.patch [new file with mode: 0644]
queue-4.19/drm-udl-replace-drm_dev_unref-with-drm_dev_put.patch [new file with mode: 0644]
queue-4.19/series
queue-4.19/x86-entry-32-fix-endproc-of-common_spurious.patch [new file with mode: 0644]

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 (file)
index 0000000..96ce552
--- /dev/null
@@ -0,0 +1,157 @@
+From 6160e6eedefda04785f2f13c2628c8fb5e93d888 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+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 <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20190405031715.5959-3-airlied@gmail.com
+Signed-off-by: Ross Zwisler <zwisler@google.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..e7498a5
--- /dev/null
@@ -0,0 +1,219 @@
+From 92766a887e88daedd80a6ef3583f3b62515e5adb Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+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 <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20190405031715.5959-4-airlied@gmail.com
+Signed-off-by: Ross Zwisler <zwisler@google.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..88adbd6
--- /dev/null
@@ -0,0 +1,36 @@
+From 81911de7bc5832a2fa11df3f1d51a03e9273fd5c Mon Sep 17 00:00:00 2001
+From: Thomas Zimmermann <tzimmermann@suse.de>
+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 <tzimmermann@suse.de>
+Signed-off-by: Sean Paul <seanpaul@chromium.org>
+Link: https://patchwork.freedesktop.org/patch/msgid/20180926120212.25359-1-tzimmermann@suse.de
+Signed-off-by: Ross Zwisler <zwisler@google.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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
+
index a06f55399d9a371db9559712b8c67ace6bf365ed..ab118893dcf5609253b11353bcd32d1a59486dfe 100644 (file)
@@ -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 (file)
index 0000000..d3aa66c
--- /dev/null
@@ -0,0 +1,37 @@
+From d72300ac2d06c9cf4d2150ad8184f10093bff8fd Mon Sep 17 00:00:00 2001
+From: Jiri Slaby <jslaby@suse.cz>
+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 <jslaby@suse.cz>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Link: https://lkml.kernel.org/r/20190709063402.19847-1-jslaby@suse.cz
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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
+