All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: "Kevin O'Connor" <kevin@koconnor.net>, "Marc Marí" <markmb@redhat.com>
Cc: qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@gmail.com>,
	"Richard W.M. Jones" <rjones@redhat.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface
Date: Thu, 23 Jul 2015 15:13:18 +0200	[thread overview]
Message-ID: <55B0E86E.2030209@redhat.com> (raw)
In-Reply-To: <20150722171804.GA2717@morn.localdomain>

On 07/22/15 19:18, Kevin O'Connor wrote:
> On Wed, Jul 22, 2015 at 10:31:12AM +0200, Marc Marí wrote:
>> On Wed, 22 Jul 2015 00:24:34 -0400
>> "Kevin O'Connor" <kevin@koconnor.net> wrote:
>>> On Tue, Jul 21, 2015 at 06:03:41PM +0200, Marc Marí wrote:
>>>> From: Gerd Hoffmann <kraxel@redhat.com>
>>>>
>>>> First draft of a fw_cfg dma interface.  Designed as add-on to the
>>>> extisting fw_cfg interface, i.e. there is no select register.  There
>>>> are four 32bit registers:  Target address (low and high bits),
>>>> transfer length, control register.
>>>
>>> If I read this interface correctly, a guest will have at least six
>>> faults to complete a typical fw_cfg dma transfer (select, target low,
>>> target high, transfer length, control register write, control register
>>> read).  I wonder if using a DMA transfer descriptor might be more
>>> efficient.
> [...]
>> That is probably faster and more flexible. I think it's a good step
>> forward. But, on the other side, is this a too big break of what is
>> actually implemented in MMIO?
>>
>> At the end we will have MMIO version, with a select and a data
>> register, and DMA version, with a 64 bit address register. How can we
>> differentiate between versions? Laszlo talks about the ID, but this is
>> already in one of the fields (so you need to know the protocol to get
>> the protocol). How could we do this transition more seamless?
> 
> Well, one way would be to place a 64bit MMIO (or IO) register at a
> magic address.  The firmware could then read the magic address and
> check it against a signature (eg, "QEMU CFG").  If the signature
> matches then it would know it could use the DMA version of the fw_cfg
> interface (by issuing writes, instead of reads, to the magic address).
> The firmware would then not have to use the older select/data fw_cfg
> interface at all.

So, with regard to this patchset, I guess I'm in the position of the
"hateful reviewer". I cannot give constructive ideas simply because I'm
not knowledgeable enough about "anything DMA" in QEMU. I can only
express my negative thoughs, whenever I have such. :)

In any case, I wouldn't recommend a signature check -- the fw-cfg
interface already has a signature mechanism (independently of DMA -- see
FW_CFG_SIGNATURE in docs/specs/fw_cfg.txt). Adding another signature
(for a sub-feature) feels unclean, especially since we have a feature
bitmap already, in one of the preexistent fw_cfg keys. (See FW_CFG_ID.)

So, the "slow" mechanism could be used to retrieve FW_CFG_ID. Then,
based on bit #1 (value 2), presence of he DMA interface could be deduced.

> Another possibility would be to place the new fw_cfg dma register
> address into a named fw_cfg "file" (eg, "fw_cfg_dma").  The firmware
> could then use the existing select/data fw_cfg interface to check if
> the new dma interface is available by scanning for that "fw_cfg_dma"
> file.  This has the advantage of not requiring a new "magic address",
> but has the disadvantage of a more complex probe.

I like this one so much that I'm worried I'm missing some details. :)

The more complex probe shouldn't be an issue. The DMA interface would
bring such huge savings (*) that the probe's cost would be "amortized".

(*) ... at least in the environment where I really care about this: on
Aarch64 KVM, libguestfs loads a kernel and an initrd through *extremely*
slow MMIO.

Shaving off a few milliseconds for x86 SeaBIOS, so that this stack can
"compete" with Docker (or whatever) for short-lived containers, is
perhaps a valid goal, but personally, meh. :) I intend to write client
code for this DMA interface only in AAVMF, and not in OVMF -- OVMF is
unavoidably too "busy" to be considered for containers, so the DMA
interface would just be a complication. But, for libguestfs on Aarch64
KVM, it is a game changer.

Thanks
Laszlo

  reply	other threads:[~2015-07-23 13:13 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-21 16:03 [Qemu-devel] [RFC 0/7] fw_cfg dma interface Marc Marí
2015-07-21 16:03 ` [Qemu-devel] [RFC 1/7] fw_cfg: document fw_cfg_modify_iXX() update functions Marc Marí
2015-07-21 19:28   ` Laszlo Ersek
2015-07-21 16:03 ` [Qemu-devel] [RFC 2/7] fw_cfg dma interface Marc Marí
2015-07-21 19:44   ` Laszlo Ersek
2015-07-22  8:19     ` Marc Marí
2015-07-22 10:01       ` Laszlo Ersek
2015-07-22 11:30     ` Andrew Jones
2015-07-22 11:40       ` Laszlo Ersek
2015-07-22  4:24   ` Kevin O'Connor
2015-07-22  8:31     ` Marc Marí
2015-07-22 17:18       ` Kevin O'Connor
2015-07-23 13:13         ` Laszlo Ersek [this message]
2015-07-23 13:35           ` Peter Maydell
2015-07-23 13:45             ` Laszlo Ersek
2015-07-23 13:48               ` Marc Marí
2015-07-23 14:14             ` Kevin O'Connor
2015-07-22  9:31     ` Stefan Hajnoczi
2015-07-21 16:03 ` [Qemu-devel] [RFC 3/7] fw_cfg dma: adapt to vmstate changes Marc Marí
2015-07-21 16:16   ` Stefan Hajnoczi
2015-07-21 16:03 ` [Qemu-devel] [RFC 4/7] enable fw_cfg dma for arm virt Marc Marí
2015-07-21 17:04   ` Peter Maydell
2015-07-21 19:48     ` Laszlo Ersek
2015-07-22  8:44     ` Marc Marí
2015-07-21 16:03 ` [Qemu-devel] [RFC 5/7] fw_cfg file sort Marc Marí
2015-07-21 16:18   ` Stefan Hajnoczi
2015-07-21 19:53     ` Laszlo Ersek
2015-07-22  8:46       ` Marc Marí
2015-07-21 16:03 ` [Qemu-devel] [RFC 6/7] Add offset register to fw_cfg DMA interface Marc Marí
2015-07-21 16:26   ` Stefan Hajnoczi
2015-07-21 20:06     ` Laszlo Ersek
2015-07-21 20:16       ` Kevin O'Connor
2015-07-21 20:36         ` Laszlo Ersek
2015-07-22  4:11           ` Kevin O'Connor
2015-07-22  9:03           ` Marc Marí
2015-07-21 16:34   ` Stefan Hajnoczi
2015-07-21 16:03 ` [Qemu-devel] [RFC 7/7] fw_cfg DMA for x86 Marc Marí
2015-07-21 17:14   ` Peter Maydell
2015-07-22  9:06     ` Marc Marí

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=55B0E86E.2030209@redhat.com \
    --to=lersek@redhat.com \
    --cc=kevin@koconnor.net \
    --cc=kraxel@redhat.com \
    --cc=markmb@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rjones@redhat.com \
    --cc=stefanha@gmail.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.