[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Assertion 'cpu < nr_cpu_ids' failed at .../src/new/xen-unstable/xen/include/xen/cpumask.h:97
>>> On 23.02.15 at 11:38, <andrew.cooper3@xxxxxxxxxx> wrote: > On 23/02/15 10:06, Jan Beulich wrote: >>>>> On 23.02.15 at 10:27, <linux@xxxxxxxxxxxxxx> wrote: >>> While shutting down all guests to go for a host reboot i encountered the >>> splat below. >>> This was running on Xen with: >>> xen_changeset: Fri Feb 20 16:21:10 2015 +0100 git:24b2b8d-dirty >> "-dirty" meaning what? >> >>> (XEN) [2015-02-23 09:16:26.292] Assertion 'cpu < nr_cpu_ids' failed at > .../src/new/xen-unstable/xen/include/xen/cpumask.h:97 >> Since with debug=y the callstack entries should be reliable, I can't >> see how this matches up with ... >> >>> (XEN) [2015-02-23 09:16:26.292] Xen call trace: >>> (XEN) [2015-02-23 09:16:26.292] [<ffff82d08012c018>] > cpu_raise_softirq+0xd7/0xeb >> ... this, since >> >> void cpu_raise_softirq(unsigned int cpu, unsigned int nr) >> { >> unsigned int this_cpu = smp_processor_id(); >> >> if ( test_and_set_bit(nr, &softirq_pending(cpu)) >> || (cpu == this_cpu) >> || arch_skip_send_event_check(cpu) ) >> return; >> >> if ( !per_cpu(batching, this_cpu) || in_irq() ) >> smp_send_event_check_cpu(cpu); >> else >> set_bit(nr, &per_cpu(batch_mask, this_cpu)); >> } >> >> doesn't indicate any use of cpumask functions. If, however, >> arch_skip_send_event_check()'s call to cpumask_test_cpu() >> didn't get inlined, that might be the cause. Albeit that would mean >> smp_processor_id() returned an out-of-range value... In any >> event we'll need to know what exactly above code location refers >> to inside the entire function. > > Are you sure your code is up to date? > > Current staging has Ah, I looked at master, not staging. > void cpu_raise_softirq(unsigned int cpu, unsigned int nr) > { > unsigned int this_cpu = smp_processor_id(); > > if ( test_and_set_bit(nr, &softirq_pending(cpu)) > || (cpu == this_cpu) > || arch_skip_send_event_check(cpu) ) > return; > > if ( !per_cpu(batching, this_cpu) || in_irq() ) > smp_send_event_check_cpu(cpu); > else > __cpumask_set_cpu(nr, &per_cpu(batch_mask, this_cpu)); > } > > > And furthermore, I think the final __cpumask_set_cpu(...) appears > wrong. The first parameter should be 'cpu' rather than 'nr'. I am not > surprised that the ASSERT() is firing. No, the conversion to __cpumask_set_cpu() was wrong here in the first place - this ought to be __set_bit(). Will submit a fix in a minute. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |