[PATCH 4/6] drm/amdgpu: Avoid use KIQ in VM fault ISR for SRIOV support
Yu, Xiangliang
Xiangliang.Yu at amd.com
Thu Dec 1 06:48:46 UTC 2016
> Am 30.11.2016 um 08:02 schrieb Xiangliang Yu:
> > Schedule a workqueue for VM fault handler on GMC V8.0 for SRIOV
> > support.
> >
> > Signed-off-by: shaoyunl <Shaoyun.Liu at amd.com>
> > Signed-off-by: Xiangliang Yu <Xiangliang.Yu at amd.com>
>
> NAK, it is vital to print the information from the registers and reset them
> ASAP even under SRIOV.
>
> My last status was that the registers in question shouldn't be subject to KIQ
> and accessed directly.
Ok, please ignore the patch.
>
> > ---
> > drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 40
> ++++++++++++++++++++++++++++++++++-
> > 1 file changed, 39 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> > b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> > index 0daac3a..e4a628c 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> > @@ -1219,7 +1219,7 @@ static int
> gmc_v8_0_vm_fault_interrupt_state(struct amdgpu_device *adev,
> > return 0;
> > }
> >
> > -static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev,
> > +static int gmc_v8_0_process_vm_fault(struct amdgpu_device *adev,
> > struct amdgpu_irq_src *source,
> > struct amdgpu_iv_entry *entry)
> > {
> > @@ -1250,6 +1250,44 @@ static int gmc_v8_0_process_interrupt(struct
> amdgpu_device *adev,
> > return 0;
> > }
> >
> > +struct gmc_vm_fault_work {
> > + struct work_struct base;
> > + struct amdgpu_device *adev;
> > + struct amdgpu_irq_src *source;
> > + struct amdgpu_iv_entry *entry;
> > +};
> > +
> > +static void gmc_v8_0_vm_fault_sched(struct work_struct *work) {
> > + struct gmc_vm_fault_work *vm_work =
> > + container_of(work, struct gmc_vm_fault_work, base);
> > + struct amdgpu_device *adev = vm_work->adev;
> > + struct amdgpu_irq_src *source = vm_work->source;
> > + struct amdgpu_iv_entry *entry = vm_work->entry;
> > +
> > + gmc_v8_0_process_vm_fault(adev, source, entry);
> > + kfree(vm_work);
> > +}
> > +
> > +static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev,
> > + struct amdgpu_irq_src *source,
> > + struct amdgpu_iv_entry *entry) {
> > + struct gmc_vm_fault_work *work = NULL;
> > +
> > + if (amdgpu_sriov_vf(adev)) {
> > + work = kmalloc(sizeof(struct gmc_vm_fault_work),
> GFP_ATOMIC);
> > + if (!work)
> > + return -ENOMEM;
> > + INIT_WORK(&work->base, gmc_v8_0_vm_fault_sched);
> > + work->adev = adev;
> > + work->source = source;
> > + work->entry = entry;
> > + return schedule_work(&work->base);
> > + }
> > + return gmc_v8_0_process_vm_fault(adev, source, entry); }
> > +
> > static void fiji_update_mc_medium_grain_clock_gating(struct
> amdgpu_device *adev,
> > bool enable)
> > {
>
More information about the amd-gfx
mailing list