From: Andrew Cooper <andrew.cooper3@citrix.com>
To: "Zhang, Yang Z" <yang.z.zhang@intel.com>,
Jan Beulich <JBeulich@suse.com>
Cc: "Tian, Kevin" <kevin.tian@intel.com>,
"olaf@aepfle.de" <olaf@aepfle.de>,
"malcolm.crossley@citrix.com" <malcolm.crossley@citrix.com>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: [PATCH for 4.5 v2] vmx, apicv: fix save/restore issue with apicv
Date: Mon, 27 Oct 2014 10:47:28 +0000 [thread overview]
Message-ID: <544E22C0.8030704@citrix.com> (raw)
In-Reply-To: <A9667DDFB95DB7438FA9D7D576C3D87E0ABC38C0@SHSMSX104.ccr.corp.intel.com>
On 27/10/14 01:00, Zhang, Yang Z wrote:
> Jan Beulich wrote on 2014-10-24:
>>>>> On 24.10.14 at 04:00, <yang.z.zhang@intel.com> wrote:
>>> Jan Beulich wrote on 2014-10-21:
>>>>>>> On 21.10.14 at 07:32, <yang.z.zhang@intel.com> wrote:
>>>>> --- a/xen/arch/x86/hvm/vmx/vmx.c
>>>>> +++ b/xen/arch/x86/hvm/vmx/vmx.c
>>>>> @@ -1584,6 +1584,8 @@ static void vmx_process_isr(int isr, struct
>>>>> vcpu
>>>>> *v) {
>>>>> unsigned long status;
>>>>> u8 old;
>>>>> + unsigned int i, vector;
>>>> I don't really see the need for two variables here - just "i" would
>>>> seem to suffice.
>>>>
>>>>> + struct vlapic *vlapic = vcpu_vlapic(v);
>>>> const?
>>>>
>>>>> @@ -1597,6 +1599,28 @@ static void vmx_process_isr(int isr, struct
>>>>> vcpu
>>>> *v)
>>>>> status |= isr << VMX_GUEST_INTR_STATUS_SVI_OFFSET;
>>>>> __vmwrite(GUEST_INTR_STATUS, status);
>>>>> }
>>>>> + + /* + * Theoretically, only level triggered interrupts can
>>>>> have their + * corresponding bits set in the eoi exit bitmap.
>>>>> That is, the bits + * set in the eoi exit bitmap should also be
>>>>> set in TMR. But a periodic + * timer interrupt does not follow
>>>>> the rule: it is edge triggered, but + * requires its
>>>>> corresponding bit be set in the eoi exit bitmap. So we + * should
>>>>> not construct the eoi exit bitmap based on TMR. + * Here we will
>>>>> construct the eoi exit bitmap via (IRR | ISR). This + * means
>>>>> that EOIs to the interrupts that are set in the IRR + or ISR will +
>>>>> * cause VM exits after restoring, regardless of the trigger modes.
>>>>> It + * is acceptable because the subsequent interrupts will set +
>>>>> up the eoi + * bitmap correctly. + */ + for ( vector =
>>>>> 0x10; vector < NR_VECTORS; vector++ ) + if (
>>>>> vlapic_test_vector(vector, + &vlapic->regs->data[APIC_IRR]) || +
>>>>> vlapic_test_vector(vector, &vlapic->regs->data[APIC_ISR]) ) +
>>>>> set_bit(vector, v->arch.hvm_vmx.eoi_exit_bitmap); + +
>>>>> for ( i = 0; i < 4; i++ )
>>>> ARRAY_SIZE(v->arch.hvm_vmx.eoi_exit_bitmap) instead of 4 please,
>>>> like already done in construct_vmcs().
>>>>
>>>>> + __vmwrite(EOI_EXIT_BITMAP(i),
>>>>> + v->arch.hvm_vmx.eoi_exit_bitmap[i]);
>>>>> +
>>>>> vmx_vmcs_exit(v);
>>>>> }
>>>>> --- a/xen/include/asm-x86/hvm/vlapic.h
>>>>> +++ b/xen/include/asm-x86/hvm/vlapic.h
>>>>> @@ -61,6 +61,8 @@
>>>>>
>>>>> #define VEC_POS(v) ((v) % 32)
>>>>> #define REG_POS(v) (((v) / 32) * 0x10)
>>>>> +#define vlapic_test_vector(vec, bitmap) \ + test_bit(VEC_POS(vec),
>>>>> (uint32_t *)((bitmap) + REG_POS(vec)))
>>>> Don't cast away possible const-ness here.
>>>>
>>>> But of course if there are no other needs to change the patch I
>>>> could take care of all of these while committing.
>>> It appears no other comments. Should I send out the v3 or you will
>>> help to commit it with modifications?
>> As said above - I'm fine doing those minor adjustments, but I
>> certainly would like to wait for Citrix folks' confirmation. This has
>> been taking so long that I don't think waiting a few more days really matters.
> I want to catch the first RC release since we will perform a full testing with first RC. But it is ok now since the first RC already released.
With the changes Jan wants, Reviewed-by: Andrew Cooper
<andrew.cooper3@citrix.com>
We don't have much time for out-of-band testing at the moment, but I
will test it specifically as part of our 4.5-rc$N testing. The patch
does look functionally very similar to the previous version which we
positively confirmed as fixing our observed issues.
~Andrew
next prev parent reply other threads:[~2014-10-27 10:47 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-21 5:32 [PATCH for 4.5 v2] vmx, apicv: fix save/restore issue with apicv Yang Zhang
2014-10-21 9:05 ` Jan Beulich
2014-10-24 2:00 ` Zhang, Yang Z
2014-10-24 9:11 ` Jan Beulich
2014-10-27 1:00 ` Zhang, Yang Z
2014-10-27 10:47 ` Andrew Cooper [this message]
2014-10-21 10:36 ` Olaf Hering
2014-10-28 6:38 ` Tian, Kevin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=544E22C0.8030704@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=JBeulich@suse.com \
--cc=kevin.tian@intel.com \
--cc=malcolm.crossley@citrix.com \
--cc=olaf@aepfle.de \
--cc=xen-devel@lists.xen.org \
--cc=yang.z.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.