Jan Kiszka wrote:
> Philippe Gerum wrote:
>> Philippe Gerum wrote:
>>> Jan Kiszka wrote:
>>>> I love KVM - not only because I'm heavily hacking on it now, also
>>>> because it is so easy to trigger various kinds of guest issues with
>>>> it (SMP host + threaded virtual CPUs => true SMP guest - and if you
>>>> want to watch fancy things happen, just load one host core).
>>>>
>>>> Here is one I found that way:
>>>>
>>>> void fastcall __ipipe_sync_stage(unsigned long syncmask)
>>>> {
>>>> [ ... ]
>>>> while ((mask = (ipipe_this_cpudom_var(irqpend_himask) & syncmask)) !=
>>>> 0) {
>>>> level = __ipipe_ffnz(mask);
>>>>
>>>> while ((submask = ipipe_this_cpudom_var(irqpend_lomask)[level])
>>>> != 0) {
>>>> rank = __ipipe_ffnz(submask);
>>>> irq = (level << IPIPE_IRQ_ISHIFT) + rank;
>>>>
>>>> if (test_bit(IPIPE_LOCK_FLAG, &ipd->irqs[irq].control))
>>>> {
>>>> __clear_bit(rank,
>>>> &ipipe_this_cpudom_var(irqpend_lomask)[level]);
>>> - continue;
>>> + goto rpm_needs_more_neurons;
>>>> }
>>>>
>>>> __clear_bit(rank,
>>>> &ipipe_this_cpudom_var(irqpend_lomask)[level]);
>>>>
>>> + rpm_needs_more_neurons:
>>>> if (ipipe_this_cpudom_var(irqpend_lomask)[level] == 0)
>>>> __clear_bit(level,
>>>> &ipipe_this_cpudom_var(irqpend_himask));
>>>> [ ... ]
>>>>
>> Of course, I'm not saying this is the real fix, but that just points at a
>> possible issue. I do want those 100 points on my score card.
>
> Well, I wasn't asking for a fix, just for spotting the gremlin - so you
> won! :->
>
Ah! Great. So this is the ultimate proof that when it comes to software
development, one neuron is one too many!
> Then let us fix this for real:
>
Ok, will merge thanks.
> ---
> kernel/ipipe/core.c | 8 +++-----
> 1 file changed, 3 insertions(+), 5 deletions(-)
>
> Index: b/kernel/ipipe/core.c
> ===================================================================
> --- a/kernel/ipipe/core.c
> +++ b/kernel/ipipe/core.c
> @@ -957,16 +957,14 @@ void fastcall __ipipe_sync_stage(unsigne
> rank = __ipipe_ffnz(submask);
> irq = (level << IPIPE_IRQ_ISHIFT) + rank;
>
> - if (test_bit(IPIPE_LOCK_FLAG, &ipd->irqs[irq].control))
> {
> - __clear_bit(rank,
> &ipipe_this_cpudom_var(irqpend_lomask)[level]);
> - continue;
> - }
> -
> __clear_bit(rank,
> &ipipe_this_cpudom_var(irqpend_lomask)[level]);
>
> if (ipipe_this_cpudom_var(irqpend_lomask)[level] == 0)
> __clear_bit(level,
> &ipipe_this_cpudom_var(irqpend_himask));
>
> + if (test_bit(IPIPE_LOCK_FLAG, &ipd->irqs[irq].control))
> + continue;
> +
> __set_bit(IPIPE_STALL_FLAG,
> &ipipe_this_cpudom_var(status));
>
> if (ipd == ipipe_root_domain)
>
--
Philippe.
_______________________________________________
Adeos-main mailing list
[email protected]
https://mail.gna.org/listinfo/adeos-main