On Sat, Oct 31, 2020 at 2:57 PM Daniel Vetter <daniel.vetter@xxxxxxxx> wrote: > > On Fri, Oct 30, 2020 at 7:47 PM Alex Deucher <alexdeucher@xxxxxxxxx> wrote: > > > > On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@xxxxxxxx> wrote: > > > > > > Prep work to make drm_device->driver const. > > > > > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > > > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > > > Cc: "Christian König" <christian.koenig@xxxxxxx> > > > Cc: Evan Quan <evan.quan@xxxxxxx> > > > Cc: Felix Kuehling <Felix.Kuehling@xxxxxxx> > > > Cc: Hawking Zhang <Hawking.Zhang@xxxxxxx> > > > Cc: Andrey Grodzovsky <andrey.grodzovsky@xxxxxxx> > > > Cc: Luben Tuikov <luben.tuikov@xxxxxxx> > > > Cc: Thomas Zimmermann <tzimmermann@xxxxxxx> > > > Cc: Monk Liu <Monk.Liu@xxxxxxx> > > > Cc: Yintian Tao <yttao@xxxxxxx> > > > Cc: Dennis Li <Dennis.Li@xxxxxxx> > > > Cc: shaoyunl <shaoyun.liu@xxxxxxx> > > > Cc: Bokun Zhang <Bokun.Zhang@xxxxxxx> > > > Cc: "Stanley.Yang" <Stanley.Yang@xxxxxxx> > > > Cc: Wenhui Sheng <Wenhui.Sheng@xxxxxxx> > > > Cc: chen gong <curry.gong@xxxxxxx> > > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> > > > --- > > > 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 > > > dri-devel@xxxxxxxxxxxxxxxxxxxxx > > > 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 Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx