On Wed, Oct 09, 2013 at 11:26:58PM +0200, Paolo Bonzini wrote: > Il 09/10/2013 21:41, Marcelo Tosatti ha scritto: > >> > How was that tested? For BUS_MCEERR_AO it can work, but BUS_MCEERR_AR > >> > calls force_sig_info which does this: > >> > > >> > ignored = action->sa.sa_handler == SIG_IGN; > >> > blocked = sigismember(&t->blocked, sig); > >> > if (blocked || ignored) { > >> > action->sa.sa_handler = SIG_DFL; > >> > if (blocked) { > >> > sigdelset(&t->blocked, sig); > >> > recalc_sigpending_and_wake(t); > >> > } > >> > > >> > if (action->sa.sa_handler == SIG_DFL) > >> > t->signal->flags &= ~SIGNAL_UNKILLABLE; > >> > > >> > and kills the process (because that's the default action of SIG_DFL). > > For vcpu context its not blocked? > > It causes KVM to exit back to userspace, but as soon as KVM exits it > should be blocked. Thus a SIGBUS with BUS_MCEERR_AR will never be > returned by sigtimedwait.
Its blocked but readable via signalfd. Its generated when vcpu touches memory, see 77db5cbd29b7cb0e0fb4fd14. Since its rarely used, reviewing the code is not a bad idea. For the test, see https://lists.nongnu.org/archive/html/qemu-devel/2011-01/msg01588.html.