static int xgpu_vi_poll_msg(struct amdgpu_device *adev, enum idh_event event) { int r = 0, timeout = VI_MAILBOX_TIMEDOUT; r = xgpu_vi_mailbox_rcv_msg(adev, event); while (r) { if (timeout <= 0) { pr_err("Doesn't get ack from pf.\n"); r = -ETIME; break; } mdelay(5); timeout -= 5; r = xgpu_vi_mailbox_rcv_msg(adev, event); } return r; }
static int xgpu_vi_mailbox_rcv_irq(struct amdgpu_device *adev, struct amdgpu_irq_src *source, struct amdgpu_iv_entry *entry) { int r; /* see what event we get */ r = xgpu_vi_mailbox_rcv_msg(adev, IDH_FLR_NOTIFICATION); /* only handle FLR_NOTIFY now */ if (!r) schedule_work(&adev->virt.flr_work); return 0; }
static int xgpu_vi_mailbox_rcv_irq(struct amdgpu_device *adev, struct amdgpu_irq_src *source, struct amdgpu_iv_entry *entry) { int r; /* trigger gpu-reset by hypervisor only if TDR disbaled */ if (amdgpu_lockup_timeout == 0) { /* see what event we get */ r = xgpu_vi_mailbox_rcv_msg(adev, IDH_FLR_NOTIFICATION); /* only handle FLR_NOTIFY now */ if (!r) schedule_work(&adev->virt.flr_work); } return 0; }