Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vgaarb: don't pass a cookie to vga_client_register

The VGA arbitration is entirely based on pci_dev structures, so just pass
that back to the set_vga_decode callback.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20210716061634.2446357-8-hch@lst.de
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>

authored by

Christoph Hellwig and committed by
Christian König
bf44e8ce f6b1772b

+36 -38
+5 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 1266 1266 /** 1267 1267 * amdgpu_device_vga_set_decode - enable/disable vga decode 1268 1268 * 1269 - * @cookie: amdgpu_device pointer 1269 + * @pdev: PCI device pointer 1270 1270 * @state: enable/disable vga decode 1271 1271 * 1272 1272 * Enable/disable vga decode (all asics). 1273 1273 * Returns VGA resource flags. 1274 1274 */ 1275 - static unsigned int amdgpu_device_vga_set_decode(void *cookie, bool state) 1275 + static unsigned int amdgpu_device_vga_set_decode(struct pci_dev *pdev, 1276 + bool state) 1276 1277 { 1277 - struct amdgpu_device *adev = cookie; 1278 + struct amdgpu_device *adev = drm_to_adev(pci_get_drvdata(pdev)); 1278 1279 amdgpu_asic_set_vga_state(adev, state); 1279 1280 if (state) 1280 1281 return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM | ··· 3680 3679 /* this will fail for cards that aren't VGA class devices, just 3681 3680 * ignore it */ 3682 3681 if ((adev->pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA) 3683 - vga_client_register(adev->pdev, adev, amdgpu_device_vga_set_decode); 3682 + vga_client_register(adev->pdev, amdgpu_device_vga_set_decode); 3684 3683 3685 3684 if (amdgpu_device_supports_px(ddev)) { 3686 3685 px = true;
+4 -3
drivers/gpu/drm/i915/display/intel_vga.c
··· 121 121 } 122 122 123 123 static unsigned int 124 - intel_vga_set_decode(void *cookie, bool enable_decode) 124 + intel_vga_set_decode(struct pci_dev *pdev, bool enable_decode) 125 125 { 126 - struct drm_i915_private *i915 = cookie; 126 + struct drm_i915_private *i915 = pdev_to_i915(pdev); 127 127 128 128 intel_vga_set_state(i915, enable_decode); 129 129 ··· 136 136 137 137 int intel_vga_register(struct drm_i915_private *i915) 138 138 { 139 + 139 140 struct pci_dev *pdev = to_pci_dev(i915->drm.dev); 140 141 int ret; 141 142 ··· 148 147 * then we do not take part in VGA arbitration and the 149 148 * vga_client_register() fails with -ENODEV. 150 149 */ 151 - ret = vga_client_register(pdev, i915, intel_vga_set_decode); 150 + ret = vga_client_register(pdev, intel_vga_set_decode); 152 151 if (ret && ret != -ENODEV) 153 152 return ret; 154 153
+3 -3
drivers/gpu/drm/nouveau/nouveau_vga.c
··· 11 11 #include "nouveau_vga.h" 12 12 13 13 static unsigned int 14 - nouveau_vga_set_decode(void *priv, bool state) 14 + nouveau_vga_set_decode(struct pci_dev *pdev, bool state) 15 15 { 16 - struct nouveau_drm *drm = nouveau_drm(priv); 16 + struct nouveau_drm *drm = nouveau_drm(pci_get_drvdata(pdev)); 17 17 struct nvif_object *device = &drm->client.device.object; 18 18 19 19 if (drm->client.device.info.family == NV_DEVICE_INFO_V0_CURIE && ··· 94 94 return; 95 95 pdev = to_pci_dev(dev->dev); 96 96 97 - vga_client_register(pdev, dev, nouveau_vga_set_decode); 97 + vga_client_register(pdev, nouveau_vga_set_decode); 98 98 99 99 /* don't register Thunderbolt eGPU with vga_switcheroo */ 100 100 if (pci_is_thunderbolt_attached(pdev))
+5 -4
drivers/gpu/drm/radeon/radeon_device.c
··· 1067 1067 /** 1068 1068 * radeon_vga_set_decode - enable/disable vga decode 1069 1069 * 1070 - * @cookie: radeon_device pointer 1070 + * @pdev: PCI device 1071 1071 * @state: enable/disable vga decode 1072 1072 * 1073 1073 * Enable/disable vga decode (all asics). 1074 1074 * Returns VGA resource flags. 1075 1075 */ 1076 - static unsigned int radeon_vga_set_decode(void *cookie, bool state) 1076 + static unsigned int radeon_vga_set_decode(struct pci_dev *pdev, bool state) 1077 1077 { 1078 - struct radeon_device *rdev = cookie; 1078 + struct drm_device *dev = pci_get_drvdata(pdev); 1079 + struct radeon_device *rdev = dev->dev_private; 1079 1080 radeon_vga_set_state(rdev, state); 1080 1081 if (state) 1081 1082 return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM | ··· 1435 1434 /* if we have > 1 VGA cards, then disable the radeon VGA resources */ 1436 1435 /* this will fail for cards that aren't VGA class devices, just 1437 1436 * ignore it */ 1438 - vga_client_register(rdev->pdev, rdev, radeon_vga_set_decode); 1437 + vga_client_register(rdev->pdev, radeon_vga_set_decode); 1439 1438 1440 1439 if (rdev->flags & RADEON_IS_PX) 1441 1440 runtime = true;
+10 -14
drivers/gpu/vga/vgaarb.c
··· 72 72 unsigned int io_norm_cnt; /* normal IO count */ 73 73 unsigned int mem_norm_cnt; /* normal MEM count */ 74 74 bool bridge_has_one_vga; 75 - void *cookie; 76 - unsigned int (*set_vga_decode)(void *cookie, bool decode); 75 + unsigned int (*set_decode)(struct pci_dev *pdev, bool decode); 77 76 }; 78 77 79 78 static LIST_HEAD(vga_list); ··· 805 806 goto bail; 806 807 807 808 /* don't let userspace futz with kernel driver decodes */ 808 - if (userspace && vgadev->set_vga_decode) 809 + if (userspace && vgadev->set_decode) 809 810 goto bail; 810 811 811 812 /* update the device decodes + counter */ ··· 839 840 /** 840 841 * vga_client_register - register or unregister a VGA arbitration client 841 842 * @pdev: pci device of the VGA client 842 - * @cookie: client cookie to be used in callbacks 843 - * @set_vga_decode: vga decode change callback 843 + * @set_decode: vga decode change callback 844 844 * 845 845 * Clients have two callback mechanisms they can use. 846 846 * 847 - * @set_vga_decode callback: If a client can disable its GPU VGA resource, it 847 + * @set_decode callback: If a client can disable its GPU VGA resource, it 848 848 * will get a callback from this to set the encode/decode state. 849 849 * 850 850 * Rationale: we cannot disable VGA decode resources unconditionally some single ··· 860 862 * 861 863 * Returns: 0 on success, -1 on failure 862 864 */ 863 - int vga_client_register(struct pci_dev *pdev, void *cookie, 864 - unsigned int (*set_vga_decode)(void *cookie, 865 - bool decode)) 865 + int vga_client_register(struct pci_dev *pdev, 866 + unsigned int (*set_decode)(struct pci_dev *pdev, bool decode)) 866 867 { 867 868 int ret = -ENODEV; 868 869 struct vga_device *vgadev; ··· 872 875 if (!vgadev) 873 876 goto bail; 874 877 875 - vgadev->set_vga_decode = set_vga_decode; 876 - vgadev->cookie = cookie; 878 + vgadev->set_decode = set_decode; 877 879 ret = 0; 878 880 879 881 bail: ··· 1382 1386 new_state = false; 1383 1387 else 1384 1388 new_state = true; 1385 - if (vgadev->set_vga_decode) { 1386 - new_decodes = vgadev->set_vga_decode(vgadev->cookie, 1387 - new_state); 1389 + if (vgadev->set_decode) { 1390 + new_decodes = vgadev->set_decode(vgadev->pdev, 1391 + new_state); 1388 1392 vga_update_device_decodes(vgadev, new_decodes); 1389 1393 } 1390 1394 }
+4 -5
drivers/vfio/pci/vfio_pci.c
··· 119 119 * has no way to get to it and routing can be disabled externally at the 120 120 * bridge. 121 121 */ 122 - static unsigned int vfio_pci_set_vga_decode(void *opaque, bool single_vga) 122 + static unsigned int vfio_pci_set_decode(struct pci_dev *pdev, bool single_vga) 123 123 { 124 - struct vfio_pci_device *vdev = opaque; 125 - struct pci_dev *tmp = NULL, *pdev = vdev->pdev; 124 + struct pci_dev *tmp = NULL; 126 125 unsigned char max_busnr; 127 126 unsigned int decodes; 128 127 ··· 1950 1951 if (!vfio_pci_is_vga(pdev)) 1951 1952 return 0; 1952 1953 1953 - ret = vga_client_register(pdev, vdev, vfio_pci_set_vga_decode); 1954 + ret = vga_client_register(pdev, vfio_pci_set_decode); 1954 1955 if (ret) 1955 1956 return ret; 1956 - vga_set_legacy_decoding(pdev, vfio_pci_set_vga_decode(vdev, false)); 1957 + vga_set_legacy_decoding(pdev, vfio_pci_set_decode(pdev, false)); 1957 1958 return 0; 1958 1959 } 1959 1960
+5 -5
include/linux/vgaarb.h
··· 51 51 struct pci_dev *vga_default_device(void); 52 52 void vga_set_default_device(struct pci_dev *pdev); 53 53 int vga_remove_vgacon(struct pci_dev *pdev); 54 - int vga_client_register(struct pci_dev *pdev, void *cookie, 55 - unsigned int (*set_vga_decode)(void *cookie, bool state)); 54 + int vga_client_register(struct pci_dev *pdev, 55 + unsigned int (*set_decode)(struct pci_dev *pdev, bool state)); 56 56 #else /* CONFIG_VGA_ARB */ 57 57 static inline void vga_set_legacy_decoding(struct pci_dev *pdev, 58 58 unsigned int decodes) ··· 77 77 { 78 78 return 0; 79 79 } 80 - static inline int vga_client_register(struct pci_dev *pdev, void *cookie, 81 - unsigned int (*set_vga_decode)(void *cookie, bool state)) 80 + static inline int vga_client_register(struct pci_dev *pdev, 81 + unsigned int (*set_decode)(struct pci_dev *pdev, bool state)) 82 82 { 83 83 return 0; 84 84 } ··· 116 116 117 117 static inline void vga_client_unregister(struct pci_dev *pdev) 118 118 { 119 - vga_client_register(pdev, NULL, NULL); 119 + vga_client_register(pdev, NULL); 120 120 } 121 121 122 122 #endif /* LINUX_VGA_H */