WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Xen

xen-devel

[Top] [All Lists]

Re: [Xen-devel] hvm_set_callback_irq_level() deadlock?

To: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] hvm_set_callback_irq_level() deadlock?
From: Akio Takebe <takebe_akio@xxxxxxxxxxxxxx>
Date: 2009年1月07日 19:22:29 +0900
Cc: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: 2009年1月07日 02:22:56 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <C58A2D6B.20CF5%keir.fraser@xxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <C58A2D6B.20CF5%keir.fraser@xxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.18 (X11/20081119)
Hi,
Keir Fraser wrote:
On 07/01/2009 09:41, "Akio Takebe" <takebe_akio@xxxxxxxxxxxxxx> wrote:
hvm_set_callback_irq_level() and so on call vioapic_irq_positive_edge()
before spin_unlock(&d->arch.hvm_domain.irq_lock).
I think it cause a deadlock.
If it is right, how should we fix them?
What do you think?
Doesn't vioapic_irq_positive_edge() clearly expect to be called with that
lock held?
I concern about that vioapic_deliver() calls vcpu_kick(). If vcpu0 has the lock 
and
vcpu1 cannot get lock and spin then vcpu0 sleep in another function,
it may cause deadlock because vioapic_irq_positive_edge() may call vcpu_kick().
For example, the following function is OK?
1087 static void time_calibration_rendezvous(void *_r)
1088 {
1089 struct cpu_calibration *c = &this_cpu(cpu_calibration);
1090 struct calibration_rendezvous *r = _r;
1091 unsigned int total_cpus = cpus_weight(r->cpu_calibration_map);
1092
1093 if ( smp_processor_id() == 0 )
1094 {
1095 while ( atomic_read(&r->nr_cpus) != (total_cpus - 1) )
1096 cpu_relax();
1097 r->master_stime = read_platform_stime();
1098 rdtscll(r->master_tsc_stamp);
1099 mb(); /* write r->master_* /then/ signal */
1100 atomic_inc(&r->nr_cpus);
1101 c->local_tsc_stamp = r->master_tsc_stamp;
1102 }
1103 else
1104 {
1105 atomic_inc(&r->nr_cpus);
1106 while ( atomic_read(&r->nr_cpus) != total_cpus )
1107 cpu_relax();
1108 mb(); /* receive signal /then/ read r->master_* */
1109 if ( boot_cpu_has(X86_FEATURE_CONSTANT_TSC) )
1110 wrmsrl(MSR_IA32_TSC, r->master_tsc_stamp);
1111 rdtscll(c->local_tsc_stamp);
1112 }
1113
1114 c->stime_local_stamp = get_s_time();
1115 c->stime_master_stamp = r->master_stime;
1116
1117 raise_softirq(TIME_CALIBRATE_SOFTIRQ);
1118 }
Best Regards,
Akio Takebe
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
Previous by Date: RE: [Xen-devel] TPR write optimization (even improves 2003 sp2) , James Harper
Next by Date: Re: [Xen-devel] TPR write optimization (even improves 2003 sp2) , Keir Fraser
Previous by Thread: Re: [Xen-devel] hvm_set_callback_irq_level() deadlock? , Keir Fraser
Next by Thread: Re: [Xen-devel] hvm_set_callback_irq_level() deadlock? , Keir Fraser
Indexes: [Date] [Thread] [Top] [All Lists]

Copyright ©, Citrix Systems Inc. All rights reserved. Legal and Privacy
Citrix This site is hosted by Citrix

AltStyle によって変換されたページ (->オリジナル) /