All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Alex Bennée" <alex.bennee@linaro.org>
Cc: qemu-devel@nongnu.org, "Thomas Huth" <thuth@redhat.com>,
	"Warner Losh" <imp@bsdimp.com>, "Ryo ONODERA" <ryoon@netbsd.org>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Beraldo Leal" <bleal@redhat.com>,
	"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
	"Hanna Reitz" <hreitz@redhat.com>,
	qemu-block@nongnu.org,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Kyle Evans" <kevans@freebsd.org>,
	"Reinoud Zandijk" <reinoud@netbsd.org>,
	"Michael Tokarev" <mjt@tls.msk.ru>
Subject: Re: [PATCH 04/11] qemu-options: finesse the recommendations around -blockdev
Date: Mon, 03 Apr 2023 16:55:23 +0200	[thread overview]
Message-ID: <871ql19fs4.fsf@pond.sub.org> (raw)
In-Reply-To: <87mt3pm6tf.fsf@linaro.org> ("Alex Bennée"'s message of "Mon, 03 Apr 2023 14:16:36 +0100")

Alex Bennée <alex.bennee@linaro.org> writes:

> Markus Armbruster <armbru@redhat.com> writes:
>
>> Alex Bennée <alex.bennee@linaro.org> writes:
>>
>>> We are a bit premature in recommending -blockdev/-device as the best
>>> way to configure block devices, especially in the common case.
>>> Improve the language to hopefully make things clearer.
>>>
>>> Suggested-by: Michael Tokarev <mjt@tls.msk.ru>
>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>> ---
>>>  qemu-options.hx | 8 ++++++--
>>>  1 file changed, 6 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/qemu-options.hx b/qemu-options.hx
>>> index 59bdf67a2c..9a69ed838e 100644
>>> --- a/qemu-options.hx
>>> +++ b/qemu-options.hx
>>> @@ -1143,10 +1143,14 @@ have gone through several iterations as the feature set and complexity
>>>  of the block layer have grown. Many online guides to QEMU often
>>>  reference older and deprecated options, which can lead to confusion.
>>>  
>>> -The recommended modern way to describe disks is to use a combination of
>>> +The most explicit way to describe disks is to use a combination of
>>>  ``-device`` to specify the hardware device and ``-blockdev`` to
>>>  describe the backend. The device defines what the guest sees and the
>>> -backend describes how QEMU handles the data.
>>> +backend describes how QEMU handles the data. The ``-drive`` option
>>> +combines the device and backend into a single command line options
>>> +which is useful in the majority of cases.
>>
>> -drive may look simpler from afar, but it really is a hot mess.  Sadly,
>> we can't get rid of it until we find a replacement for configuring
>> onboard block devices.  We might be able to clean it up some if we
>> accept compatibility breaks.  A new convenience option would be less
>> confusing, I guess.
>
> This is only a partial revert of the original wording which others have
> pointed out was a little too prescriptive. I believe the case of
> snapshot was one where a pure device/blockdev command line is hard to
> use. 
>
>>>                                            Older options like ``-hda``
>>> +bake in a lot of assumptions from the days when QEMU was emulating a
>>> +legacy PC, they are not recommended for modern configurations.
>>>  
>>>  ERST
>>
>> These older options and the non-option argument are simple macros for
>> -drive:
>>
>>     IMG-FILE                    -drive index=0,file=IMG-FILE,media=disk
>>     -hda IMG-FILE               -drive index=0,file=IMG-FILE,media=disk
>>     -hdb IMG-FILE               -drive index=1,file=IMG-FILE,media=disk
>>     -hdc IMG-FILE               -drive index=2,file=IMG-FILE,media=disk
>>     -hdd IMG-FILE               -drive index=3,file=IMG-FILE,media=disk
>>     -cdrom IMG-FILE             -drive index=2,file=IMG-FILE,media=cdrom
>>     -fda IMG-FILE               -drive if=floppy,index=0,file=IMG-FILE
>>     -fdb IMG-FILE               -drive if=floppy,index=1,file=IMG-FILE
>>     -mtdblock IMG-FILE          -drive if=mtd,file=IMG-FILE
>>     -sd IMG-FILE                -drive if=sd,file=IMG-FILE
>>     -pflash IMG-FILE            -drive if=pflash,file=IMG-FILE
>>
>> What assumptions do you have in mind?
>
> I was under the impression things like -hda wouldn't work say on an Arm
> machine because you don't know what sort of interface you might be
> using and -hda implies IDE. Where is this macro substitution done?

qemu_init() calls drive_add() for all these options.

drive_add(TYPE, INDEX, FILE, OPTSTR) creates a QemuOpts in group
"drive".  It sets "if" to if_name[TYPE] unless TYPE is IF_DEFAULT,
"index" to INDEX unless it's negative, and "file" to FILE unless it's
null.  Then it parses OPTSTR on top.

For -hdX, the call looks like

                drive_add(IF_DEFAULT, popt->index - QEMU_OPTION_hda, optarg,
                          HD_OPTS);

We pass IF_DEFAULT, so "if" remains unset.  "index" is set to 0 for
-hda, 1, for -hdb and so forth.  "file" is set to the option argument.
Since HD_OPTS is "media=disk", we set "media" to "disk".

The QemuOpts in config group "drive" get passed to drive_new() via
drive_init_func().  Unset "if" defaults to the current machine's class's
block_default_type.

If a machine doesn't set this member explicitly, it remains zero, which
is IF_NONE.  Documented in blockdev.h:

    typedef enum {
        IF_DEFAULT = -1,            /* for use with drive_add() only */
        /*
         * IF_NONE must be zero, because we want MachineClass member
--->     * block_default_type to default-initialize to IF_NONE
         */
        IF_NONE = 0,
        IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
        IF_COUNT
    } BlockInterfaceType;

Questions?

>> I think you need at least Kevin's Acked-by for this.
>
> In the ideal world I could convince the block maintainers to write a new
> section to the manual that explains the theory behind the block
> subsystem and how things interact and are put together. Until then this
> is merely a sticking plaster to make the manual a little more
> authoritative than then numerous example command lines our users blindly
> copy from online blog posts.
>
> Of course we could* always ask our new AI overlords:
>
[...]

> * just because we could doesn't mean we should

Heh!



  reply	other threads:[~2023-04-03 14:56 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-30 10:11 [PATCH 00/11] more misc fixes for 8.0 (tests, gdbstub, meta, docs) Alex Bennée
2023-03-30 10:11 ` [PATCH 01/11] scripts/coverage: initial coverage comparison script Alex Bennée
2023-03-30 12:37   ` Thomas Huth
2023-03-30 10:11 ` [PATCH 02/11] gdbstub: Only build libgdb_user.fa / libgdb_softmmu.fa if necessary Alex Bennée
2023-03-30 10:11 ` [PATCH 03/11] MAINTAINERS: add a section for policy documents Alex Bennée
2023-03-30 11:24   ` Thomas Huth
2023-03-30 15:31   ` Markus Armbruster
2023-03-30 15:34   ` Warner Losh
2023-03-30 16:29   ` Kashyap Chamarthy
2023-04-03  7:56   ` Philippe Mathieu-Daudé
2023-03-30 10:11 ` [PATCH 04/11] qemu-options: finesse the recommendations around -blockdev Alex Bennée
2023-03-30 11:24   ` Thomas Huth
2023-04-01  8:00   ` Michael Tokarev
2023-04-03  6:22   ` Markus Armbruster
2023-04-03 13:16     ` Alex Bennée
2023-04-03 14:55       ` Markus Armbruster [this message]
2023-04-03 16:31         ` Thomas Huth
2023-04-03 18:17           ` Markus Armbruster
2023-03-30 10:11 ` [PATCH 05/11] metadata: add .git-blame-ignore-revs Alex Bennée
2023-03-30 11:25   ` Thomas Huth
2023-03-30 10:11 ` [PATCH 06/11] Use hexagon toolchain version 16.0.0 Alex Bennée
2023-03-30 10:11 ` [PATCH 07/11] tests/qemu-iotests: explicitly invoke 'check' via 'python' Alex Bennée
2023-03-30 11:27   ` Thomas Huth
2023-03-30 10:11 ` [PATCH 08/11] tests/vm: use the default system python for NetBSD Alex Bennée
2023-03-30 11:27   ` Thomas Huth
2023-03-30 10:11 ` [PATCH 09/11] tests/requirements.txt: bump up avocado-framework version to 101.0 Alex Bennée
2023-03-30 11:43   ` Thomas Huth
2023-03-30 12:12     ` Alex Bennée
2023-03-30 12:21       ` Thomas Huth
2023-03-31  7:50         ` Thomas Huth
2023-03-30 10:11 ` [PATCH 10/11] gitlab: fix typo Alex Bennée
2023-03-30 10:39   ` Philippe Mathieu-Daudé
2023-03-30 11:35   ` Thomas Huth
2023-03-30 10:11 ` [PATCH 11/11] tests/gitlab: use kaniko to build images Alex Bennée
2023-03-30 10:17   ` Daniel P. Berrangé
2023-03-30 10:49     ` Daniel P. Berrangé
2023-03-30 18:14       ` Alex Bennée
2023-03-30 12:35   ` Thomas Huth

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=871ql19fs4.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=bleal@redhat.com \
    --cc=hreitz@redhat.com \
    --cc=imp@bsdimp.com \
    --cc=kevans@freebsd.org \
    --cc=kwolf@redhat.com \
    --cc=mjt@tls.msk.ru \
    --cc=philmd@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=reinoud@netbsd.org \
    --cc=ryoon@netbsd.org \
    --cc=thuth@redhat.com \
    --cc=wainersm@redhat.com \
    /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.