> -----Original Message----- > From: Jan Beulich [mailto:jbeul...@suse.com] > Sent: 2015年9月7日 22:46 > To: Liuqiming (John) > Cc: Hanweidong (Randy); Zhangwei (FF); yang.z.zh...@intel.com; xen- > de...@lists.xenproject.org > Subject: Re: [Xen-devel] [PATCH] Remove a set operation for > VCPU_KICK_SOFTIRQ when post interrupt to vm. > > >>> On 07.09.15 at 16:24, <john.liuqim...@huawei.com> wrote: > > I believe this also has something to do with a windows guest boot > hang > > issue. > > > > It randomly occured, when boot a guest has windows 2008 os and pv- > driver > > installed. > > The boot process hangs when wait xenstored replay event signal. > > > > It can be reproduced after hundreds reboot using the xen staging > branch. > > But after I changed this code the hang issue can not reproduce. > > The change below (which I don't think was ever posted to xen-devel) > does not make any sense, as it prohibits timely delivery of guest > interrupts. If there is an issue, I think you'd need to start with > clearly
This change won't prohibit timely delivery of guest interrupts, intead, it helps to deliver guest interrupt timely. Posted interrupt delivery doesn't kick cpu, so it should not set VCPU_KICK_SOFTIRQ bit, and doesn't care about if VCPU_KICK_SOFTIRQ is set or not. if VCPU_KICK_SOFTIRQ is set, next interrupt will not be delivered due to test_and_set_bit check. What's more, it also impacts vcpu_kick() to kick cpu (smp_send_event_check_cpu) when VCPU_KICK_SOFTIRQ is set. Weidong > describing the issue you see and what you think it is being caused by. > > Jan > > > On 2015/9/7 22:46, - wrote: > >> From: liuqiming 00178499 <john.liuqim...@huawei.com> > >> > >> This set operation doesn't make any sense, and it will block later > >> interrupt injected into vm (by vcpu_kick or deliver_posted_intr), > >> which will cause a performance issue on CPU supporting posted- > interrupt. > >> > >> Signed-off-by: Qiming Liu <john.liuqim...@huawei.com> > >> Cc: Yang Zhang <yang.z.zh...@intel.com> > >> --- > >> xen/arch/x86/hvm/vmx/vmx.c | 2 +- > >> 1 file changed, 1 insertion(+), 1 deletion(-) > >> > >> diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c > >> index 2582cdd..9480b44 100644 > >> --- a/xen/arch/x86/hvm/vmx/vmx.c > >> +++ b/xen/arch/x86/hvm/vmx/vmx.c > >> @@ -1681,7 +1681,7 @@ static void > __vmx_deliver_posted_interrupt(struct vcpu > > *v) > >> { > >> unsigned int cpu = v->processor; > >> > >> - if ( !test_and_set_bit(VCPU_KICK_SOFTIRQ, > &softirq_pending(cpu)) > >> + if ( !test_bit(VCPU_KICK_SOFTIRQ, &softirq_pending(cpu)) > >> && (cpu != smp_processor_id()) ) > >> send_IPI_mask(cpumask_of(cpu), posted_intr_vector); > >> } > > > > > > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xen.org > > http://lists.xen.org/xen-devel > > _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel