All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: David Hildenbrand <david@redhat.com>
Cc: Stefan Hajnoczi <stefanha@redhat.com>,
	Alexander Graf <graf@amazon.com>,
	qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
	Eduardo Habkost <eduardo@habkost.net>,
	"Daniel P . Berrange" <berrange@redhat.com>,
	Eric Blake <eblake@redhat.com>,
	Philippe Mathieu-Daude <philmd@linaro.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Igor Mammedov <imammedo@redhat.com>,
	Ashish Kalra <ashish.kalra@amd.com>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Stefan Hajnoczi <stefanha@gmail.com>
Subject: Re: [PATCH v4] hostmem-file: add offset option
Date: Mon, 3 Apr 2023 11:49:28 -0400	[thread overview]
Message-ID: <ZCr1iNzATiThmpXS@x1n> (raw)
In-Reply-To: <f2e232df-51d4-9cac-557d-329523a69530@redhat.com>

On Mon, Apr 03, 2023 at 09:13:29AM +0200, David Hildenbrand wrote:
> On 01.04.23 19:47, Stefan Hajnoczi wrote:
> > On Sat, Apr 01, 2023 at 12:42:57PM +0000, Alexander Graf wrote:
> > > Add an option for hostmem-file to start the memory object at an offset
> > > into the target file. This is useful if multiple memory objects reside
> > > inside the same target file, such as a device node.
> > > 
> > > In particular, it's useful to map guest memory directly into /dev/mem
> > > for experimentation.
> > > 
> > > Signed-off-by: Alexander Graf <graf@amazon.com>
> > > Reviewed-by: Stefan Hajnoczi <stefanha@gmail.com>
> > > 
> > > ---
> > > 
> > > v1 -> v2:
> > > 
> > >    - add qom documentation
> > >    - propagate offset into truncate, size and alignment checks
> > > 
> > > v2 -> v3:
> > > 
> > >    - failed attempt at fixing typo
> > > 
> > > v2 -> v4:
> > > 
> > >    - fix typo
> > > ---
> > >   backends/hostmem-file.c | 40 +++++++++++++++++++++++++++++++++++++++-
> > >   include/exec/memory.h   |  2 ++
> > >   include/exec/ram_addr.h |  3 ++-
> > >   qapi/qom.json           |  5 +++++
> > >   qemu-options.hx         |  6 +++++-
> > >   softmmu/memory.c        |  3 ++-
> > >   softmmu/physmem.c       | 14 ++++++++++----
> > >   7 files changed, 65 insertions(+), 8 deletions(-)
> > 
> > Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> 
> The change itself looks good to me, but I do think some other QEMU code that
> ends up working on the RAMBlock is not prepared yet. Most probably, because
> we never ended up using fd with an offset as guest RAM.
> 
> We don't seem to be remembering that offset in the RAMBlock. First, I
> thought block->offset would be used for that, but that's just the offset in
> the ram_addr_t space. Maybe we need a new "block->fd_offset" to remember the
> offset (unless I am missing something).

I think you're right.

> 
> The real offset in the file would be required at least in two cases I can
> see (whenever we essentially end up calling mmap() on the fd again):
> 
> 1) qemu_ram_remap(): We'd have to add the file offset on top of the
> calculated offset.
> 
> 2) vhost-user: most probably whenever we set the mmap_offset. For example,
> in vhost_user_fill_set_mem_table_msg() we'd similarly have to add the
> file_offset on top of the calculated offset. vhost_user_get_mr_data() should
> most probably do that.

I had a patch to add that offset for the upcoming doublemap feature here:

https://lore.kernel.org/all/20230117220914.2062125-8-peterx@redhat.com/

But that was because doublemap wants to map the guest mem twice for other
purposes. I didn't yet notice that the code seem to be already broken if
without offset==0.

While, I _think_ we already have offset!=0 case for a ramblock, since:

        commit ed5d001916dd46ceed6d8850e453bcd7b5db2acb
        Author: Jagannathan Raman <jag.raman@oracle.com>
        Date:   Fri Jan 29 11:46:13 2021 -0500

        multi-process: setup memory manager for remote device

Where there's:

        memory_region_init_ram_from_fd(subregion, NULL,
                                       name, sysmem_info->sizes[region],
                                       RAM_SHARED, msg->fds[region],
                                       sysmem_info->offsets[region],
                                       errp);

Thanks,

-- 
Peter Xu



  reply	other threads:[~2023-04-03 15:50 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-01 12:42 [PATCH v4] hostmem-file: add offset option Alexander Graf
2023-04-01 17:47 ` Stefan Hajnoczi
2023-04-03  7:13   ` David Hildenbrand
2023-04-03 15:49     ` Peter Xu [this message]
2023-04-03 18:27       ` David Hildenbrand
2023-04-03 22:11     ` Alexander Graf
2023-04-04  8:29       ` David Hildenbrand

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=ZCr1iNzATiThmpXS@x1n \
    --to=peterx@redhat.com \
    --cc=armbru@redhat.com \
    --cc=ashish.kalra@amd.com \
    --cc=berrange@redhat.com \
    --cc=david@redhat.com \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=graf@amazon.com \
    --cc=imammedo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    --cc=stefanha@redhat.com \
    --cc=thomas.lendacky@amd.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.