|
From: | Paolo Bonzini |
Subject: | [Qemu-devel] Re: [PATCH] qemu: work around for "posix-aio-compat" |
Date: | Wed, 21 Oct 2009 19:28:54 +0200 |
User-agent: | Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.4pre) Gecko/20091014 Fedora/3.0-2.8.b4.fc11 Lightning/1.0pre Thunderbird/3.0b4 |
I've uploaded them here: http://www.kernel.org/pub/linux/kernel/people/mst/ you can't see them in mirrors yet but will be able to soon when kernel.org mirroring system catches them.
There is no difference in optimizations except that here: for (i = 0; i < aiocb->aio_niov && count; ++i) {one of the two versions actually does "count && i < aiocb->aio_niov" due to hashing vagaries. This is irrelevant anyway. Same inlining, same loop optimization decisions, same everything else. So a GCC bug can be ruled out, IMHO.
The only difference, as someone already suspected, is the padding---the sigset is placed between the top of the frame and the other variables, which may hide an overrun. This is quite amazing for a function that has no arrays, but still is the only evidence.
I suggest trying to make the sigset_t static, since that generates exactly the same code as the "nohang" case, and exactly the same stack layout as the "hang" case. The next obvious step would be placing a watchpoint somewhere.
Cheers, Paolo
[Prev in Thread] | Current Thread | [Next in Thread] |