Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-12-02 Thread Eric Auger
On 12/02/2014 05:02 PM, Alex Williamson wrote:
> On Tue, 2014-12-02 at 08:52 +0100, Eric Auger wrote:
>> On 12/02/2014 05:48 AM, Alex Williamson wrote:
>>> On Tue, 2014-12-02 at 02:08 +, Wu, Feng wrote:
>>>>
>>>>> -Original Message-
>>>>> From: Eric Auger [mailto:eric.au...@linaro.org]
>>>>> Sent: Monday, December 01, 2014 6:10 PM
>>>>> To: Alex Williamson
>>>>> Cc: Wu, Feng; pbonz...@redhat.com; g...@kernel.org; kvm@vger.kernel.org
>>>>> Subject: Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d
>>>>> Posted-Interrupts
>>>>>
>>>>> On 11/25/2014 05:10 PM, Alex Williamson wrote:
>>>>>> On Tue, 2014-11-25 at 16:01 +0100, Eric Auger wrote:
>>>>>>> On 11/25/2014 01:23 PM, Feng Wu wrote:
>>>>>>>> This patch adds and documents a new attribute
>>>>>>>> KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE
>>>>> group.
>>>>>>>> This new attribute is used for VT-d Posted-Interrupts.
>>>>>>>>
>>>>>>>> When guest OS changes the interrupt configuration for an
>>>>>>>> assigned device, such as, MSI/MSIx data/address fields,
>>>>>>>> QEMU will use this IRQ attribute to tell KVM to update the
>>>>>>>> related IRTE according the VT-d Posted-Interrrupts Specification,
>>>>>>>> such as, the guest vector should be updated in the related IRTE.
>>>>>>>>
>>>>>>>> Signed-off-by: Feng Wu 
>>>>>>>> ---
>>>>>>>>  Documentation/virtual/kvm/devices/vfio.txt |9 +
>>>>>>>>  include/uapi/linux/kvm.h   |   10 ++
>>>>>>>>  2 files changed, 19 insertions(+), 0 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/Documentation/virtual/kvm/devices/vfio.txt
>>>>> b/Documentation/virtual/kvm/devices/vfio.txt
>>>>>>>> index f7aff29..39dee86 100644
>>>>>>>> --- a/Documentation/virtual/kvm/devices/vfio.txt
>>>>>>>> +++ b/Documentation/virtual/kvm/devices/vfio.txt
>>>>>>>> @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been
>>>>> called to trigger the IRQ
>>>>>>>>  or associate an eventfd to it. Unforwarding can only be called while 
>>>>>>>> the
>>>>>>>>  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this
>>>>> condition is
>>>>>>>>  not satisfied, the command returns an -EBUSY.
>>>>>>>> +
>>>>>>>> +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups
>>>>> mechanism to post
>>>>>>>> +   the IRQ to guests.
>>>>>>>> +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr
>>>>> struct.
>>>>>>>> +
>>>>>>>> +When guest OS changes the interrupt configuration for an assigned
>>>>> device,
>>>>>>>> +such as, MSI/MSIx data/address fields, QEMU will use this IRQ 
>>>>>>>> attribute
>>>>>>>> +to tell KVM to update the related IRTE according the VT-d
>>>>> Posted-Interrrupts
>>>>>>>> +Specification, such as, the guest vector should be updated in the 
>>>>>>>> related
>>>>> IRTE.
>>>>>>>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
>>>>>>>> index a269a42..e5f86ad 100644
>>>>>>>> --- a/include/uapi/linux/kvm.h
>>>>>>>> +++ b/include/uapi/linux/kvm.h
>>>>>>>> @@ -949,6 +949,7 @@ struct kvm_device_attr {
>>>>>>>>  #define  KVM_DEV_VFIO_DEVICE  2
>>>>>>>>  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ 1
>>>>>>>>  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ   2
>>>>>>>> +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ 3
>>>>>>>>
>>>>>>>>  enum kvm_device_type {
>>>>>>>>KVM_DEV_TYPE_FSL_MPIC_20= 1,
>>>>>>>> @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq 

Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-12-02 Thread Alex Williamson
On Tue, 2014-12-02 at 08:52 +0100, Eric Auger wrote:
> On 12/02/2014 05:48 AM, Alex Williamson wrote:
> > On Tue, 2014-12-02 at 02:08 +, Wu, Feng wrote:
> >>
> >>> -Original Message-
> >>> From: Eric Auger [mailto:eric.au...@linaro.org]
> >>> Sent: Monday, December 01, 2014 6:10 PM
> >>> To: Alex Williamson
> >>> Cc: Wu, Feng; pbonz...@redhat.com; g...@kernel.org; kvm@vger.kernel.org
> >>> Subject: Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d
> >>> Posted-Interrupts
> >>>
> >>> On 11/25/2014 05:10 PM, Alex Williamson wrote:
> >>>> On Tue, 2014-11-25 at 16:01 +0100, Eric Auger wrote:
> >>>>> On 11/25/2014 01:23 PM, Feng Wu wrote:
> >>>>>> This patch adds and documents a new attribute
> >>>>>> KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE
> >>> group.
> >>>>>> This new attribute is used for VT-d Posted-Interrupts.
> >>>>>>
> >>>>>> When guest OS changes the interrupt configuration for an
> >>>>>> assigned device, such as, MSI/MSIx data/address fields,
> >>>>>> QEMU will use this IRQ attribute to tell KVM to update the
> >>>>>> related IRTE according the VT-d Posted-Interrrupts Specification,
> >>>>>> such as, the guest vector should be updated in the related IRTE.
> >>>>>>
> >>>>>> Signed-off-by: Feng Wu 
> >>>>>> ---
> >>>>>>  Documentation/virtual/kvm/devices/vfio.txt |9 +
> >>>>>>  include/uapi/linux/kvm.h   |   10 ++
> >>>>>>  2 files changed, 19 insertions(+), 0 deletions(-)
> >>>>>>
> >>>>>> diff --git a/Documentation/virtual/kvm/devices/vfio.txt
> >>> b/Documentation/virtual/kvm/devices/vfio.txt
> >>>>>> index f7aff29..39dee86 100644
> >>>>>> --- a/Documentation/virtual/kvm/devices/vfio.txt
> >>>>>> +++ b/Documentation/virtual/kvm/devices/vfio.txt
> >>>>>> @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been
> >>> called to trigger the IRQ
> >>>>>>  or associate an eventfd to it. Unforwarding can only be called while 
> >>>>>> the
> >>>>>>  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this
> >>> condition is
> >>>>>>  not satisfied, the command returns an -EBUSY.
> >>>>>> +
> >>>>>> +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups
> >>> mechanism to post
> >>>>>> +   the IRQ to guests.
> >>>>>> +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr
> >>> struct.
> >>>>>> +
> >>>>>> +When guest OS changes the interrupt configuration for an assigned
> >>> device,
> >>>>>> +such as, MSI/MSIx data/address fields, QEMU will use this IRQ 
> >>>>>> attribute
> >>>>>> +to tell KVM to update the related IRTE according the VT-d
> >>> Posted-Interrrupts
> >>>>>> +Specification, such as, the guest vector should be updated in the 
> >>>>>> related
> >>> IRTE.
> >>>>>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> >>>>>> index a269a42..e5f86ad 100644
> >>>>>> --- a/include/uapi/linux/kvm.h
> >>>>>> +++ b/include/uapi/linux/kvm.h
> >>>>>> @@ -949,6 +949,7 @@ struct kvm_device_attr {
> >>>>>>  #define  KVM_DEV_VFIO_DEVICE  2
> >>>>>>  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ 1
> >>>>>>  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ   2
> >>>>>> +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ 3
> >>>>>>
> >>>>>>  enum kvm_device_type {
> >>>>>>KVM_DEV_TYPE_FSL_MPIC_20= 1,
> >>>>>> @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
> >>>>>>__u32 gsi; /* gsi, ie. virtual IRQ number */
> >>>>>>  };
> >>>>>>
> >>> Hi Feng, Alex,
> >>> I am currently reworking my code to use something closer to this struct

Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-12-01 Thread Eric Auger
On 12/02/2014 05:48 AM, Alex Williamson wrote:
> On Tue, 2014-12-02 at 02:08 +, Wu, Feng wrote:
>>
>>> -Original Message-
>>> From: Eric Auger [mailto:eric.au...@linaro.org]
>>> Sent: Monday, December 01, 2014 6:10 PM
>>> To: Alex Williamson
>>> Cc: Wu, Feng; pbonz...@redhat.com; g...@kernel.org; kvm@vger.kernel.org
>>> Subject: Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d
>>> Posted-Interrupts
>>>
>>> On 11/25/2014 05:10 PM, Alex Williamson wrote:
>>>> On Tue, 2014-11-25 at 16:01 +0100, Eric Auger wrote:
>>>>> On 11/25/2014 01:23 PM, Feng Wu wrote:
>>>>>> This patch adds and documents a new attribute
>>>>>> KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE
>>> group.
>>>>>> This new attribute is used for VT-d Posted-Interrupts.
>>>>>>
>>>>>> When guest OS changes the interrupt configuration for an
>>>>>> assigned device, such as, MSI/MSIx data/address fields,
>>>>>> QEMU will use this IRQ attribute to tell KVM to update the
>>>>>> related IRTE according the VT-d Posted-Interrrupts Specification,
>>>>>> such as, the guest vector should be updated in the related IRTE.
>>>>>>
>>>>>> Signed-off-by: Feng Wu 
>>>>>> ---
>>>>>>  Documentation/virtual/kvm/devices/vfio.txt |9 +
>>>>>>  include/uapi/linux/kvm.h   |   10 ++
>>>>>>  2 files changed, 19 insertions(+), 0 deletions(-)
>>>>>>
>>>>>> diff --git a/Documentation/virtual/kvm/devices/vfio.txt
>>> b/Documentation/virtual/kvm/devices/vfio.txt
>>>>>> index f7aff29..39dee86 100644
>>>>>> --- a/Documentation/virtual/kvm/devices/vfio.txt
>>>>>> +++ b/Documentation/virtual/kvm/devices/vfio.txt
>>>>>> @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been
>>> called to trigger the IRQ
>>>>>>  or associate an eventfd to it. Unforwarding can only be called while the
>>>>>>  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this
>>> condition is
>>>>>>  not satisfied, the command returns an -EBUSY.
>>>>>> +
>>>>>> +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups
>>> mechanism to post
>>>>>> +   the IRQ to guests.
>>>>>> +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr
>>> struct.
>>>>>> +
>>>>>> +When guest OS changes the interrupt configuration for an assigned
>>> device,
>>>>>> +such as, MSI/MSIx data/address fields, QEMU will use this IRQ attribute
>>>>>> +to tell KVM to update the related IRTE according the VT-d
>>> Posted-Interrrupts
>>>>>> +Specification, such as, the guest vector should be updated in the 
>>>>>> related
>>> IRTE.
>>>>>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
>>>>>> index a269a42..e5f86ad 100644
>>>>>> --- a/include/uapi/linux/kvm.h
>>>>>> +++ b/include/uapi/linux/kvm.h
>>>>>> @@ -949,6 +949,7 @@ struct kvm_device_attr {
>>>>>>  #define  KVM_DEV_VFIO_DEVICE2
>>>>>>  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ   1
>>>>>>  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ 2
>>>>>> +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ   3
>>>>>>
>>>>>>  enum kvm_device_type {
>>>>>>  KVM_DEV_TYPE_FSL_MPIC_20= 1,
>>>>>> @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
>>>>>>  __u32 gsi; /* gsi, ie. virtual IRQ number */
>>>>>>  };
>>>>>>
>>> Hi Feng, Alex,
>>> I am currently reworking my code to use something closer to this struct.
>>> Would you agree with following changes?
>>>>>> +struct kvm_posted_intr {
>>> kvm_posted_irq
>>
>> Hi Alex,
>>
>> Do you mean changing the structure name to "kvm_posted_irq"? I am okay
>> If you think this name is also suitable for ARM forwarded irq. Or we can find
>> a more common name, such as "struct kvm_accel_irq", what is your opinion, 
>> Alex?
> 
> I'd thi

RE: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-12-01 Thread Wu, Feng


> -Original Message-
> From: Alex Williamson [mailto:alex.william...@redhat.com]
> Sent: Tuesday, December 02, 2014 12:48 PM
> To: Wu, Feng
> Cc: Eric Auger; pbonz...@redhat.com; g...@kernel.org; kvm@vger.kernel.org
> Subject: Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d
> Posted-Interrupts
> 
> On Tue, 2014-12-02 at 02:08 +, Wu, Feng wrote:
> >
> > > -Original Message-
> > > From: Eric Auger [mailto:eric.au...@linaro.org]
> > > Sent: Monday, December 01, 2014 6:10 PM
> > > To: Alex Williamson
> > > Cc: Wu, Feng; pbonz...@redhat.com; g...@kernel.org;
> kvm@vger.kernel.org
> > > Subject: Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d
> > > Posted-Interrupts
> > >
> > > On 11/25/2014 05:10 PM, Alex Williamson wrote:
> > > > On Tue, 2014-11-25 at 16:01 +0100, Eric Auger wrote:
> > > >> On 11/25/2014 01:23 PM, Feng Wu wrote:
> > > >>> This patch adds and documents a new attribute
> > > >>> KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE
> > > group.
> > > >>> This new attribute is used for VT-d Posted-Interrupts.
> > > >>>
> > > >>> When guest OS changes the interrupt configuration for an
> > > >>> assigned device, such as, MSI/MSIx data/address fields,
> > > >>> QEMU will use this IRQ attribute to tell KVM to update the
> > > >>> related IRTE according the VT-d Posted-Interrrupts Specification,
> > > >>> such as, the guest vector should be updated in the related IRTE.
> > > >>>
> > > >>> Signed-off-by: Feng Wu 
> > > >>> ---
> > > >>>  Documentation/virtual/kvm/devices/vfio.txt |9 +
> > > >>>  include/uapi/linux/kvm.h   |   10 ++
> > > >>>  2 files changed, 19 insertions(+), 0 deletions(-)
> > > >>>
> > > >>> diff --git a/Documentation/virtual/kvm/devices/vfio.txt
> > > b/Documentation/virtual/kvm/devices/vfio.txt
> > > >>> index f7aff29..39dee86 100644
> > > >>> --- a/Documentation/virtual/kvm/devices/vfio.txt
> > > >>> +++ b/Documentation/virtual/kvm/devices/vfio.txt
> > > >>> @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has
> been
> > > called to trigger the IRQ
> > > >>>  or associate an eventfd to it. Unforwarding can only be called while
> the
> > > >>>  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this
> > > condition is
> > > >>>  not satisfied, the command returns an -EBUSY.
> > > >>> +
> > > >>> +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups
> > > mechanism to post
> > > >>> +   the IRQ to guests.
> > > >>> +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr
> > > struct.
> > > >>> +
> > > >>> +When guest OS changes the interrupt configuration for an assigned
> > > device,
> > > >>> +such as, MSI/MSIx data/address fields, QEMU will use this IRQ
> attribute
> > > >>> +to tell KVM to update the related IRTE according the VT-d
> > > Posted-Interrrupts
> > > >>> +Specification, such as, the guest vector should be updated in the
> related
> > > IRTE.
> > > >>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> > > >>> index a269a42..e5f86ad 100644
> > > >>> --- a/include/uapi/linux/kvm.h
> > > >>> +++ b/include/uapi/linux/kvm.h
> > > >>> @@ -949,6 +949,7 @@ struct kvm_device_attr {
> > > >>>  #define  KVM_DEV_VFIO_DEVICE 2
> > > >>>  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ1
> > > >>>  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ
>   2
> > > >>> +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ3
> > > >>>
> > > >>>  enum kvm_device_type {
> > > >>>   KVM_DEV_TYPE_FSL_MPIC_20= 1,
> > > >>> @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
> > > >>>   __u32 gsi; /* gsi, ie. virtual IRQ number */
> > > >>>  };
> > > >>>
> > > Hi Feng, Alex,
> > > I am currently reworking my code to use something closer to this struct.
> &

Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-12-01 Thread Alex Williamson
On Tue, 2014-12-02 at 02:08 +, Wu, Feng wrote:
> 
> > -Original Message-
> > From: Eric Auger [mailto:eric.au...@linaro.org]
> > Sent: Monday, December 01, 2014 6:10 PM
> > To: Alex Williamson
> > Cc: Wu, Feng; pbonz...@redhat.com; g...@kernel.org; kvm@vger.kernel.org
> > Subject: Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d
> > Posted-Interrupts
> > 
> > On 11/25/2014 05:10 PM, Alex Williamson wrote:
> > > On Tue, 2014-11-25 at 16:01 +0100, Eric Auger wrote:
> > >> On 11/25/2014 01:23 PM, Feng Wu wrote:
> > >>> This patch adds and documents a new attribute
> > >>> KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE
> > group.
> > >>> This new attribute is used for VT-d Posted-Interrupts.
> > >>>
> > >>> When guest OS changes the interrupt configuration for an
> > >>> assigned device, such as, MSI/MSIx data/address fields,
> > >>> QEMU will use this IRQ attribute to tell KVM to update the
> > >>> related IRTE according the VT-d Posted-Interrrupts Specification,
> > >>> such as, the guest vector should be updated in the related IRTE.
> > >>>
> > >>> Signed-off-by: Feng Wu 
> > >>> ---
> > >>>  Documentation/virtual/kvm/devices/vfio.txt |9 +
> > >>>  include/uapi/linux/kvm.h   |   10 ++
> > >>>  2 files changed, 19 insertions(+), 0 deletions(-)
> > >>>
> > >>> diff --git a/Documentation/virtual/kvm/devices/vfio.txt
> > b/Documentation/virtual/kvm/devices/vfio.txt
> > >>> index f7aff29..39dee86 100644
> > >>> --- a/Documentation/virtual/kvm/devices/vfio.txt
> > >>> +++ b/Documentation/virtual/kvm/devices/vfio.txt
> > >>> @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been
> > called to trigger the IRQ
> > >>>  or associate an eventfd to it. Unforwarding can only be called while 
> > >>> the
> > >>>  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this
> > condition is
> > >>>  not satisfied, the command returns an -EBUSY.
> > >>> +
> > >>> +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups
> > mechanism to post
> > >>> +   the IRQ to guests.
> > >>> +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr
> > struct.
> > >>> +
> > >>> +When guest OS changes the interrupt configuration for an assigned
> > device,
> > >>> +such as, MSI/MSIx data/address fields, QEMU will use this IRQ attribute
> > >>> +to tell KVM to update the related IRTE according the VT-d
> > Posted-Interrrupts
> > >>> +Specification, such as, the guest vector should be updated in the 
> > >>> related
> > IRTE.
> > >>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> > >>> index a269a42..e5f86ad 100644
> > >>> --- a/include/uapi/linux/kvm.h
> > >>> +++ b/include/uapi/linux/kvm.h
> > >>> @@ -949,6 +949,7 @@ struct kvm_device_attr {
> > >>>  #define  KVM_DEV_VFIO_DEVICE   2
> > >>>  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ  1
> > >>>  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ2
> > >>> +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ  3
> > >>>
> > >>>  enum kvm_device_type {
> > >>> KVM_DEV_TYPE_FSL_MPIC_20= 1,
> > >>> @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
> > >>> __u32 gsi; /* gsi, ie. virtual IRQ number */
> > >>>  };
> > >>>
> > Hi Feng, Alex,
> > I am currently reworking my code to use something closer to this struct.
> > Would you agree with following changes?
> > >>> +struct kvm_posted_intr {
> > kvm_posted_irq
> 
> Hi Alex,
> 
> Do you mean changing the structure name to "kvm_posted_irq"? I am okay
> If you think this name is also suitable for ARM forwarded irq. Or we can find
> a more common name, such as "struct kvm_accel_irq", what is your opinion, 
> Alex?

I'd think something like struct kvm_vfio_dev_irq describes it fairly
well.

> > >>> +   __u32   argsz;
> > >>> +   __u32   fd; /* file descriptor of the VFIO device */
> > >>> +   __u

RE: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-12-01 Thread Wu, Feng


> -Original Message-
> From: Eric Auger [mailto:eric.au...@linaro.org]
> Sent: Monday, December 01, 2014 6:10 PM
> To: Alex Williamson
> Cc: Wu, Feng; pbonz...@redhat.com; g...@kernel.org; kvm@vger.kernel.org
> Subject: Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d
> Posted-Interrupts
> 
> On 11/25/2014 05:10 PM, Alex Williamson wrote:
> > On Tue, 2014-11-25 at 16:01 +0100, Eric Auger wrote:
> >> On 11/25/2014 01:23 PM, Feng Wu wrote:
> >>> This patch adds and documents a new attribute
> >>> KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE
> group.
> >>> This new attribute is used for VT-d Posted-Interrupts.
> >>>
> >>> When guest OS changes the interrupt configuration for an
> >>> assigned device, such as, MSI/MSIx data/address fields,
> >>> QEMU will use this IRQ attribute to tell KVM to update the
> >>> related IRTE according the VT-d Posted-Interrrupts Specification,
> >>> such as, the guest vector should be updated in the related IRTE.
> >>>
> >>> Signed-off-by: Feng Wu 
> >>> ---
> >>>  Documentation/virtual/kvm/devices/vfio.txt |9 +
> >>>  include/uapi/linux/kvm.h   |   10 ++
> >>>  2 files changed, 19 insertions(+), 0 deletions(-)
> >>>
> >>> diff --git a/Documentation/virtual/kvm/devices/vfio.txt
> b/Documentation/virtual/kvm/devices/vfio.txt
> >>> index f7aff29..39dee86 100644
> >>> --- a/Documentation/virtual/kvm/devices/vfio.txt
> >>> +++ b/Documentation/virtual/kvm/devices/vfio.txt
> >>> @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been
> called to trigger the IRQ
> >>>  or associate an eventfd to it. Unforwarding can only be called while the
> >>>  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this
> condition is
> >>>  not satisfied, the command returns an -EBUSY.
> >>> +
> >>> +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups
> mechanism to post
> >>> +   the IRQ to guests.
> >>> +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr
> struct.
> >>> +
> >>> +When guest OS changes the interrupt configuration for an assigned
> device,
> >>> +such as, MSI/MSIx data/address fields, QEMU will use this IRQ attribute
> >>> +to tell KVM to update the related IRTE according the VT-d
> Posted-Interrrupts
> >>> +Specification, such as, the guest vector should be updated in the related
> IRTE.
> >>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> >>> index a269a42..e5f86ad 100644
> >>> --- a/include/uapi/linux/kvm.h
> >>> +++ b/include/uapi/linux/kvm.h
> >>> @@ -949,6 +949,7 @@ struct kvm_device_attr {
> >>>  #define  KVM_DEV_VFIO_DEVICE 2
> >>>  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ1
> >>>  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ  2
> >>> +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ3
> >>>
> >>>  enum kvm_device_type {
> >>>   KVM_DEV_TYPE_FSL_MPIC_20= 1,
> >>> @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
> >>>   __u32 gsi; /* gsi, ie. virtual IRQ number */
> >>>  };
> >>>
> Hi Feng, Alex,
> I am currently reworking my code to use something closer to this struct.
> Would you agree with following changes?
> >>> +struct kvm_posted_intr {
> kvm_posted_irq

Hi Alex,

Do you mean changing the structure name to "kvm_posted_irq"? I am okay
If you think this name is also suitable for ARM forwarded irq. Or we can find
a more common name, such as "struct kvm_accel_irq", what is your opinion, Alex?

> >>> + __u32   argsz;
> >>> + __u32   fd; /* file descriptor of the VFIO device */
> >>> + __u32   index;  /* VFIO device IRQ index */
> >>> + __u32   start;
> >>> + __u32   count;
> >>> + int virq[0];/* gsi, ie. virtual IRQ number */
> __u32 gsi[];

I think this change is okay to me. If Alex also agree, I will follow this in the
next post. 

Thanks,
Feng


> >>> +};
> >> Hi Feng,
> >>
> >> This struct could be used by arm code too. If Alex agrees I could use
> >> that one instead. We just need to find a common sensible name
> >
> > Yep, the interface might as well support batch setup.  The vfio code
> > uses -1 for teardown if we want to avoid FORWARD vs UNFORWARD we could
> > let the data in the structure define which operation to do.
> 
> In case we remove the unforward and use fd=1 to tear down, the virq=gsi
> must uniquely identify the struct. For ARM I think this is true, we
> cannot have several physical IRQ forwarded to the same GSI. I don't know
> about posted irqs or other archs.
> 
> Best Regards
> 
> Eric
>  Ideally the
> > code in virt/kvm/vfio.c would be almost entirely shared and just make
> > different arch_foo() callouts.  The PCI smarts in 2/2 here should
> > probably be moved out to that same arch_ code.  Thanks,
> >
> > Alex
> >



Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-12-01 Thread Eric Auger
On 11/25/2014 05:10 PM, Alex Williamson wrote:
> On Tue, 2014-11-25 at 16:01 +0100, Eric Auger wrote:
>> On 11/25/2014 01:23 PM, Feng Wu wrote:
>>> This patch adds and documents a new attribute
>>> KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE group.
>>> This new attribute is used for VT-d Posted-Interrupts.
>>>
>>> When guest OS changes the interrupt configuration for an
>>> assigned device, such as, MSI/MSIx data/address fields,
>>> QEMU will use this IRQ attribute to tell KVM to update the
>>> related IRTE according the VT-d Posted-Interrrupts Specification,
>>> such as, the guest vector should be updated in the related IRTE.
>>>
>>> Signed-off-by: Feng Wu 
>>> ---
>>>  Documentation/virtual/kvm/devices/vfio.txt |9 +
>>>  include/uapi/linux/kvm.h   |   10 ++
>>>  2 files changed, 19 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/Documentation/virtual/kvm/devices/vfio.txt 
>>> b/Documentation/virtual/kvm/devices/vfio.txt
>>> index f7aff29..39dee86 100644
>>> --- a/Documentation/virtual/kvm/devices/vfio.txt
>>> +++ b/Documentation/virtual/kvm/devices/vfio.txt
>>> @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been called to 
>>> trigger the IRQ
>>>  or associate an eventfd to it. Unforwarding can only be called while the
>>>  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this condition is
>>>  not satisfied, the command returns an -EBUSY.
>>> +
>>> +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups mechanism to post
>>> +   the IRQ to guests.
>>> +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr 
>>> struct.
>>> +
>>> +When guest OS changes the interrupt configuration for an assigned device,
>>> +such as, MSI/MSIx data/address fields, QEMU will use this IRQ attribute
>>> +to tell KVM to update the related IRTE according the VT-d 
>>> Posted-Interrrupts
>>> +Specification, such as, the guest vector should be updated in the related 
>>> IRTE.
>>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
>>> index a269a42..e5f86ad 100644
>>> --- a/include/uapi/linux/kvm.h
>>> +++ b/include/uapi/linux/kvm.h
>>> @@ -949,6 +949,7 @@ struct kvm_device_attr {
>>>  #define  KVM_DEV_VFIO_DEVICE   2
>>>  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ  1
>>>  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ2
>>> +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ  3
>>>  
>>>  enum kvm_device_type {
>>> KVM_DEV_TYPE_FSL_MPIC_20= 1,
>>> @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
>>> __u32 gsi; /* gsi, ie. virtual IRQ number */
>>>  };
>>>  
Hi Feng, Alex,
I am currently reworking my code to use something closer to this struct.
Would you agree with following changes?
>>> +struct kvm_posted_intr {
kvm_posted_irq
>>> +   __u32   argsz;
>>> +   __u32   fd; /* file descriptor of the VFIO device */
>>> +   __u32   index;  /* VFIO device IRQ index */
>>> +   __u32   start;
>>> +   __u32   count;
>>> +   int virq[0];/* gsi, ie. virtual IRQ number */
__u32 gsi[];

>>> +};
>> Hi Feng,
>>
>> This struct could be used by arm code too. If Alex agrees I could use
>> that one instead. We just need to find a common sensible name
> 
> Yep, the interface might as well support batch setup.  The vfio code
> uses -1 for teardown if we want to avoid FORWARD vs UNFORWARD we could
> let the data in the structure define which operation to do. 

In case we remove the unforward and use fd=1 to tear down, the virq=gsi
must uniquely identify the struct. For ARM I think this is true, we
cannot have several physical IRQ forwarded to the same GSI. I don't know
about posted irqs or other archs.

Best Regards

Eric
 Ideally the
> code in virt/kvm/vfio.c would be almost entirely shared and just make
> different arch_foo() callouts.  The PCI smarts in 2/2 here should
> probably be moved out to that same arch_ code.  Thanks,
> 
> Alex
> 

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-11-25 Thread Wu, Feng


> -Original Message-
> From: Alex Williamson [mailto:alex.william...@redhat.com]
> Sent: Wednesday, November 26, 2014 12:10 AM
> To: Eric Auger
> Cc: Wu, Feng; pbonz...@redhat.com; g...@kernel.org; kvm@vger.kernel.org
> Subject: Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d
> Posted-Interrupts
> 
> On Tue, 2014-11-25 at 16:01 +0100, Eric Auger wrote:
> > On 11/25/2014 01:23 PM, Feng Wu wrote:
> > > This patch adds and documents a new attribute
> > > KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE group.
> > > This new attribute is used for VT-d Posted-Interrupts.
> > >
> > > When guest OS changes the interrupt configuration for an
> > > assigned device, such as, MSI/MSIx data/address fields,
> > > QEMU will use this IRQ attribute to tell KVM to update the
> > > related IRTE according the VT-d Posted-Interrrupts Specification,
> > > such as, the guest vector should be updated in the related IRTE.
> > >
> > > Signed-off-by: Feng Wu 
> > > ---
> > >  Documentation/virtual/kvm/devices/vfio.txt |9 +
> > >  include/uapi/linux/kvm.h   |   10 ++
> > >  2 files changed, 19 insertions(+), 0 deletions(-)
> > >
> > > diff --git a/Documentation/virtual/kvm/devices/vfio.txt
> b/Documentation/virtual/kvm/devices/vfio.txt
> > > index f7aff29..39dee86 100644
> > > --- a/Documentation/virtual/kvm/devices/vfio.txt
> > > +++ b/Documentation/virtual/kvm/devices/vfio.txt
> > > @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been
> called to trigger the IRQ
> > >  or associate an eventfd to it. Unforwarding can only be called while the
> > >  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this condition
> is
> > >  not satisfied, the command returns an -EBUSY.
> > > +
> > > +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups
> mechanism to post
> > > +   the IRQ to guests.
> > > +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr
> struct.
> > > +
> > > +When guest OS changes the interrupt configuration for an assigned device,
> > > +such as, MSI/MSIx data/address fields, QEMU will use this IRQ attribute
> > > +to tell KVM to update the related IRTE according the VT-d
> Posted-Interrrupts
> > > +Specification, such as, the guest vector should be updated in the related
> IRTE.
> > > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> > > index a269a42..e5f86ad 100644
> > > --- a/include/uapi/linux/kvm.h
> > > +++ b/include/uapi/linux/kvm.h
> > > @@ -949,6 +949,7 @@ struct kvm_device_attr {
> > >  #define  KVM_DEV_VFIO_DEVICE 2
> > >  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ1
> > >  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ  2
> > > +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ3
> > >
> > >  enum kvm_device_type {
> > >   KVM_DEV_TYPE_FSL_MPIC_20= 1,
> > > @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
> > >   __u32 gsi; /* gsi, ie. virtual IRQ number */
> > >  };
> > >
> > > +struct kvm_posted_intr {
> > > + __u32   argsz;
> > > + __u32   fd; /* file descriptor of the VFIO device */
> > > + __u32   index;  /* VFIO device IRQ index */
> > > + __u32   start;
> > > + __u32   count;
> > > + int virq[0];/* gsi, ie. virtual IRQ number */
> > > +};
> > Hi Feng,
> >
> > This struct could be used by arm code too. If Alex agrees I could use
> > that one instead. We just need to find a common sensible name
> 
> Yep, the interface might as well support batch setup.  The vfio code
> uses -1 for teardown if we want to avoid FORWARD vs UNFORWARD we could
> let the data in the structure define which operation to do.  Ideally the
> code in virt/kvm/vfio.c would be almost entirely shared and just make
> different arch_foo() callouts.  The PCI smarts in 2/2 here should
> probably be moved out to that same arch_ code.  Thanks,
> 
> Alex

That would be great if we share the same data structure!

Thanks,
Feng

N�r��yb�X��ǧv�^�)޺{.n�+h����ܨ}���Ơz�&j:+v���zZ+��+zf���h���~i���z��w���?�&�)ߢf

Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-11-25 Thread Alex Williamson
On Tue, 2014-11-25 at 16:01 +0100, Eric Auger wrote:
> On 11/25/2014 01:23 PM, Feng Wu wrote:
> > This patch adds and documents a new attribute
> > KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE group.
> > This new attribute is used for VT-d Posted-Interrupts.
> > 
> > When guest OS changes the interrupt configuration for an
> > assigned device, such as, MSI/MSIx data/address fields,
> > QEMU will use this IRQ attribute to tell KVM to update the
> > related IRTE according the VT-d Posted-Interrrupts Specification,
> > such as, the guest vector should be updated in the related IRTE.
> > 
> > Signed-off-by: Feng Wu 
> > ---
> >  Documentation/virtual/kvm/devices/vfio.txt |9 +
> >  include/uapi/linux/kvm.h   |   10 ++
> >  2 files changed, 19 insertions(+), 0 deletions(-)
> > 
> > diff --git a/Documentation/virtual/kvm/devices/vfio.txt 
> > b/Documentation/virtual/kvm/devices/vfio.txt
> > index f7aff29..39dee86 100644
> > --- a/Documentation/virtual/kvm/devices/vfio.txt
> > +++ b/Documentation/virtual/kvm/devices/vfio.txt
> > @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been called to 
> > trigger the IRQ
> >  or associate an eventfd to it. Unforwarding can only be called while the
> >  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this condition is
> >  not satisfied, the command returns an -EBUSY.
> > +
> > +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups mechanism to post
> > +   the IRQ to guests.
> > +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr 
> > struct.
> > +
> > +When guest OS changes the interrupt configuration for an assigned device,
> > +such as, MSI/MSIx data/address fields, QEMU will use this IRQ attribute
> > +to tell KVM to update the related IRTE according the VT-d 
> > Posted-Interrrupts
> > +Specification, such as, the guest vector should be updated in the related 
> > IRTE.
> > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> > index a269a42..e5f86ad 100644
> > --- a/include/uapi/linux/kvm.h
> > +++ b/include/uapi/linux/kvm.h
> > @@ -949,6 +949,7 @@ struct kvm_device_attr {
> >  #define  KVM_DEV_VFIO_DEVICE   2
> >  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ  1
> >  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ2
> > +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ  3
> >  
> >  enum kvm_device_type {
> > KVM_DEV_TYPE_FSL_MPIC_20= 1,
> > @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
> > __u32 gsi; /* gsi, ie. virtual IRQ number */
> >  };
> >  
> > +struct kvm_posted_intr {
> > +   __u32   argsz;
> > +   __u32   fd; /* file descriptor of the VFIO device */
> > +   __u32   index;  /* VFIO device IRQ index */
> > +   __u32   start;
> > +   __u32   count;
> > +   int virq[0];/* gsi, ie. virtual IRQ number */
> > +};
> Hi Feng,
> 
> This struct could be used by arm code too. If Alex agrees I could use
> that one instead. We just need to find a common sensible name

Yep, the interface might as well support batch setup.  The vfio code
uses -1 for teardown if we want to avoid FORWARD vs UNFORWARD we could
let the data in the structure define which operation to do.  Ideally the
code in virt/kvm/vfio.c would be almost entirely shared and just make
different arch_foo() callouts.  The PCI smarts in 2/2 here should
probably be moved out to that same arch_ code.  Thanks,

Alex

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-11-25 Thread Eric Auger
On 11/25/2014 01:23 PM, Feng Wu wrote:
> This patch adds and documents a new attribute
> KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE group.
> This new attribute is used for VT-d Posted-Interrupts.
> 
> When guest OS changes the interrupt configuration for an
> assigned device, such as, MSI/MSIx data/address fields,
> QEMU will use this IRQ attribute to tell KVM to update the
> related IRTE according the VT-d Posted-Interrrupts Specification,
> such as, the guest vector should be updated in the related IRTE.
> 
> Signed-off-by: Feng Wu 
> ---
>  Documentation/virtual/kvm/devices/vfio.txt |9 +
>  include/uapi/linux/kvm.h   |   10 ++
>  2 files changed, 19 insertions(+), 0 deletions(-)
> 
> diff --git a/Documentation/virtual/kvm/devices/vfio.txt 
> b/Documentation/virtual/kvm/devices/vfio.txt
> index f7aff29..39dee86 100644
> --- a/Documentation/virtual/kvm/devices/vfio.txt
> +++ b/Documentation/virtual/kvm/devices/vfio.txt
> @@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been called to 
> trigger the IRQ
>  or associate an eventfd to it. Unforwarding can only be called while the
>  signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this condition is
>  not satisfied, the command returns an -EBUSY.
> +
> +  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups mechanism to post
> +   the IRQ to guests.
> +For this attribute, kvm_device_attr.addr points to a kvm_posted_intr struct.
> +
> +When guest OS changes the interrupt configuration for an assigned device,
> +such as, MSI/MSIx data/address fields, QEMU will use this IRQ attribute
> +to tell KVM to update the related IRTE according the VT-d Posted-Interrrupts
> +Specification, such as, the guest vector should be updated in the related 
> IRTE.
> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> index a269a42..e5f86ad 100644
> --- a/include/uapi/linux/kvm.h
> +++ b/include/uapi/linux/kvm.h
> @@ -949,6 +949,7 @@ struct kvm_device_attr {
>  #define  KVM_DEV_VFIO_DEVICE 2
>  #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ1
>  #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ  2
> +#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ3
>  
>  enum kvm_device_type {
>   KVM_DEV_TYPE_FSL_MPIC_20= 1,
> @@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
>   __u32 gsi; /* gsi, ie. virtual IRQ number */
>  };
>  
> +struct kvm_posted_intr {
> + __u32   argsz;
> + __u32   fd; /* file descriptor of the VFIO device */
> + __u32   index;  /* VFIO device IRQ index */
> + __u32   start;
> + __u32   count;
> + int virq[0];/* gsi, ie. virtual IRQ number */
> +};
Hi Feng,

This struct could be used by arm code too. If Alex agrees I could use
that one instead. We just need to find a common sensible name

Best Regards
Eric
> +
>  /*
>   * ioctls for VM fds
>   */
> 

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC PATCH v2 1/2] KVM: kvm-vfio: User API for VT-d Posted-Interrupts

2014-11-25 Thread Feng Wu
This patch adds and documents a new attribute
KVM_DEV_VFIO_DEVICE_POSTING_IRQ in KVM_DEV_VFIO_DEVICE group.
This new attribute is used for VT-d Posted-Interrupts.

When guest OS changes the interrupt configuration for an
assigned device, such as, MSI/MSIx data/address fields,
QEMU will use this IRQ attribute to tell KVM to update the
related IRTE according the VT-d Posted-Interrrupts Specification,
such as, the guest vector should be updated in the related IRTE.

Signed-off-by: Feng Wu 
---
 Documentation/virtual/kvm/devices/vfio.txt |9 +
 include/uapi/linux/kvm.h   |   10 ++
 2 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/Documentation/virtual/kvm/devices/vfio.txt 
b/Documentation/virtual/kvm/devices/vfio.txt
index f7aff29..39dee86 100644
--- a/Documentation/virtual/kvm/devices/vfio.txt
+++ b/Documentation/virtual/kvm/devices/vfio.txt
@@ -42,3 +42,12 @@ activated before VFIO_DEVICE_SET_IRQS has been called to 
trigger the IRQ
 or associate an eventfd to it. Unforwarding can only be called while the
 signaling has been disabled with VFIO_DEVICE_SET_IRQS. If this condition is
 not satisfied, the command returns an -EBUSY.
+
+  KVM_DEV_VFIO_DEVICE_POSTING_IRQ: Use posted interrtups mechanism to post
+   the IRQ to guests.
+For this attribute, kvm_device_attr.addr points to a kvm_posted_intr struct.
+
+When guest OS changes the interrupt configuration for an assigned device,
+such as, MSI/MSIx data/address fields, QEMU will use this IRQ attribute
+to tell KVM to update the related IRTE according the VT-d Posted-Interrrupts
+Specification, such as, the guest vector should be updated in the related IRTE.
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
index a269a42..e5f86ad 100644
--- a/include/uapi/linux/kvm.h
+++ b/include/uapi/linux/kvm.h
@@ -949,6 +949,7 @@ struct kvm_device_attr {
 #define  KVM_DEV_VFIO_DEVICE   2
 #define   KVM_DEV_VFIO_DEVICE_FORWARD_IRQ  1
 #define   KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ2
+#define   KVM_DEV_VFIO_DEVICE_POSTING_IRQ  3
 
 enum kvm_device_type {
KVM_DEV_TYPE_FSL_MPIC_20= 1,
@@ -973,6 +974,15 @@ struct kvm_arch_forwarded_irq {
__u32 gsi; /* gsi, ie. virtual IRQ number */
 };
 
+struct kvm_posted_intr {
+   __u32   argsz;
+   __u32   fd; /* file descriptor of the VFIO device */
+   __u32   index;  /* VFIO device IRQ index */
+   __u32   start;
+   __u32   count;
+   int virq[0];/* gsi, ie. virtual IRQ number */
+};
+
 /*
  * ioctls for VM fds
  */
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html