diff mbox

x86: Skip check apic_id_limit for Xen

Message ID 1502842933-8323-1-git-send-email-tianyu.lan@intel.com
State New
Headers show

Commit Message

Lan Tianyu Aug. 16, 2017, 12:22 a.m. UTC
Xen vIOMMU device model will be in Xen hypervisor. Skip vIOMMU
check for Xen here when vcpu number is more than 255.

Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
---
 hw/i386/pc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Paolo Bonzini Aug. 16, 2017, 11:21 a.m. UTC | #1
On 16/08/2017 02:22, Lan Tianyu wrote:
> Xen vIOMMU device model will be in Xen hypervisor. Skip vIOMMU
> check for Xen here when vcpu number is more than 255.

I think you still need to do a check for vIOMMU being enabled.

Paolo

> Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
> ---
>  hw/i386/pc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 5943539..fc17885 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1260,7 +1260,7 @@ void pc_machine_done(Notifier *notifier, void *data)
>          fw_cfg_modify_i16(pcms->fw_cfg, FW_CFG_NB_CPUS, pcms->boot_cpus);
>      }
>  
> -    if (pcms->apic_id_limit > 255) {
> +    if (pcms->apic_id_limit > 255 && !xen_enabled()) {
>          IntelIOMMUState *iommu = INTEL_IOMMU_DEVICE(x86_iommu_get_default());
>  
>          if (!iommu || !iommu->x86_iommu.intr_supported ||
>
Lan Tianyu Aug. 17, 2017, 1:37 a.m. UTC | #2
On 2017年08月16日 19:21, Paolo Bonzini wrote:
> On 16/08/2017 02:22, Lan Tianyu wrote:
>> Xen vIOMMU device model will be in Xen hypervisor. Skip vIOMMU
>> check for Xen here when vcpu number is more than 255.
> 
> I think you still need to do a check for vIOMMU being enabled.

Yes, this will be done in the Xen tool stack and Qemu doesn't have such
knowledge. Operations of create, destroy Xen vIOMMU will be done in the
Xen tool stack.

> 
> Paolo
> 
>> Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
>> ---
>>  hw/i386/pc.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
>> index 5943539..fc17885 100644
>> --- a/hw/i386/pc.c
>> +++ b/hw/i386/pc.c
>> @@ -1260,7 +1260,7 @@ void pc_machine_done(Notifier *notifier, void *data)
>>          fw_cfg_modify_i16(pcms->fw_cfg, FW_CFG_NB_CPUS, pcms->boot_cpus);
>>      }
>>  
>> -    if (pcms->apic_id_limit > 255) {
>> +    if (pcms->apic_id_limit > 255 && !xen_enabled()) {
>>          IntelIOMMUState *iommu = INTEL_IOMMU_DEVICE(x86_iommu_get_default());
>>  
>>          if (!iommu || !iommu->x86_iommu.intr_supported ||
>>
>
Eduardo Habkost Aug. 18, 2017, 4:38 p.m. UTC | #3
On Thu, Aug 17, 2017 at 09:37:10AM +0800, Lan Tianyu wrote:
> On 2017年08月16日 19:21, Paolo Bonzini wrote:
> > On 16/08/2017 02:22, Lan Tianyu wrote:
> >> Xen vIOMMU device model will be in Xen hypervisor. Skip vIOMMU
> >> check for Xen here when vcpu number is more than 255.
> > 
> > I think you still need to do a check for vIOMMU being enabled.
> 
> Yes, this will be done in the Xen tool stack and Qemu doesn't have such
> knowledge. Operations of create, destroy Xen vIOMMU will be done in the
> Xen tool stack.

Shouldn't we make QEMU have knowledge of the vIOMMU device, then?
Won't QEMU need to know about it eventually?
Paolo Bonzini Aug. 18, 2017, 4:53 p.m. UTC | #4
On 18/08/2017 18:38, Eduardo Habkost wrote:
>>> I think you still need to do a check for vIOMMU being enabled.
>>
>> Yes, this will be done in the Xen tool stack and Qemu doesn't have such
>> knowledge. Operations of create, destroy Xen vIOMMU will be done in the
>> Xen tool stack.
>
> Shouldn't we make QEMU have knowledge of the vIOMMU device, then?
> Won't QEMU need to know about it eventually?

No, it actually makes sense since Xen hosts all system-wide interrupt
sources outside QEMU, unlike KVM which only hosts the (per-CPU) local APIC.

Paolo
Lan Tianyu Aug. 21, 2017, 2:22 a.m. UTC | #5
On 2017年08月19日 00:38, Eduardo Habkost wrote:
> On Thu, Aug 17, 2017 at 09:37:10AM +0800, Lan Tianyu wrote:
>> On 2017年08月16日 19:21, Paolo Bonzini wrote:
>>> On 16/08/2017 02:22, Lan Tianyu wrote:
>>>> Xen vIOMMU device model will be in Xen hypervisor. Skip vIOMMU
>>>> check for Xen here when vcpu number is more than 255.
>>>
>>> I think you still need to do a check for vIOMMU being enabled.
>>
>> Yes, this will be done in the Xen tool stack and Qemu doesn't have such
>> knowledge. Operations of create, destroy Xen vIOMMU will be done in the
>> Xen tool stack.
> 
> Shouldn't we make QEMU have knowledge of the vIOMMU device, then?
> Won't QEMU need to know about it eventually?
> 

Hi Eduardo:
     Thanks for your review.
     Xen has some guest modes which doesn't use Qemu and we tried to
make Xen vIOMMU framework compatible with all guest modes. So far, we
are adding interrupt remapping function for Xen vIOMMU and find qemu
doesn't need to know Xen vIOMMU. The check of vcpu number > 255 here
will be done in Xen side and so skip the check in Qemu to avoid blocking
Xen creating >255 vcpus.
     We may make Qemu have knowledge of the vIOMMU device if it's
necessary when adding new function.
Eduardo Habkost Oct. 26, 2017, 12:19 p.m. UTC | #6
On Mon, Aug 21, 2017 at 10:22:15AM +0800, Lan Tianyu wrote:
> On 2017年08月19日 00:38, Eduardo Habkost wrote:
> > On Thu, Aug 17, 2017 at 09:37:10AM +0800, Lan Tianyu wrote:
> >> On 2017年08月16日 19:21, Paolo Bonzini wrote:
> >>> On 16/08/2017 02:22, Lan Tianyu wrote:
> >>>> Xen vIOMMU device model will be in Xen hypervisor. Skip vIOMMU
> >>>> check for Xen here when vcpu number is more than 255.
> >>>
> >>> I think you still need to do a check for vIOMMU being enabled.
> >>
> >> Yes, this will be done in the Xen tool stack and Qemu doesn't have such
> >> knowledge. Operations of create, destroy Xen vIOMMU will be done in the
> >> Xen tool stack.
> > 
> > Shouldn't we make QEMU have knowledge of the vIOMMU device, then?
> > Won't QEMU need to know about it eventually?
> > 
> 
> Hi Eduardo:
>      Thanks for your review.
>      Xen has some guest modes which doesn't use Qemu and we tried to
> make Xen vIOMMU framework compatible with all guest modes. So far, we
> are adding interrupt remapping function for Xen vIOMMU and find qemu
> doesn't need to know Xen vIOMMU. The check of vcpu number > 255 here
> will be done in Xen side and so skip the check in Qemu to avoid blocking
> Xen creating >255 vcpus.
>      We may make Qemu have knowledge of the vIOMMU device if it's
> necessary when adding new function.

I was expecting it to go through the PC tree, but I will queue it
on x86-next instead.
Michael S. Tsirkin Oct. 26, 2017, 2:27 p.m. UTC | #7
On Thu, Oct 26, 2017 at 02:19:43PM +0200, Eduardo Habkost wrote:
> On Mon, Aug 21, 2017 at 10:22:15AM +0800, Lan Tianyu wrote:
> > On 2017年08月19日 00:38, Eduardo Habkost wrote:
> > > On Thu, Aug 17, 2017 at 09:37:10AM +0800, Lan Tianyu wrote:
> > >> On 2017年08月16日 19:21, Paolo Bonzini wrote:
> > >>> On 16/08/2017 02:22, Lan Tianyu wrote:
> > >>>> Xen vIOMMU device model will be in Xen hypervisor. Skip vIOMMU
> > >>>> check for Xen here when vcpu number is more than 255.
> > >>>
> > >>> I think you still need to do a check for vIOMMU being enabled.
> > >>
> > >> Yes, this will be done in the Xen tool stack and Qemu doesn't have such
> > >> knowledge. Operations of create, destroy Xen vIOMMU will be done in the
> > >> Xen tool stack.
> > > 
> > > Shouldn't we make QEMU have knowledge of the vIOMMU device, then?
> > > Won't QEMU need to know about it eventually?
> > > 
> > 
> > Hi Eduardo:
> >      Thanks for your review.
> >      Xen has some guest modes which doesn't use Qemu and we tried to
> > make Xen vIOMMU framework compatible with all guest modes. So far, we
> > are adding interrupt remapping function for Xen vIOMMU and find qemu
> > doesn't need to know Xen vIOMMU. The check of vcpu number > 255 here
> > will be done in Xen side and so skip the check in Qemu to avoid blocking
> > Xen creating >255 vcpus.
> >      We may make Qemu have knowledge of the vIOMMU device if it's
> > necessary when adding new function.
> 
> I was expecting it to go through the PC tree, but I will queue it
> on x86-next instead.

I was waiting for an ack from you or Paolo as you participated in the
discussion. But sure, go ahead

Acked-by: Michael S. Tsirkin <mst@redhat.com>



> -- 
> Eduardo
Lan Tianyu Oct. 27, 2017, 1:30 a.m. UTC | #8
On 2017年10月26日 22:27, Michael S. Tsirkin wrote:
> On Thu, Oct 26, 2017 at 02:19:43PM +0200, Eduardo Habkost wrote:
>> On Mon, Aug 21, 2017 at 10:22:15AM +0800, Lan Tianyu wrote:
>>> On 2017年08月19日 00:38, Eduardo Habkost wrote:
>>>> On Thu, Aug 17, 2017 at 09:37:10AM +0800, Lan Tianyu wrote:
>>>>> On 2017年08月16日 19:21, Paolo Bonzini wrote:
>>>>>> On 16/08/2017 02:22, Lan Tianyu wrote:
>>>>>>> Xen vIOMMU device model will be in Xen hypervisor. Skip vIOMMU
>>>>>>> check for Xen here when vcpu number is more than 255.
>>>>>>
>>>>>> I think you still need to do a check for vIOMMU being enabled.
>>>>>
>>>>> Yes, this will be done in the Xen tool stack and Qemu doesn't have such
>>>>> knowledge. Operations of create, destroy Xen vIOMMU will be done in the
>>>>> Xen tool stack.
>>>>
>>>> Shouldn't we make QEMU have knowledge of the vIOMMU device, then?
>>>> Won't QEMU need to know about it eventually?
>>>>
>>>
>>> Hi Eduardo:
>>>      Thanks for your review.
>>>      Xen has some guest modes which doesn't use Qemu and we tried to
>>> make Xen vIOMMU framework compatible with all guest modes. So far, we
>>> are adding interrupt remapping function for Xen vIOMMU and find qemu
>>> doesn't need to know Xen vIOMMU. The check of vcpu number > 255 here
>>> will be done in Xen side and so skip the check in Qemu to avoid blocking
>>> Xen creating >255 vcpus.
>>>      We may make Qemu have knowledge of the vIOMMU device if it's
>>> necessary when adding new function.
>>
>> I was expecting it to go through the PC tree, but I will queue it
>> on x86-next instead.
> 
> I was waiting for an ack from you or Paolo as you participated in the
> discussion. But sure, go ahead
> 
> Acked-by: Michael S. Tsirkin <mst@redhat.com>
> 

Great. Thanks.
diff mbox

Patch

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 5943539..fc17885 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1260,7 +1260,7 @@  void pc_machine_done(Notifier *notifier, void *data)
         fw_cfg_modify_i16(pcms->fw_cfg, FW_CFG_NB_CPUS, pcms->boot_cpus);
     }
 
-    if (pcms->apic_id_limit > 255) {
+    if (pcms->apic_id_limit > 255 && !xen_enabled()) {
         IntelIOMMUState *iommu = INTEL_IOMMU_DEVICE(x86_iommu_get_default());
 
         if (!iommu || !iommu->x86_iommu.intr_supported ||