Patchwork [RFC] darwin: work around sigfd

login
register
mail settings
Submitter Alexander Graf
Date May 5, 2011, 9:36 a.m.
Message ID <1304588186-94087-1-git-send-email-agraf@suse.de>
Download mbox | patch
Permalink /patch/94213/
State New
Headers show

Comments

Alexander Graf - May 5, 2011, 9:36 a.m.
When running qemu-system on Darwin, the vcpu processes guest code, but
I don't get to see anything on the cocoa screen.

When running a guest with -nographic, time stands still for the guest:

[    0.000000] Detected 2659.508 MHz processor.
[    0.000756] Calibrating delay loop (skipped), value calculated using timer frequency.. 5319.01 BogoMIPS (lpj=2659508)
[    0.000999] pid_max: default: 32768 minimum: 301
[    0.000999] Security Framework initialized
[    0.000999] AppArmor: AppArmor initialized
[...]
[    0.000999] Kernel panic - not syncing: IO-APIC + timer doesn't work!  Boot with apic=debug and send a report.  Then try booting with the 'noapic' option.
[    0.000999]
[...]
[    0.000999]  [<ffffffff81b3ec92>] kernel_init+0x8f/0x206
[    0.000999]  [<ffffffff81003d74>] kernel_thread_helper+0x4/0x10

This patch makes qemu-system work again on Darwin, but is obviously
just a hack. I'd really like to see some more clever people find out
what exactly is going wrong to find a real solution!

Reported-by: Andreas Färber <andreas.faerber@web.de>
(no signed-off-by on purpose - it's an RFC!)
---
 cpus.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)
Paolo Bonzini - May 5, 2011, 12:56 p.m.
On 05/05/2011 11:36 AM, Alexander Graf wrote:
> When running qemu-system on Darwin, the vcpu processes guest code, but
> I don't get to see anything on the cocoa screen.

Out of curiosity, does it work with iothread?

Paolo
Alexander Graf - May 5, 2011, 1:15 p.m.
On 05.05.2011, at 14:56, Paolo Bonzini wrote:

> On 05/05/2011 11:36 AM, Alexander Graf wrote:
>> When running qemu-system on Darwin, the vcpu processes guest code, but
>> I don't get to see anything on the cocoa screen.
> 
> Out of curiosity, does it work with iothread?

Seems to work with -nographic, yes. With cocoa it doesn't seem as happy :o. It certainly gets a lot further than without.


Alex
Paolo Bonzini - May 5, 2011, 1:23 p.m.
On 05/05/2011 03:15 PM, Alexander Graf wrote:
>
> On 05.05.2011, at 14:56, Paolo Bonzini wrote:
>
>> On 05/05/2011 11:36 AM, Alexander Graf wrote:
>>> When running qemu-system on Darwin, the vcpu processes guest
>>> code, but I don't get to see anything on the cocoa screen.
>>
>> Out of curiosity, does it work with iothread?
>
> Seems to work with -nographic, yes. With cocoa it doesn't seem as
> happy :o. It certainly gets a lot further than without.

And SDL?

Paolo
Alexander Graf - May 5, 2011, 1:24 p.m.
On 05.05.2011, at 15:23, Paolo Bonzini wrote:

> On 05/05/2011 03:15 PM, Alexander Graf wrote:
>> 
>> On 05.05.2011, at 14:56, Paolo Bonzini wrote:
>> 
>>> On 05/05/2011 11:36 AM, Alexander Graf wrote:
>>>> When running qemu-system on Darwin, the vcpu processes guest
>>>> code, but I don't get to see anything on the cocoa screen.
>>> 
>>> Out of curiosity, does it work with iothread?
>> 
>> Seems to work with -nographic, yes. With cocoa it doesn't seem as
>> happy :o. It certainly gets a lot further than without.
> 
> And SDL?

SDL doesn't compile on Mac OS X :). Otherwise we wouldn't have the cocoa backend.


Alex
Andreas Färber - May 8, 2011, 9:15 a.m.
Am 05.05.2011 um 15:15 schrieb Alexander Graf:

> On 05.05.2011, at 14:56, Paolo Bonzini wrote:
>
>> On 05/05/2011 11:36 AM, Alexander Graf wrote:
>>> When running qemu-system on Darwin, the vcpu processes guest code,  
>>> but
>>> I don't get to see anything on the cocoa screen.
>>
>> Out of curiosity, does it work with iothread?
>
> Seems to work with -nographic, yes. With cocoa it doesn't seem as  
> happy :o. It certainly gets a lot further than without.

-nographic has issues with --enable-io-thread, too. It gets further  
than Cocoa though before it bails out.

Andreas
Andreas Färber - May 8, 2011, 10:10 a.m.
Alex,

Am 08.05.2011 um 11:15 schrieb Andreas Färber:

> Am 05.05.2011 um 15:15 schrieb Alexander Graf:
>
>> On 05.05.2011, at 14:56, Paolo Bonzini wrote:
>>
>>> On 05/05/2011 11:36 AM, Alexander Graf wrote:
>>>> When running qemu-system on Darwin, the vcpu processes guest  
>>>> code, but
>>>> I don't get to see anything on the cocoa screen.
>>>
>>> Out of curiosity, does it work with iothread?
>>
>> Seems to work with -nographic, yes. With cocoa it doesn't seem as  
>> happy :o. It certainly gets a lot further than without.
>
> -nographic has issues with --enable-io-thread, too. It gets further  
> than Cocoa though before it bails out.

Actually, I'm still seeing issues with your patch as well. Might be  
multiple independent issues that have cropped up?

In particular I'm observing that AIX on qemu-system-ppc - as reported  
by Kenneth - doesn't reach the point where it tells us the 32-bit CPU  
is incompatible. With your patch it is now possible to exit the QEMU  
process though.

Any ppc64 guests don't even seem to enter OpenBIOS at all, whether  
OpenBIOS/ppc or OpenBIOS/ppc64.

It seems there is a DSI exception when turning on the MMU in OpenBIOS  
(before any serial output occurs). Does that ring a bell with you,  
some pSeries change maybe?

Andreas
Alexander Graf - May 9, 2011, 2:04 p.m.
On 05/08/2011 12:10 PM, Andreas Färber wrote:
> Alex,
>
> Am 08.05.2011 um 11:15 schrieb Andreas Färber:
>
>> Am 05.05.2011 um 15:15 schrieb Alexander Graf:
>>
>>> On 05.05.2011, at 14:56, Paolo Bonzini wrote:
>>>
>>>> On 05/05/2011 11:36 AM, Alexander Graf wrote:
>>>>> When running qemu-system on Darwin, the vcpu processes guest code, 
>>>>> but
>>>>> I don't get to see anything on the cocoa screen.
>>>>
>>>> Out of curiosity, does it work with iothread?
>>>
>>> Seems to work with -nographic, yes. With cocoa it doesn't seem as 
>>> happy :o. It certainly gets a lot further than without.
>>
>> -nographic has issues with --enable-io-thread, too. It gets further 
>> than Cocoa though before it bails out.
>
> Actually, I'm still seeing issues with your patch as well. Might be 
> multiple independent issues that have cropped up?
>
> In particular I'm observing that AIX on qemu-system-ppc - as reported 
> by Kenneth - doesn't reach the point where it tells us the 32-bit CPU 
> is incompatible. With your patch it is now possible to exit the QEMU 
> process though.
>
> Any ppc64 guests don't even seem to enter OpenBIOS at all, whether 
> OpenBIOS/ppc or OpenBIOS/ppc64.
>
> It seems there is a DSI exception when turning on the MMU in OpenBIOS 
> (before any serial output occurs). Does that ring a bell with you, 
> some pSeries change maybe?

The pSeries changes did some cleanups to the MMU code, yes, but they 
looked pretty much sane to me. Are you running on a ppc64 host? Maybe 
there's some undefined corner case shifting happening :).


Alex
Andreas Färber - May 29, 2011, 4:50 p.m.
Am 08.05.2011 um 11:15 schrieb Andreas Färber:

> Am 05.05.2011 um 15:15 schrieb Alexander Graf:
>
>> On 05.05.2011, at 14:56, Paolo Bonzini wrote:
>>
>>> On 05/05/2011 11:36 AM, Alexander Graf wrote:
>>>> When running qemu-system on Darwin, the vcpu processes guest  
>>>> code, but
>>>> I don't get to see anything on the cocoa screen.
>>>
>>> Out of curiosity, does it work with iothread?
>>
>> Seems to work with -nographic, yes. With cocoa it doesn't seem as  
>> happy :o. It certainly gets a lot further than without.
>
> -nographic has issues with --enable-io-thread, too.

Ping?
Paolo Bonzini - May 30, 2011, 8:03 a.m.
On 05/29/2011 06:50 PM, Andreas Färber wrote:
> Am 08.05.2011 um 11:15 schrieb Andreas Färber:
>
>> Am 05.05.2011 um 15:15 schrieb Alexander Graf:
>>
>>> On 05.05.2011, at 14:56, Paolo Bonzini wrote:
>>>
>>>> On 05/05/2011 11:36 AM, Alexander Graf wrote:
>>>>> When running qemu-system on Darwin, the vcpu processes guest code, but
>>>>> I don't get to see anything on the cocoa screen.
>>>>
>>>> Out of curiosity, does it work with iothread?
>>>
>>> Seems to work with -nographic, yes. With cocoa it doesn't seem as
>>> happy :o. It certainly gets a lot further than without.
>>
>> -nographic has issues with --enable-io-thread, too.
>
> Ping?

The patch is obviously masking the real issue, I don't think Alex meant 
it to be applied.

I would really like to look at iothread under Mac OS X, but I just don't 
have the time right now.

Paolo
Andreas Färber - May 31, 2011, 9:44 p.m.
Am 30.05.2011 um 10:03 schrieb Paolo Bonzini:

> On 05/29/2011 06:50 PM, Andreas Färber wrote:
>> Am 08.05.2011 um 11:15 schrieb Andreas Färber:
>>
>>> Am 05.05.2011 um 15:15 schrieb Alexander Graf:
>>>
>>>> On 05.05.2011, at 14:56, Paolo Bonzini wrote:
>>>>
>>>>> On 05/05/2011 11:36 AM, Alexander Graf wrote:
>>>>>> When running qemu-system on Darwin, the vcpu processes guest  
>>>>>> code, but
>>>>>> I don't get to see anything on the cocoa screen.
>>>>>
>>>>> Out of curiosity, does it work with iothread?
>>>>
>>>> Seems to work with -nographic, yes. With cocoa it doesn't seem as
>>>> happy :o. It certainly gets a lot further than without.
>>>
>>> -nographic has issues with --enable-io-thread, too.
>>
>> Ping?
>
> The patch is obviously masking the real issue, I don't think Alex  
> meant it to be applied.

Neither did I...

> I would really like to look at iothread under Mac OS X, but I just  
> don't have the time right now.

but I would expect whomever introduced this feature/breakage to  
comment on what might be going wrong and what we/I might try. Like I  
said, it happens with and without iothread enabled.

The symptoms I'm seeing is that qemu-system-ppc[64] with -nographic - 
prom-env 'auto-boot?=false' hangs once the OpenBIOS prompt is  
displayed and keyboard input does not work, including Ctrl+a,x so that  
I have to kill the process the hard way. With Cocoa frontend, qemu  
with iothread gets to the Haiku desktop but is unusably sluggish  
(mouse movement and key presses take seconds to get processed) whereas  
without iothread it got stuck during boot splash already iirc.

Andreas

Patch

diff --git a/cpus.c b/cpus.c
index 1fc34b7..ef604bf 100644
--- a/cpus.c
+++ b/cpus.c
@@ -388,6 +388,15 @@  static int qemu_signal_init(void)
     int sigfd;
     sigset_t set;
 
+#ifdef CONFIG_DARWIN
+    /* Darwin breaks for me with sigfd. I don't know why, but it just sits
+       there hanging. The vcpu does process things, so that one's good, but
+       there is no output. Doing the same as win32 works for me. */
+    if (1) {
+        return 0;
+    }
+#endif
+
 #ifdef CONFIG_IOTHREAD
     /* SIGUSR2 used by posix-aio-compat.c */
     sigemptyset(&set);