Re: [BUG] DRM kernel NULL pointer dereference (linux-next 20210115)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



(cc'ing dri-devel)

Hi

thanks for reporting the bug.

Am 17.01.21 um 12:12 schrieb Andy Lavr:
Hey,


You forgot to add these commits to linux-next:


  drm: Move struct drm_device.pdev to legacy

https://patchwork.kernel.org/project/intel-gfx/cover/20210107080748.4768-1-tzimmermann@xxxxxxx/


I committed these patches to my local tree and that solved my problem.


  * v3,4/8] drm/i915: Remove references to struct drm_device.pdev
    <https://patchwork.kernel.org/project/intel-gfx/patch/20210107080748.4768-5-tzimmermann@xxxxxxx/>
  * [v3,5/8] drm/i915/gt: Remove references to struct drm_device.pdev
    <https://patchwork.kernel.org/project/intel-gfx/patch/20210107080748.4768-6-tzimmermann@xxxxxxx/>
  * [v3,6/8] drm/i915/gvt: Remove references to struct drm_device.pdev
    <https://patchwork.kernel.org/project/intel-gfx/patch/20210107080748.4768-7-tzimmermann@xxxxxxx/>
  * [v3,8/8] drm: Upcast struct drm_device.dev to struct pci_device;
    replace pdev
    <https://patchwork.kernel.org/project/intel-gfx/patch/20210107080748.4768-9-tzimmermann@xxxxxxx/>

These patches have not been merged yet as they have to wait for some preparation in the i915 driver.

I reduced the final patch, so it should change the buggy code. Could you please apply only the attached patchfile and report if it fixes the issue?

Best regards
Thomas




Thanks to all!


16.01.2021 15:17, Andy Lavr:

Hey,


*linux-next 20210114 work fine.*


*linux-next 20210115:*

Jan 15 17:34:30 wip kernel: [   35.185982] *BUG: kernel NULL pointer dereference, address: 0000000000000010* Jan 15 17:34:30 wip kernel: [   35.186988] #PF: supervisor read access in kernel mode Jan 15 17:34:30 wip kernel: [   35.187984] #PF: error_code(0x0000) - not-present page
Jan 15 17:34:30 wip kernel: [   35.189016] PGD 0 P4D 0
Jan 15 17:34:30 wip kernel: [   35.190508] Oops: 0000 [#1] SMP PTI
Jan 15 17:34:30 wip kernel: [   35.191814] CPU: 6 PID: 1319 Comm: Xorg Not tainted 5.11.13-dragon-sandybridge #202101150001 Jan 15 17:34:30 wip kernel: [   35.192847] Hardware name: Dell Inc. Precision M6600/04YY4M, BIOS A18 09/14/2018 Jan 15 17:34:30 wip kernel: [   35.193877] *RIP: 0010:drm_pci_set_busid+0x1a/0x80 [drm]* Jan 15 17:34:30 wip kernel: [   35.194950] Code: fc 06 f8 c8 00 00 00 00 00 00 00 00 00 00 00 00 0f 1f 44 00 00 55 53 50 48 89 f3 31 d2 81 3f 04 00 01 00 48 8b 87 78 01 00 00 <48> 8b 48 10 7c 09 48 8b 91 d0 01 00 00 8b 12 0f b6 89 e0 01 00 00 Jan 15 17:34:30 wip kernel: [   35.196094] RSP: 0018:ffffaacf485afd38 EFLAGS: 00010246 Jan 15 17:34:30 wip kernel: [   35.197695] RAX: 0000000000000000 RBX: ffff95f1684e5000 RCX: ffffffff8b06f380 Jan 15 17:34:30 wip kernel: [   35.198872] RDX: 0000000000000000 RSI: ffff95f1684e5000 RDI: ffff95f175240010 Jan 15 17:34:30 wip kernel: [   35.200037] RBP: 00000000ffffffea R08: 000000000000e200 R09: 0000000000000001 Jan 15 17:34:30 wip kernel: [   35.201205] R10: ffff95f16de88b00 R11: ffffffffc03e1990 R12: ffff95f1684e5000 Jan 15 17:34:30 wip kernel: [   35.202383] R13: 00007fff8865e240 R14: ffff95f1752400a8 R15: ffff95f175240010 Jan 15 17:34:30 wip kernel: [   35.203554] FS: 000070bcd696da40(0000) GS:ffff95f41db80000(0000) knlGS:0000000000000000 Jan 15 17:34:30 wip kernel: [   35.204742] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033 Jan 15 17:34:30 wip kernel: [   35.205936] CR2: 0000000000000010 CR3: 0000000186c28006 CR4: 00000000000606e0
Jan 15 17:34:30 wip kernel: [   35.207144] Call Trace:
Jan 15 17:34:30 wip kernel: [   35.208370] drm_setversion+0x13e/0x170 [drm]
Jan 15 17:34:30 wip kernel: [   35.209596]  ? drm_getstats+0x20/0x20 [drm]
Jan 15 17:34:30 wip kernel: [   35.210799] drm_ioctl_kernel+0xe2/0x150 [drm]
Jan 15 17:34:30 wip kernel: [   35.211989] drm_ioctl+0x30b/0x440 [drm]
Jan 15 17:34:30 wip kernel: [   35.213170]  ? drm_getstats+0x20/0x20 [drm]
Jan 15 17:34:30 wip kernel: [   35.214351] amdgpu_drm_ioctl+0x44/0x80 [amdgpu]
Jan 15 17:34:30 wip kernel: [   35.215696] __se_sys_ioctl+0x78/0xc0
Jan 15 17:34:30 wip kernel: [   35.216848] do_syscall_64+0x33/0x70
Jan 15 17:34:30 wip kernel: [   35.218002] entry_SYSCALL_64_after_hwframe+0x44/0xa9
Jan 15 17:34:30 wip kernel: [   35.219177] RIP: 0033:0x70bcd6dd931b
Jan 15 17:34:30 wip kernel: [   35.220654] Code: 89 d8 49 8d 3c 1c 48 f7 d8 49 39 c4 72 b5 e8 1c ff ff ff 85 c0 78 ba 4c 89 e0 5b 5d 41 5c c3 f3 0f 1e fa b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 1d 3b 0d 00 f7 d8 64 89 01 48 Jan 15 17:34:30 wip kernel: [   35.222211] RSP: 002b:00007fff8865e208 EFLAGS: 00000202 ORIG_RAX: 0000000000000010 Jan 15 17:34:30 wip kernel: [   35.223778] RAX: ffffffffffffffda RBX: 00007fff8865e240 RCX: 000070bcd6dd931b Jan 15 17:34:30 wip kernel: [   35.225145] RDX: 00007fff8865e240 RSI: 00000000c0106407 RDI: 000000000000000c Jan 15 17:34:30 wip kernel: [   35.226420] RBP: 00000000c0106407 R08: 0000000000000031 R09: 0000000000000000 Jan 15 17:34:30 wip kernel: [   35.227691] R10: 000070bcd7850ec0 R11: 0000000000000202 R12: 00005b60f67cbb50 Jan 15 17:34:30 wip kernel: [   35.228954] R13: 000000000000000c R14: 00005b60f67cbb90 R15: 0000000000000000 Jan 15 17:34:30 wip kernel: [   35.229231] iwlwifi 0000:03:00.0: Radio type=0x0-0x3-0x1 Jan 15 17:34:30 wip kernel: [   35.230218] Modules linked in: vfat fat intel_rapl_msr hid_generic mei_hdcp at24 dell_rbtn iwldvm dell_laptop dell_smm_hwmon mac80211 intel_rapl_common libarc4 snd_hda_codec_idt snd_hda_codec_generic x86_pkg_temp_thermal ledtrig_audio intel_powerclamp snd_hda_codec_hdmi crct10dif_pclmul iwlwifi crc32_pclmul ghash_clmulni_intel snd_hda_intel rapl snd_intel_dspcfg usbhid intel_cstate firewire_ohci dell_wmi sdhci_pci hid snd_hda_codec firewire_core dell_smbios crc_itu_t mei_me dcdbas cfg80211 sparse_keymap cqhci i2c_i801 sdhci snd_hda_core joydev e1000e snd_hwdep wmi_bmof dell_wmi_descriptor i2c_smbus mei tpm_tis tpm_tis_core tpm dell_smo8800 xt_hl ip6_tables ip6t_rt nf_log_ipv4 nf_log_common ipt_REJECT nf_reject_ipv4 xt_LOG nft_limit xt_limit xt_addrtype xt_tcpudp sch_cake tcp_yeah tcp_vegas xt_conntrack nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nft_compat nft_counter coretemp nf_tables nfnetlink parport_pc ppdev lp parport binfmt_misc ip_tables x_tables xfs raid10 raid456 Jan 15 17:34:30 wip kernel: [   35.232152]  async_raid6_recov async_pq async_xor async_memcpy async_tx raid1 raid0 multipath linear amdgpu iommu_v2 gpu_sched drm_ttm_helper ttm i2c_algo_bit drm_kms_helper cec aesni_intel sysimgblt syscopyarea sysfillrect fb_sys_fops crypto_simd cryptd psmouse input_leds drm ahci serio_raw libahci wmi video mac_hid
Jan 15 17:34:30 wip kernel: [   35.242819] CR2: 0000000000000010
Jan 15 17:34:30 wip kernel: [   35.244502] ---[ end trace 47eef7912dfa1ae6 ]--- Jan 15 17:34:30 wip kernel: [   35.494899] *RIP: 0010:drm_pci_set_busid+0x1a/0x80 [drm]* Jan 15 17:34:30 wip kernel: [   35.496577] Code: fc 06 f8 c8 00 00 00 00 00 00 00 00 00 00 00 00 0f 1f 44 00 00 55 53 50 48 89 f3 31 d2 81 3f 04 00 01 00 48 8b 87 78 01 00 00 <48> 8b 48 10 7c 09 48 8b 91 d0 01 00 00 8b 12 0f b6 89 e0 01 00 00 Jan 15 17:34:30 wip kernel: [   35.498313] RSP: 0018:ffffaacf485afd38 EFLAGS: 00010246 Jan 15 17:34:30 wip kernel: [   35.500089] RAX: 0000000000000000 RBX: ffff95f1684e5000 RCX: ffffffff8b06f380 Jan 15 17:34:30 wip kernel: [   35.501919] RDX: 0000000000000000 RSI: ffff95f1684e5000 RDI: ffff95f175240010 Jan 15 17:34:30 wip kernel: [   35.503708] RBP: 00000000ffffffea R08: 000000000000e200 R09: 0000000000000001 Jan 15 17:34:30 wip kernel: [   35.505483] R10: ffff95f16de88b00 R11: ffffffffc03e1990 R12: ffff95f1684e5000 Jan 15 17:34:30 wip kernel: [   35.507276] R13: 00007fff8865e240 R14: ffff95f1752400a8 R15: ffff95f175240010 Jan 15 17:34:30 wip kernel: [   35.509058] FS: 000070bcd696da40(0000) GS:ffff95f41db80000(0000) knlGS:0000000000000000 Jan 15 17:34:30 wip kernel: [   35.510866] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033 Jan 15 17:34:30 wip kernel: [   35.512647] CR2: 0000000000000010 CR3: 0000000186c28006 CR4: 00000000000606e0



--
Best regards, Andy Lavr.

  CONFIDENTIAL NOTE

  This email (including any attachments) is intended only for the person or entity to which it is addressed
  and may contain confidential and/or privileged material.  Any review, retransmission, dissemination or other
  use of, or taking of any action in reliance upon, this information by persons or entities other than the
  intended recipient is prohibited. If you received this in error, please notify the sender immediately and
  delete the material completely from your system. E-mail communication cannot be guaranteed to be reliable,
  secure, error-free or virus-free. Accordingly, we cannot accept liability for any damage sustained as a
  result of any virus, error or incompleteness of this e-mail or any failure to deliver promptly or at all
  information exchanged between you and us by this means. If you suspect that this e-mail may have been
  intercepted or amended, please contact the sender. Any views or opinions expressed in this email are solely
  those of the author and do not necessarily represent those of our entity or related/associated entities.

--
Best regards, Andy Lavr.

  CONFIDENTIAL NOTE

  This email (including any attachments) is intended only for the person or entity to which it is addressed
  and may contain confidential and/or privileged material.  Any review, retransmission, dissemination or other
  use of, or taking of any action in reliance upon, this information by persons or entities other than the
  intended recipient is prohibited. If you received this in error, please notify the sender immediately and
  delete the material completely from your system. E-mail communication cannot be guaranteed to be reliable,
  secure, error-free or virus-free. Accordingly, we cannot accept liability for any damage sustained as a
  result of any virus, error or incompleteness of this e-mail or any failure to deliver promptly or at all
  information exchanged between you and us by this means. If you suspect that this e-mail may have been
  intercepted or amended, please contact the sender. Any views or opinions expressed in this email are solely
  those of the author and do not necessarily represent those of our entity or related/associated entities.


--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer
From 26be85bf5d99c8e2a4e682af4dbff825b417ec02 Mon Sep 17 00:00:00 2001
From: Thomas Zimmermann <tzimmermann@xxxxxxx>
Date: Sat, 7 Nov 2020 21:05:28 +0100
Subject: [PATCH] drm: Upcast struct drm_device.dev to struct pci_device;
 replace pdev

We have DRM drivers based on USB, SPI and platform devices. All of them
are fine with storing their device reference in struct drm_device.dev.
PCI devices should be no exception. Therefore struct drm_device.pdev is
deprecated.

Instead upcast from struct drm_device.dev with to_pci_dev(). PCI-specific
code can use dev_is_pci() to test for a PCI device. This patch changes
the DRM core code and documentation accordingly.

Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx>
Acked-by: Sam Ravnborg <sam@xxxxxxxxxxxx>
---
 drivers/gpu/drm/drm_agpsupport.c |  9 ++++++---
 drivers/gpu/drm/drm_bufs.c       |  4 ++--
 drivers/gpu/drm/drm_edid.c       |  7 ++++++-
 drivers/gpu/drm/drm_irq.c        | 12 +++++++-----
 drivers/gpu/drm/drm_pci.c        | 26 +++++++++++++++-----------
 drivers/gpu/drm/drm_vm.c         |  2 +-
 6 files changed, 37 insertions(+), 23 deletions(-)

diff --git a/drivers/gpu/drm/drm_agpsupport.c b/drivers/gpu/drm/drm_agpsupport.c
index 8b690ef306de..7e765cb0efee 100644
--- a/drivers/gpu/drm/drm_agpsupport.c
+++ b/drivers/gpu/drm/drm_agpsupport.c
@@ -103,11 +103,13 @@ int drm_agp_info_ioctl(struct drm_device *dev, void *data,
  */
 int drm_agp_acquire(struct drm_device *dev)
 {
+	struct pci_dev *pdev = to_pci_dev(dev->dev);
+
 	if (!dev->agp)
 		return -ENODEV;
 	if (dev->agp->acquired)
 		return -EBUSY;
-	dev->agp->bridge = agp_backend_acquire(dev->pdev);
+	dev->agp->bridge = agp_backend_acquire(pdev);
 	if (!dev->agp->bridge)
 		return -ENODEV;
 	dev->agp->acquired = 1;
@@ -402,14 +404,15 @@ int drm_agp_free_ioctl(struct drm_device *dev, void *data,
  */
 struct drm_agp_head *drm_agp_init(struct drm_device *dev)
 {
+	struct pci_dev *pdev = to_pci_dev(dev->dev);
 	struct drm_agp_head *head = NULL;
 
 	head = kzalloc(sizeof(*head), GFP_KERNEL);
 	if (!head)
 		return NULL;
-	head->bridge = agp_find_bridge(dev->pdev);
+	head->bridge = agp_find_bridge(pdev);
 	if (!head->bridge) {
-		head->bridge = agp_backend_acquire(dev->pdev);
+		head->bridge = agp_backend_acquire(pdev);
 		if (!head->bridge) {
 			kfree(head);
 			return NULL;
diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
index aeb1327e3077..e3d77dfefb0a 100644
--- a/drivers/gpu/drm/drm_bufs.c
+++ b/drivers/gpu/drm/drm_bufs.c
@@ -326,7 +326,7 @@ static int drm_addmap_core(struct drm_device *dev, resource_size_t offset,
 		 * As we're limiting the address to 2^32-1 (or less),
 		 * casting it down to 32 bits is no problem, but we
 		 * need to point to a 64bit variable first. */
-		map->handle = dma_alloc_coherent(&dev->pdev->dev,
+		map->handle = dma_alloc_coherent(dev->dev,
 						 map->size,
 						 &map->offset,
 						 GFP_KERNEL);
@@ -556,7 +556,7 @@ int drm_legacy_rmmap_locked(struct drm_device *dev, struct drm_local_map *map)
 	case _DRM_SCATTER_GATHER:
 		break;
 	case _DRM_CONSISTENT:
-		dma_free_coherent(&dev->pdev->dev,
+		dma_free_coherent(dev->dev,
 				  map->size,
 				  map->handle,
 				  map->offset);
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 394cc55b3214..c2bbe7bee7b6 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -32,6 +32,7 @@
 #include <linux/i2c.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/pci.h>
 #include <linux/slab.h>
 #include <linux/vga_switcheroo.h>
 
@@ -2075,9 +2076,13 @@ EXPORT_SYMBOL(drm_get_edid);
 struct edid *drm_get_edid_switcheroo(struct drm_connector *connector,
 				     struct i2c_adapter *adapter)
 {
-	struct pci_dev *pdev = connector->dev->pdev;
+	struct drm_device *dev = connector->dev;
+	struct pci_dev *pdev = to_pci_dev(dev->dev);
 	struct edid *edid;
 
+	if (drm_WARN_ON_ONCE(dev, !dev_is_pci(dev->dev)))
+		return NULL;
+
 	vga_switcheroo_lock_ddc(pdev);
 	edid = drm_get_edid(connector, adapter);
 	vga_switcheroo_unlock_ddc(pdev);
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 803af4bbd214..c3bd664ea733 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -122,7 +122,7 @@ int drm_irq_install(struct drm_device *dev, int irq)
 		dev->driver->irq_preinstall(dev);
 
 	/* PCI devices require shared interrupts. */
-	if (dev->pdev)
+	if (dev_is_pci(dev->dev))
 		sh_flags = IRQF_SHARED;
 
 	ret = request_irq(irq, dev->driver->irq_handler,
@@ -140,7 +140,7 @@ int drm_irq_install(struct drm_device *dev, int irq)
 	if (ret < 0) {
 		dev->irq_enabled = false;
 		if (drm_core_check_feature(dev, DRIVER_LEGACY))
-			vga_client_register(dev->pdev, NULL, NULL, NULL);
+			vga_client_register(to_pci_dev(dev->dev), NULL, NULL, NULL);
 		free_irq(irq, dev);
 	} else {
 		dev->irq = irq;
@@ -203,7 +203,7 @@ int drm_irq_uninstall(struct drm_device *dev)
 	DRM_DEBUG("irq=%d\n", dev->irq);
 
 	if (drm_core_check_feature(dev, DRIVER_LEGACY))
-		vga_client_register(dev->pdev, NULL, NULL, NULL);
+		vga_client_register(to_pci_dev(dev->dev), NULL, NULL, NULL);
 
 	if (dev->driver->irq_uninstall)
 		dev->driver->irq_uninstall(dev);
@@ -252,6 +252,7 @@ int drm_legacy_irq_control(struct drm_device *dev, void *data,
 {
 	struct drm_control *ctl = data;
 	int ret = 0, irq;
+	struct pci_dev *pdev;
 
 	/* if we haven't irq we fallback for compatibility reasons -
 	 * this used to be a separate function in drm_dma.h
@@ -262,12 +263,13 @@ int drm_legacy_irq_control(struct drm_device *dev, void *data,
 	if (!drm_core_check_feature(dev, DRIVER_LEGACY))
 		return 0;
 	/* UMS was only ever supported on pci devices. */
-	if (WARN_ON(!dev->pdev))
+	if (WARN_ON(!dev_is_pci(dev->dev)))
 		return -EINVAL;
 
 	switch (ctl->func) {
 	case DRM_INST_HANDLER:
-		irq = dev->pdev->irq;
+		pdev = to_pci_dev(dev->dev);
+		irq = pdev->irq;
 
 		if (dev->if_version < DRM_IF_VERSION(1, 2) &&
 		    ctl->irq != irq)
diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
index 5370e6b492fd..2294a1580d35 100644
--- a/drivers/gpu/drm/drm_pci.c
+++ b/drivers/gpu/drm/drm_pci.c
@@ -70,7 +70,7 @@ drm_dma_handle_t *drm_pci_alloc(struct drm_device * dev, size_t size, size_t ali
 		return NULL;
 
 	dmah->size = size;
-	dmah->vaddr = dma_alloc_coherent(&dev->pdev->dev, size,
+	dmah->vaddr = dma_alloc_coherent(dev->dev, size,
 					 &dmah->busaddr,
 					 GFP_KERNEL);
 
@@ -93,7 +93,7 @@ EXPORT_SYMBOL(drm_pci_alloc);
  */
 void drm_pci_free(struct drm_device * dev, drm_dma_handle_t * dmah)
 {
-	dma_free_coherent(&dev->pdev->dev, dmah->size, dmah->vaddr,
+	dma_free_coherent(dev->dev, dmah->size, dmah->vaddr,
 			  dmah->busaddr);
 	kfree(dmah);
 }
@@ -112,16 +112,18 @@ static int drm_get_pci_domain(struct drm_device *dev)
 		return 0;
 #endif /* __alpha__ */
 
-	return pci_domain_nr(dev->pdev->bus);
+	return pci_domain_nr(to_pci_dev(dev->dev)->bus);
 }
 
 int drm_pci_set_busid(struct drm_device *dev, struct drm_master *master)
 {
+	struct pci_dev *pdev = to_pci_dev(dev->dev);
+
 	master->unique = kasprintf(GFP_KERNEL, "pci:%04x:%02x:%02x.%d",
 					drm_get_pci_domain(dev),
-					dev->pdev->bus->number,
-					PCI_SLOT(dev->pdev->devfn),
-					PCI_FUNC(dev->pdev->devfn));
+					pdev->bus->number,
+					PCI_SLOT(pdev->devfn),
+					PCI_FUNC(pdev->devfn));
 	if (!master->unique)
 		return -ENOMEM;
 
@@ -131,12 +133,14 @@ int drm_pci_set_busid(struct drm_device *dev, struct drm_master *master)
 
 static int drm_pci_irq_by_busid(struct drm_device *dev, struct drm_irq_busid *p)
 {
+	struct pci_dev *pdev = to_pci_dev(dev->dev);
+
 	if ((p->busnum >> 8) != drm_get_pci_domain(dev) ||
-	    (p->busnum & 0xff) != dev->pdev->bus->number ||
-	    p->devnum != PCI_SLOT(dev->pdev->devfn) || p->funcnum != PCI_FUNC(dev->pdev->devfn))
+	    (p->busnum & 0xff) != pdev->bus->number ||
+	    p->devnum != PCI_SLOT(pdev->devfn) || p->funcnum != PCI_FUNC(pdev->devfn))
 		return -EINVAL;
 
-	p->irq = dev->pdev->irq;
+	p->irq = pdev->irq;
 
 	DRM_DEBUG("%d:%d:%d => IRQ %d\n", p->busnum, p->devnum, p->funcnum,
 		  p->irq);
@@ -164,7 +168,7 @@ int drm_legacy_irq_by_busid(struct drm_device *dev, void *data,
 		return -EOPNOTSUPP;
 
 	/* UMS was only ever support on PCI devices. */
-	if (WARN_ON(!dev->pdev))
+	if (WARN_ON(!dev_is_pci(dev->dev)))
 		return -EINVAL;
 
 	if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
@@ -188,7 +192,7 @@ void drm_pci_agp_destroy(struct drm_device *dev)
 static void drm_pci_agp_init(struct drm_device *dev)
 {
 	if (drm_core_check_feature(dev, DRIVER_USE_AGP)) {
-		if (pci_find_capability(dev->pdev, PCI_CAP_ID_AGP))
+		if (pci_find_capability(to_pci_dev(dev->dev), PCI_CAP_ID_AGP))
 			dev->agp = drm_agp_init(dev);
 		if (dev->agp) {
 			dev->agp->agp_mtrr = arch_phys_wc_add(
diff --git a/drivers/gpu/drm/drm_vm.c b/drivers/gpu/drm/drm_vm.c
index 6d5a03b32238..9b3b989d7cad 100644
--- a/drivers/gpu/drm/drm_vm.c
+++ b/drivers/gpu/drm/drm_vm.c
@@ -278,7 +278,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
 			case _DRM_SCATTER_GATHER:
 				break;
 			case _DRM_CONSISTENT:
-				dma_free_coherent(&dev->pdev->dev,
+				dma_free_coherent(dev->dev,
 						  map->size,
 						  map->handle,
 						  map->offset);
-- 
2.29.2

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel

[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux