On Sat, Oct 31, 2020 at 6:09 AM Luben Tuikov luben.tuikov@amd.com wrote:
On 2020-10-30 08:04, Daniel Vetter wrote:
On Fri, Oct 30, 2020 at 11:41 AM Liu, Monk Monk.Liu@amd.com wrote:
[AMD Official Use Only - Internal Distribution Only]
What's the purpose of the patch sets
e.g.: what bug can those 5 patches fix or what feature provided
for this particular one (3/5) I didn't see how it helpful, could you give a background ?
It's good to make function tables const, so that they can be write protected. More resilience against exploits and all that. This patch here is needed to be able to make drm_device->driver const so that all other drivers can make their drm_driver structure const. Would be good to fully fix up amdgpu like in the comment, but I'm not going that in this series here. -Daniel
Hi Daniel,
I feel that that's a good change.
But if you can clarify this for me... Is this leading towards a single instance of a struct drm_driver per low-level driver, i.e. amdgpu?
And as such, being able to be defined as const?
So that we have many GPU devices driven by one low-level driver (amdgpu_drv), represented by one const drm_driver (and thus const)?
Which would imply that if varied devices can be handled by a single low-level driver, whose struct drm_driver settings cannot be shared among subset of devices (say very old and new), then the low-level driver would have to create more than one "const" struct drm_driver?
This is already the case, minus the const. Which is why it's problemantic if you change that shared drm_driver instance at runtime from a specific driver, since you always change it for all instances. -Daniel
Regards, Luben
thanks _____________________________________ Monk Liu|GPU Virtualization Team |AMD
-----Original Message----- From: Daniel Vetter daniel.vetter@ffwll.ch Sent: Friday, October 30, 2020 6:11 PM To: DRI Development dri-devel@lists.freedesktop.org Cc: Intel Graphics Development intel-gfx@lists.freedesktop.org; Daniel Vetter daniel.vetter@ffwll.ch; Deucher, Alexander Alexander.Deucher@amd.com; Koenig, Christian Christian.Koenig@amd.com; Quan, Evan Evan.Quan@amd.com; Kuehling, Felix Felix.Kuehling@amd.com; Zhang, Hawking Hawking.Zhang@amd.com; Grodzovsky, Andrey Andrey.Grodzovsky@amd.com; Tuikov, Luben Luben.Tuikov@amd.com; Thomas Zimmermann tzimmermann@suse.de; Liu, Monk Monk.Liu@amd.com; Yintian Tao yttao@amd.com; Li, Dennis Dennis.Li@amd.com; Liu, Shaoyun Shaoyun.Liu@amd.com; Zhang, Bokun Bokun.Zhang@amd.com; Yang, Stanley Stanley.Yang@amd.com; Sheng, Wenhui Wenhui.Sheng@amd.com; Gong, Curry Curry.Gong@amd.com; Daniel Vetter daniel.vetter@intel.com Subject: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
Prep work to make drm_device->driver const.
Signed-off-by: Daniel Vetter daniel.vetter@ffwll.ch Cc: Alex Deucher alexander.deucher@amd.com Cc: "Christian König" christian.koenig@amd.com Cc: Evan Quan evan.quan@amd.com Cc: Felix Kuehling Felix.Kuehling@amd.com Cc: Hawking Zhang Hawking.Zhang@amd.com Cc: Andrey Grodzovsky andrey.grodzovsky@amd.com Cc: Luben Tuikov luben.tuikov@amd.com Cc: Thomas Zimmermann tzimmermann@suse.de Cc: Monk Liu Monk.Liu@amd.com Cc: Yintian Tao yttao@amd.com Cc: Dennis Li Dennis.Li@amd.com Cc: shaoyunl shaoyun.liu@amd.com Cc: Bokun Zhang Bokun.Zhang@amd.com Cc: "Stanley.Yang" Stanley.Yang@amd.com Cc: Wenhui Sheng Wenhui.Sheng@amd.com Cc: chen gong curry.gong@amd.com Signed-off-by: Daniel Vetter daniel.vetter@intel.com
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 8 ++++---- drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++- 2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 024c3b70b1aa..3d337f13ae4e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
MODULE_DEVICE_TABLE(pci, pciidlist);
-static struct drm_driver kms_driver; +struct drm_driver amdgpu_kms_driver;
static int amdgpu_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev, if (ret) return ret;
-adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev); +adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver, +typeof(*adev), ddev); if (IS_ERR(adev)) return PTR_ERR(adev);
@@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv) return 0; }
-static struct drm_driver kms_driver = { +struct drm_driver amdgpu_kms_driver = { .driver_features = DRIVER_ATOMIC | DRIVER_GEM | @@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void) goto error_fence;
DRM_INFO("amdgpu kernel modesetting enabled.\n"); -kms_driver.num_ioctls = amdgpu_max_kms_ioctl; +amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl; amdgpu_register_atpx_handler();
/* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c index d0aea5e39531..dde4c449c284 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c @@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev) return RREG32_NO_KIQ(0xc040) == 0xffffffff; }
+extern struct drm_driver amdgpu_kms_driver;
void amdgpu_virt_init_setting(struct amdgpu_device *adev) { /* enable virtual display */ if (adev->mode_info.num_crtc == 0) adev->mode_info.num_crtc = 1; adev->enable_virtual_display = true; -adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
+/*
- FIXME: Either make virt support atomic or make sure you have two
- drm_driver structs, these kind of tricks are only ok when there's
- guaranteed only a single device per system. This should also be done
- before struct drm_device is initialized.
- */
+amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
adev->cg_flags = 0; adev->pg_flags = 0; } -- 2.28.0