All of lore.kernel.org
 help / color / mirror / Atom feed
From: BALATON Zoltan <balaton@eik.bme.hu>
To: Alexey Kardashevskiy <aik@ozlabs.ru>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
	David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [PATCH qemu v20] spapr: Implement Open Firmware client interface
Date: Sat, 22 May 2021 18:46:58 +0200 (CEST)	[thread overview]
Message-ID: <50b35f3-a92c-ea97-7096-3c854f636ed@eik.bme.hu> (raw)
In-Reply-To: <77716be-4cf7-d222-d465-13685bf0783a@eik.bme.hu>

On Sat, 22 May 2021, BALATON Zoltan wrote:
> On Sat, 22 May 2021, BALATON Zoltan wrote:
>> On Sat, 22 May 2021, Alexey Kardashevskiy wrote:
>>> VOF itself does not prints anything in this patch.
>> 
>> However it seems to be needed for linux as the first thing it does seems to 
>> be getting /chosen/stdout and calls exit if it returns nothing. So I'll 
>> need this at least for linux. (I think MorphOS may also query it to print a 
>> banner or some messages but not sure it needs it, at least it does not 
>> abort right away if not found.)
>> 
>>>> but to see Linux output do I need a stdout in VOF or it will just open 
>>>> the serial with its own driver and use that?
>>>> So I'm not sure what's the stdout parts in the current vof patch does and 
>>>> if I need that for anything. I'll try to experiment with it some more but 
>>>> fixing the ld and Kconfig seems to be enough to get it work for me.
>>> 
>>> So for the client to print something, /chosen/stdout needs to have a valid 
>>> ihandle.
>>> The only way to get a valid ihandle is having a valid phandle which 
>>> vof_client_open() can open.
>>> A valid phandle is a phandle of any node in the device tree. On spapr we 
>>> pick some spapr-vty, open it and store in /chosen/stdout.
>>> 
>>> From this point output from the client can be seen via a tracepoint.
>
> I've got it now. Looking at the original firmware device tree dump:
>
> https://osdn.net/projects/qmiga/wiki/SubprojectPegasos2/attach/PegasosII_OFW-Dump.txt
>
> I see that /chosen/stdout points to "screen" which is an alias to 
> /bootconsole. Just adding an empty /bootconsole node in the device tree and 
> vof_client_open_store() that as /chosen/stdout works and I get output via 
> vof_write traces so this is enough for now to test Linux. Properly connecting 
> a serial backend can thus be postponed.

Using /failsafe instead of /bootconsole is even better because Linux then 
adds console=ttyS0 to the bootargs by default as it knows that's a serial 
port.

> So with this the Linux kernel does not abort on the first device tree access 
> but starts to decompress itself then the embedded initrd and crashes at 
> calling setprop:
>
> [...]
> vof_client_handle: setprop
>
> Thread 4 "qemu-system-ppc" received signal SIGSEGV, Segmentation fault.
> (gdb) bt
> #0  0x0000000000000000 in  ()
> #1  0x0000555555a5c2bf in vof_setprop
>    (vof=0x7ffff48e9420, vallen=4, valaddr=<optimized out>, pname=<optimized 
> out>, nodeph=8, fdt=0x7fff8aaff010, ms=0x5555564f8800)
>    at ../hw/ppc/vof.c:308
> #2  0x0000555555a5c2bf in vof_client_handle
>    (nrets=1, rets=0x7ffff48e93f0, nargs=4, args=0x7ffff48e93c0, 
> service=0x7ffff48e9460 "setprop",
>     vof=0x7ffff48e9420, fdt=0x7fff8aaff010, ms=0x5555564f8800) at 
> ../hw/ppc/vof.c:842
> #3  0x0000555555a5c2bf in vof_client_call
>    (ms=0x5555564f8800, vof=vof@entry=0x55555662a3d0, 
> fdt=fdt@entry=0x7fff8aaff010, args_real=args_real@entry=23580472)
>    at ../hw/ppc/vof.c:935
>
> loooks like it's trying to set /chosen/linux,initrd-start:
>
> (gdb) up
> #1  0x0000555555a5c2bf in vof_setprop (vof=0x7ffff48e9420, vallen=4, 
> valaddr=<optimized out>, pname=<optimized out>, nodeph=8,
>    fdt=0x7fff8aaff010, ms=0x5555564f8800) at ../hw/ppc/vof.c:308
> 308	        if (!vmc->setprop(ms, nodepath, propname, val, vallen)) {
> (gdb) p nodepath
> $1 = "/chosen\000\060/rPC,750CXE/", '\000' <repeats 234 times>
> (gdb) p propname
> $2 = 
> "linux,initrd-start\000linux,initrd-end\000linux,cmdline-timeout\000bootarg"
> (gdb) p val
> $3 = <optimized out>
>
> I think I need the callback for setprop in TYPE_VOF_MACHINE_IF. I can copy 
> spapr_vof_setprop() but some explanation on why that's needed might help. 
> Ciould I just do fdt_setprop in my callback as vof_setprop() would do without 
> a machine callback or is there some special handling needed for these 
> properties?

Just returning true from the setprop callback of the VofMachineIfClass for 
now to see what it would do and then it gets to all the way of calling 
quiesce. Unfortunately it then tries to call prom_printf on Pegasos2 as 
seen here:

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/powerpc/kernel/prom_init.c?h=v4.14.233#n3261

which does not work because I have to shut down vhyp at quiesce otherwise 
it trips an assert on writing sdr1 (and may also interfere with the 
guest's usage of syscalls). So I need a way to not generate an exception 
if the guest calls back into OF after quiesce. A hacky solution is to 
patch out the sc 1 or _prom_entry point to just return after quiesce but 
maybe a better way is needed such as a switch in vof.bin that it checks 
before doing a syscall. Other than this problem it seems to work for the 
most part so maybe making the _prom_entry check some global value that I 
can set from quiesce to stop it doing syscalls and just return would be 
the simplest way to avoid this crash in Linux and not need a special 
version of vof for pegasos2. (MorphOS does not seem to call OF after 
quiesce which seems safer to do anyway, don't know why Linux does that. 
It could just print that one line before quiesce and then it would work, 
unfortunately that's not what they did.)

Regards.
BALATON Zoltan


  reply	other threads:[~2021-05-22 16:49 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-20  9:05 [PATCH qemu v20] spapr: Implement Open Firmware client interface Alexey Kardashevskiy
2021-05-20 21:59 ` BALATON Zoltan
2021-05-21  0:25   ` Alexey Kardashevskiy
2021-05-21  9:05     ` BALATON Zoltan
2021-05-21 19:57       ` BALATON Zoltan
2021-05-22  6:39         ` Alexey Kardashevskiy
2021-05-22 13:08           ` BALATON Zoltan
2021-05-23  3:47             ` Alexey Kardashevskiy
2021-05-23 12:12               ` BALATON Zoltan
2021-05-22  6:22       ` Alexey Kardashevskiy
2021-05-22 13:01         ` BALATON Zoltan
2021-05-22 15:02           ` BALATON Zoltan
2021-05-22 16:46             ` BALATON Zoltan [this message]
2021-05-23  3:41               ` Alexey Kardashevskiy
2021-05-23 12:02                 ` BALATON Zoltan
2021-05-23  3:31             ` Alexey Kardashevskiy
2021-05-23 11:24               ` BALATON Zoltan
2021-05-24  4:26                 ` Alexey Kardashevskiy
2021-05-24  5:40                   ` David Gibson
2021-05-24 11:56                     ` BALATON Zoltan
2021-05-23  3:20           ` Alexey Kardashevskiy
2021-05-23 11:19             ` BALATON Zoltan
2021-05-23 17:09               ` BALATON Zoltan
2021-05-24  6:01                 ` David Gibson
2021-05-24 10:55                   ` BALATON Zoltan
2021-05-24 12:46                     ` Alexey Kardashevskiy
2021-05-24 22:34                       ` BALATON Zoltan
2021-05-25  5:24                       ` David Gibson
2021-05-25  5:23                     ` David Gibson
2021-05-25 10:08                       ` BALATON Zoltan
2021-05-27  5:34                         ` David Gibson
2021-05-27 12:42                           ` BALATON Zoltan
2021-06-02  7:57                             ` David Gibson
2021-06-02 12:29                               ` BALATON Zoltan
2021-06-04  6:29                                 ` David Gibson
2021-06-04 13:59                                   ` BALATON Zoltan
2021-06-07  3:30                                     ` David Gibson
2021-06-07 22:54                                       ` BALATON Zoltan
2021-06-09  5:51                                         ` Alexey Kardashevskiy
2021-06-09 10:19                                           ` BALATON Zoltan
2021-06-06 22:21                                   ` BALATON Zoltan
2021-06-07  3:37                                     ` David Gibson
2021-06-07 22:20                                       ` BALATON Zoltan
2021-05-24 12:42                   ` BALATON Zoltan
2021-05-25  5:29                     ` David Gibson
2021-05-25  9:55                       ` BALATON Zoltan
2021-05-27  5:31                         ` David Gibson
2021-05-24  5:23   ` David Gibson
2021-05-24  9:57     ` BALATON Zoltan
2021-05-24 10:50       ` David Gibson
2021-05-29 18:10 ` BALATON Zoltan
2021-05-30 17:33 ` BALATON Zoltan
2021-05-31 13:07   ` BALATON Zoltan
2021-06-01 12:02     ` Alexey Kardashevskiy
2021-06-01 14:12       ` BALATON Zoltan
2021-06-04  6:21         ` David Gibson
2021-06-04 13:27           ` BALATON Zoltan
2021-06-07  3:02             ` David Gibson
2021-06-04  6:19   ` David Gibson
2021-06-04 13:50     ` BALATON Zoltan
2021-06-04 14:34       ` BALATON Zoltan
2021-06-07  3:05       ` David Gibson
2021-06-09  6:13         ` Alexey Kardashevskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50b35f3-a92c-ea97-7096-3c854f636ed@eik.bme.hu \
    --to=balaton@eik.bme.hu \
    --cc=aik@ozlabs.ru \
    --cc=david@gibson.dropbear.id.au \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.