dm: passthru: pass pbdf when reset msi/msix interrupt
Physcial bdf is needed in hypervisor to find the right pci dev. Tracked-On: #2788 Signed-off-by: Binbin Wu <binbin.wu@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
This commit is contained in:
parent
cd360de4aa
commit
7669a76f95
|
@ -541,7 +541,7 @@ vm_set_ptdev_msix_info(struct vmctx *ctx, struct ic_ptdev_irq *ptirq)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
vm_reset_ptdev_msix_info(struct vmctx *ctx, uint16_t virt_bdf,
|
vm_reset_ptdev_msix_info(struct vmctx *ctx, uint16_t virt_bdf, uint16_t phys_bdf,
|
||||||
int vector_count)
|
int vector_count)
|
||||||
{
|
{
|
||||||
struct ic_ptdev_irq ptirq;
|
struct ic_ptdev_irq ptirq;
|
||||||
|
@ -549,6 +549,7 @@ vm_reset_ptdev_msix_info(struct vmctx *ctx, uint16_t virt_bdf,
|
||||||
bzero(&ptirq, sizeof(ptirq));
|
bzero(&ptirq, sizeof(ptirq));
|
||||||
ptirq.type = IRQ_MSIX;
|
ptirq.type = IRQ_MSIX;
|
||||||
ptirq.virt_bdf = virt_bdf;
|
ptirq.virt_bdf = virt_bdf;
|
||||||
|
ptirq.phys_bdf = phys_bdf;
|
||||||
ptirq.msix.vector_cnt = vector_count;
|
ptirq.msix.vector_cnt = vector_count;
|
||||||
|
|
||||||
return ioctl(ctx->fd, IC_RESET_PTDEV_INTR_INFO, &ptirq);
|
return ioctl(ctx->fd, IC_RESET_PTDEV_INTR_INFO, &ptirq);
|
||||||
|
|
|
@ -508,7 +508,7 @@ deinit_msix_table(struct vmctx *ctx, struct passthru_dev *ptdev)
|
||||||
if (ptdev->msix.ptirq_allocated) {
|
if (ptdev->msix.ptirq_allocated) {
|
||||||
printf("ptdev reset msix: 0x%x-%x, vector_cnt=%d.\n",
|
printf("ptdev reset msix: 0x%x-%x, vector_cnt=%d.\n",
|
||||||
virt_bdf, ptdev->phys_bdf, vector_cnt);
|
virt_bdf, ptdev->phys_bdf, vector_cnt);
|
||||||
vm_reset_ptdev_msix_info(ctx, virt_bdf, vector_cnt);
|
vm_reset_ptdev_msix_info(ctx, virt_bdf, ptdev->phys_bdf, vector_cnt);
|
||||||
ptdev->msix.ptirq_allocated = false;
|
ptdev->msix.ptirq_allocated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -909,8 +909,7 @@ passthru_deinit(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
|
||||||
deinit_msix_table(ctx, ptdev);
|
deinit_msix_table(ctx, ptdev);
|
||||||
else if(ptdev->msi.capoff != 0) {
|
else if(ptdev->msi.capoff != 0) {
|
||||||
/* Currently only support 1 vector */
|
/* Currently only support 1 vector */
|
||||||
printf("ptdev reset msi: 0x%x-%x\n", virt_bdf, ptdev->phys_bdf);
|
vm_reset_ptdev_msix_info(ctx, virt_bdf, ptdev->phys_bdf, 1);
|
||||||
vm_reset_ptdev_msix_info(ctx, virt_bdf, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("vm_reset_ptdev_intx:0x%x-%x, ioapic virpin=%d.\n",
|
printf("vm_reset_ptdev_intx:0x%x-%x, ioapic virpin=%d.\n",
|
||||||
|
|
|
@ -130,7 +130,7 @@ int vm_unmap_ptdev_mmio(struct vmctx *ctx, int bus, int slot, int func,
|
||||||
int vm_setup_ptdev_msi(struct vmctx *ctx,
|
int vm_setup_ptdev_msi(struct vmctx *ctx,
|
||||||
struct acrn_vm_pci_msix_remap *msi_remap);
|
struct acrn_vm_pci_msix_remap *msi_remap);
|
||||||
int vm_set_ptdev_msix_info(struct vmctx *ctx, struct ic_ptdev_irq *ptirq);
|
int vm_set_ptdev_msix_info(struct vmctx *ctx, struct ic_ptdev_irq *ptirq);
|
||||||
int vm_reset_ptdev_msix_info(struct vmctx *ctx, uint16_t virt_bdf,
|
int vm_reset_ptdev_msix_info(struct vmctx *ctx, uint16_t virt_bdf, uint16_t phys_bdf,
|
||||||
int vector_count);
|
int vector_count);
|
||||||
int vm_set_ptdev_intx_info(struct vmctx *ctx, uint16_t virt_bdf,
|
int vm_set_ptdev_intx_info(struct vmctx *ctx, uint16_t virt_bdf,
|
||||||
uint16_t phys_bdf, int virt_pin, int phys_pin, bool pic_pin);
|
uint16_t phys_bdf, int virt_pin, int phys_pin, bool pic_pin);
|
||||||
|
|
Loading…
Reference in New Issue