On Tue, Apr 3, 2012 at 8:13 AM, Dave Airlie <airlied@xxxxxxxxx> wrote: > From: Dave Airlie <airlied@xxxxxxxxxx> > > This closes a race seen with kexec where we enable PCI bus mastering > but the card has been reinitialised fully yet. > > This was previously fixed by a patch from Jerome, but this should > close the race completely. > > Reported-and-tested-by: Markus Trippelsdorf <markus@xxxxxxxxxxxxxxx> > Signed-off-by: Dave Airlie <airlied@xxxxxxxxxx> For 3.4, you'll need to update si.c as well. Alex > --- > drivers/gpu/drm/radeon/r100.c | 4 ++++ > drivers/gpu/drm/radeon/r600.c | 3 +++ > drivers/gpu/drm/radeon/radeon_device.c | 1 - > drivers/gpu/drm/radeon/radeon_kms.c | 2 -- > 4 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c > index 81801c1..e11df77 100644 > --- a/drivers/gpu/drm/radeon/r100.c > +++ b/drivers/gpu/drm/radeon/r100.c > @@ -1180,6 +1180,10 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size) > WREG32(RADEON_CP_RB_WPTR_DELAY, 0); > WREG32(RADEON_CP_CSQ_MODE, 0x00004D4D); > WREG32(RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIBM_INDBM); > + > + /* at this point everything should be setup correctly to enable master */ > + pci_set_master(rdev->pdev); > + > radeon_ring_start(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); > r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring); > if (r) { > diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c > index 5eb2382..50cf034 100644 > --- a/drivers/gpu/drm/radeon/r600.c > +++ b/drivers/gpu/drm/radeon/r600.c > @@ -3034,6 +3034,9 @@ int r600_irq_init(struct radeon_device *rdev) > else > r600_disable_interrupt_state(rdev); > > + /* at this point everything should be setup correctly to enable master */ > + pci_set_master(rdev->pdev); > + > /* enable irqs */ > r600_enable_interrupts(rdev); > > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c > index 49f7cb7..a282331 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -951,7 +951,6 @@ int radeon_resume_kms(struct drm_device *dev) > console_unlock(); > return -1; > } > - pci_set_master(dev->pdev); > /* resume AGP if in use */ > radeon_agp_resume(rdev); > radeon_resume(rdev); > diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c > index 1986eba..d335288 100644 > --- a/drivers/gpu/drm/radeon/radeon_kms.c > +++ b/drivers/gpu/drm/radeon/radeon_kms.c > @@ -57,8 +57,6 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags) > } > dev->dev_private = (void *)rdev; > > - pci_set_master(dev->pdev); > - > /* update BUS flag */ > if (drm_pci_device_is_agp(dev)) { > flags |= RADEON_IS_AGP; > -- > 1.7.7.6 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel