On Sat, Oct 31, 2020 at 2:57 PM Daniel Vetter <[email protected]> wrote: > > On Fri, Oct 30, 2020 at 7:47 PM Alex Deucher <[email protected]> wrote: > > > > On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <[email protected]> > > wrote: > > > > > > Prep work to make drm_device->driver const. > > > > > > Signed-off-by: Daniel Vetter <[email protected]> > > > Cc: Alex Deucher <[email protected]> > > > Cc: "Christian König" <[email protected]> > > > Cc: Evan Quan <[email protected]> > > > Cc: Felix Kuehling <[email protected]> > > > Cc: Hawking Zhang <[email protected]> > > > Cc: Andrey Grodzovsky <[email protected]> > > > Cc: Luben Tuikov <[email protected]> > > > Cc: Thomas Zimmermann <[email protected]> > > > Cc: Monk Liu <[email protected]> > > > Cc: Yintian Tao <[email protected]> > > > Cc: Dennis Li <[email protected]> > > > Cc: shaoyunl <[email protected]> > > > Cc: Bokun Zhang <[email protected]> > > > Cc: "Stanley.Yang" <[email protected]> > > > Cc: Wenhui Sheng <[email protected]> > > > Cc: chen gong <[email protected]> > > > Signed-off-by: Daniel Vetter <[email protected]> > > > --- > > > 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; > > > > There is additional DRIVER_ATOMIC in amdgpu_pci_probe() for older > > chips without atomic support. > > That would need to be fixed for making the amdgpu drm_driver > structures constant, but that's not what I'm doing here. I'm only > removing the usage of the drm_device->driver pointer, to allow that to > become constant. Untangling the flow to make the amdgpu_kms_driver > const looked a bit more involved than just a simple patch.
On second look, this changes the drm_device->driver_features flag, which was added to avoid having to change the drm_driver one. So that's actually all ok (and just the virt code here is broken). But amdgpu also updates num_ioctl and other stuff, and that's a fairly invasive patch. I'm also not sure whether this code here can just be switched over from drm_driver->driver_features to drm_device->driver_features. So given all this, ok as-is and you guys figure out how to patch this properly, or want me to change something in this patch? Cheers, Daniel > > > Alex > > > > > + > > > adev->cg_flags = 0; > > > adev->pg_flags = 0; > > > } > > > -- > > > 2.28.0 > > > > > > _______________________________________________ > > > dri-devel mailing list > > > [email protected] > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
