|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v11 2/6] VT-d: Introduce new fields in msi_desc to track binding with guest interrupt
On Fri, Mar 31, 2017 at 01:46:33PM +0800, Tian, Kevin wrote:
>> From: Gao, Chao
>> Sent: Wednesday, March 29, 2017 1:12 PM
>>
>> return entry;
>> diff --git a/xen/drivers/passthrough/io.c b/xen/drivers/passthrough/io.c
>> index d53976c..5dbfe53 100644
>> --- a/xen/drivers/passthrough/io.c
>> +++ b/xen/drivers/passthrough/io.c
>> @@ -618,6 +618,8 @@ int pt_irq_destroy_bind(
>> else
>> what = "bogus";
>> }
>> + else if ( iommu_intpost && pirq && pirq_dpci->gmsi.posted )
>
>No need to check iommu_intpost. Just keep later conditions.
ok. Is it for if posted is set, the iommu_intpost should be true?
>
>btw isn't the condition be " (pirq_dpci && pirq_dpci->gmsi.posted)"?
I don't think so. pirq, not pirq_dpci, is consumed by pi_update_irte.
Furthermore if pirq_dpci is null, pirq is also null. But it is not true
in turn.
>
>> + pi_update_irte(NULL, pirq, 0);
>>
>> if ( pirq_dpci && (pirq_dpci->flags & HVM_IRQ_DPCI_MAPPED) &&
>> list_empty(&pirq_dpci->digl_list) )
>> /*
>> * This function is used to update the IRTE for posted-interrupt
>> * when guest changes MSI/MSI-X information.
>> @@ -946,17 +912,9 @@ int pi_update_irte(const struct vcpu *v, const struct
>> pirq *pirq,
>> const uint8_t gvec)
>> {
>> struct irq_desc *desc;
>> - const struct msi_desc *msi_desc;
>> - int remap_index;
>> - int rc = 0;
>> - const struct pci_dev *pci_dev;
>> - const struct acpi_drhd_unit *drhd;
>> - struct iommu *iommu;
>> - struct ir_ctrl *ir_ctrl;
>> - struct iremap_entry *iremap_entries = NULL, *p = NULL;
>> - struct iremap_entry new_ire, old_ire;
>> - const struct pi_desc *pi_desc = &v->arch.hvm_vmx.pi_desc;
>> - __uint128_t ret;
>> + struct msi_desc *msi_desc;
>> + const struct pi_desc *pi_desc = v ? &v->arch.hvm_vmx.pi_desc : NULL;
>
>will there be a case that pi_update_desc is invoked with v==NULL?
The line behind your last comment above. It is to clear 'pi_desc' and 'gvec'
fields in msi_desc when guest destroies the binding with pt-irq.
>
>> + int rc;
>>
>> desc = pirq_spin_lock_irq_desc(pirq, NULL);
>> if ( !desc )
>> @@ -968,59 +926,13 @@ int pi_update_irte(const struct vcpu *v, const
>> struct pirq *pirq,
>> rc = -ENODEV;
>> goto unlock_out;
>> }
>> -
>> - pci_dev = msi_desc->dev;
>> - if ( !pci_dev )
>> - {
>> - rc = -ENODEV;
>> - goto unlock_out;
>> - }
>> -
>> - remap_index = msi_desc->remap_index;
>> + msi_desc->pi_desc = pi_desc;
>> + msi_desc->gvec = gvec;
>
>Is it possible to see pi_desc already assigned? the name of pi_update_irte
>looks it may be invoked multiple times. If we assume a new update should
>happen only when previous one is cleaned up, then some check code
>should be added here to prove that assumption.
We don't make this assumption. I just want to track the msi's binding with
guest. If guest updates it, we updates here. If guest clears it, then we clear
it accordingly.
Thanks
Chao
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |