[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json"
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json" |
Date: |
Fri, 20 Apr 2018 14:53:01 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) |
Laszlo Ersek <address@hidden> writes:
> On 04/19/18 09:56, Daniel P. Berrangé wrote:
>> On Thu, Apr 19, 2018 at 09:48:36AM +0200, Markus Armbruster wrote:
>>> Laszlo Ersek <address@hidden> writes:
>>>
>>>> On 04/18/18 10:47, Markus Armbruster wrote:
>>>>> Laszlo Ersek <address@hidden> writes:
>>>>
>>>>>> +##
>>>>>> +# @FirmwareArchitecture:
>>>>>> +#
>>>>>> +# Defines the target architectures (emulator binaries) that firmware may
>>>>>> +# execute on.
>>>>>> +#
>>>>>> +# @aarch64: The firmware can be executed by the qemu-system-aarch64
>>>>>> emulator.
>>>>>> +#
>>>>>> +# @arm: The firmware can be executed by the qemu-system-arm emulator.
>>>>>> +#
>>>>>> +# @i386: The firmware can be executed by the qemu-system-i386 emulator.
>>>>>> +#
>>>>>> +# @x86_64: The firmware can be executed by the qemu-system-x86_64
>>>>>> emulator.
>>>>>> +#
>>>>>> +# Since: 2.13
>>>>>> +##
>>>>>> +{ 'enum' : 'FirmwareArchitecture',
>>>>>> + 'data' : [ 'aarch64', 'arm', 'i386', 'x86_64' ] }
>>>>>
>>>>> Partial dupe of CpuInfoArch from misc.json. Neither covers all our
>>>>> target architectures. Should we have one that does in common.json
>>>>> instead?
>>>>
>>>> If we had one there, I'd use it here :)
>>>>
>>>> For collecting the arch identifiers, is it OK to run "./configure
>>>> --help", and look for the "*-softmmu" options under
>>>> "--target-list=LIST"? Because that's what I need here; the qemu-system-*
>>>> emulators.
>>>
>>> configure gets its list like this:
>>>
>>> default_target_list=""
>>>
>>> mak_wilds=""
>>>
>>> if [ "$softmmu" = "yes" ]; then
>>> mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
>>> fi
>>> if [ "$linux_user" = "yes" ]; then
>>> mak_wilds="${mak_wilds}
>>> $source_path/default-configs/*-linux-user.mak"
>>> fi
>>> if [ "$bsd_user" = "yes" ]; then
>>> mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
>>> fi
>>>
>>> for config in $mak_wilds; do
>>> default_target_list="${default_target_list} $(basename "$config"
>>> .mak)"
>>> done
>>>
>>> Since we use QMP only in system emulation, a QAPI enum limited to the
>>> system emulation targets makes sense.
>>>
>>> Replacing CpuInfoArch by such an enum will change the discriminator
>>> value from "other" to the real architecture, with the obvious
>>> compatibility concerns. But we've accepted similar changes twice
>>> already: commit 9d0306dfdfb and commit 25fa194b7b1, both v2.12.0-rc0.
>>>
>>> "other" was a bad idea. Hindsight 20/20.
>>>
>>> Getting rid of it in one go rather than piecemeal seems like the least
>>> bad way out. Too late for 2.12, though. Eric, what do you think?
>>
>> Given the context in which this "other" value is used, I think it is
>> reasonable to kill it and put a full arch list in there.
>>
>> No app is likely to be accessing the struct under "other" because it
>> is just an empty placeholder.
>
> Commit 9d0306dfdfb added "s390" and "CpuInfoS390", which I guess had the
> potential to confuse QMP clients that didn't expect "s390", but
> otherwise it didn't mess with preexistent enum values / structures.
>
> The same applies to commit 25fa194b7b1, just with "riscv" /
> "CpuInfoRISCV" substituted.
>
> Removing "other" might confuse QMP clients that expect it, except
> (according to Daniel) no such client exists, probably.
It's a done deal anyway; we're not going to hold 2.12 to avoid this QMP
compatibility break.
> However, replacing the current list of CpuInfoArch constants with the
> system emulation target list would be more intrusive than all three of
> the above. In particular there is no "x86" target; only i386 and x86_64
> targets exist. For the firmware schema, this distinction is important,
> but it would break QMP clients that expect "x86" (and such clients must
> certainly exist).
You're right. Another nice mess.
> The targets with softmmu are: aarch64, alpha, arm, cris, hppa, i386,
> lm32, m68k, microblaze, microblazeel, mips, mips64, mips64el, mipsel,
> moxie, nios2, or1k, ppc, ppc64, ppcemb, riscv32, riscv64, s390x, sh4,
> sh4eb, sparc, sparc64, tricore, unicore32, x86_64, xtensa, xtensaeb.
>
> That is, at least the following constants in CpuInfoArch have no
> corresponding (identical) mapping -- I'll state to the right of the
> arrow the emulation targets which I know or presume to be associated
> with the CpuInfoArch constant:
> - x86 -> i386, x86_64
> - sparc -> sparc, sparc64
> - ppc -> ppc, ppc64, ppcemb
> - mips -> mips, mips64, mips64el, mipsel
> - s390 -> s390x
> - riscv -> riscv32, riscv64
>
> The only constant that seems to have a 1:1 mapping is "tricore", but I
> could perfectly well be thinking even that just because I have no clue
> about "tricore".
>
> So, I don't think CpuInfoArch can be updated so that it both remains
> compatible with current QMP clients, and serves "firmware.json". In the
> firmware schema we don't just need CPU architecture, but actual emulator
> names (and board / machine types).
The completely orthodox fix for CpuInfo would be:
* Keep @arch unchanged. In particular, keep "other" for all targets
other than 'x86', 'sparc', 'ppc', 'mips', 'tricore'.
* Add a new member @target of new enum type Target, whose values match
configures idea of targets exactly.
* Make the new member the union tag.
It's too late for complete orthodoxy; we already changed @arch.
A common enum type Target makes sense anyway, I think.
Using it in CpuInfo as described above may make sense, too. Could be
left to a follow-up patch.
> I grepped 'qapi/*json' for the whole word "x86_64", and the only thing
> that remotely matches is the @TargetInfo structure, in which the @arch
> field is a string, coming with the example "x86_64". The example also
> names "i386" separately.
Well spotted.
TargetInfo member @arch is set to TARGET_NAME, which matches configure's
idea of the target. If we add enum Target, we should change @arch's
type from str to Target.
> So what might make sense is to introduce a separate enum in
> "qapi/misc.json" with all the softmmu targets I listed above, and change
> the type of @address@hidden to that enum.
I arrived at this conclusion, too.
> In parallel,
> qmp_query_target() would have to be updated to look up the enum value
> matching TARGET_NAME. (I do think we can ignore linux-user etc emulators
> for collecting the relevant arches here: @TargetInfo is only used in the
> "query-target" QMP command, and Markus said above that QMP is only used
> with system emulation.)
>
> Should I do this?
Yes, please.
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", (continued)
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Daniel P . Berrangé, 2018/04/19
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Laszlo Ersek, 2018/04/20
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Daniel P . Berrangé, 2018/04/20
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Gerd Hoffmann, 2018/04/20
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Daniel P . Berrangé, 2018/04/20
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Gerd Hoffmann, 2018/04/20
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Laszlo Ersek, 2018/04/20
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Laszlo Ersek, 2018/04/20
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", David Gibson, 2018/04/22
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Daniel P . Berrangé, 2018/04/23
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json",
Markus Armbruster <=
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Laszlo Ersek, 2018/04/20
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Markus Armbruster, 2018/04/20
- Re: [Qemu-devel] [libvirt] [qemu RFC v2] qapi: add "firmware.json", Laszlo Ersek, 2018/04/20
Re: [Qemu-devel] [qemu RFC v2] qapi: add "firmware.json", Paolo Bonzini, 2018/04/18
- Re: [Qemu-devel] [qemu RFC v2] qapi: add "firmware.json", Laszlo Ersek, 2018/04/18
- Re: [Qemu-devel] [qemu RFC v2] qapi: add "firmware.json", Daniel P . Berrangé, 2018/04/18
- Re: [Qemu-devel] [qemu RFC v2] qapi: add "firmware.json", Gerd Hoffmann, 2018/04/18
- Re: [Qemu-devel] [qemu RFC v2] qapi: add "firmware.json", Laszlo Ersek, 2018/04/18
- Re: [Qemu-devel] [qemu RFC v2] qapi: add "firmware.json", Eric Blake, 2018/04/18
- Re: [Qemu-devel] [qemu RFC v2] qapi: add "firmware.json", Laszlo Ersek, 2018/04/18