From: Jan Beulich <jbeulich@suse.com>
To: Frediano Ziglio <freddy77@gmail.com>
Cc: "Frediano Ziglio" <frediano.ziglio@citrix.com>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"Roger Pau Monné" <roger.pau@citrix.com>,
"Teddy Astie" <teddy.astie@vates.tech>,
"Anthony PERARD" <anthony.perard@vates.tech>,
"Juergen Gross" <jgross@suse.com>,
"Daniel P . Smith" <dpsmith@apertussolutions.com>,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH v6 12/16] xen: implement new foreign copy hypercall
Date: Mon, 29 Jun 2026 08:59:17 +0200 [thread overview]
Message-ID: <46b70e9d-1ade-4ba6-ad5f-87d2c9652a7b@suse.com> (raw)
In-Reply-To: <CAHt6W4ckkQOKn9jvNpMG5meFeagY8uFZJsC6CEUsu9tfc17cHQ@mail.gmail.com>
On 26.06.2026 16:14, Frediano Ziglio wrote:
> On Wed, 24 Jun 2026 at 07:44, Jan Beulich <jbeulich@suse.com> wrote:
>> On 23.06.2026 23:18, Frediano Ziglio wrote:
>>> On Tue, 23 Jun 2026 at 14:21, Jan Beulich <jbeulich@suse.com> wrote:
>>>> On 23.06.2026 12:55, Frediano Ziglio wrote:
>>>>> On Mon, 22 Jun 2026 at 11:34, Jan Beulich <jbeulich@suse.com> wrote:
>>>>>> On 19.06.2026 15:04, Frediano Ziglio wrote:
>>>>>>> --- a/xen/common/memory.c
>>>>>>> +++ b/xen/common/memory.c
>>>>>>> @@ -1545,6 +1545,139 @@ static int acquire_resource(
>>>>>>> return rc;
>>>>>>> }
>>>>>>>
>>>>>>> +/*
>>>>>>> + * The "noinline" qualifier avoids the compiler to create a large function
>>>>>>> + * consuming quite a lot of stack.
>>>>>>> + */
>>>>>>> +static int noinline mem_foreigncopy(
>>>>>>> + XEN_GUEST_HANDLE_PARAM(xen_foreigncopy_t) arg)
>>>>>>> +{
>>>>>>> + struct domain *d, *const currd = current->domain;
>>>>>>> + xen_foreigncopy_t copy;
>>>>>>> + int rc, direction;
>>>>>>> +
>>>>>>> + if ( copy_from_guest(©, arg, 1) )
>>>>>>> + return -EFAULT;
>>>>>>> +
>>>>>>> + if ( copy.flags & ~XENMEM_foreigncopy_direction )
>>>>>>> + return -EINVAL;
>>>>>>> +
>>>>>>> + direction = copy.flags & XENMEM_foreigncopy_direction;
>>>>>>> +
>>>>>>> + rc = rcu_lock_remote_domain_by_id(copy.domid, &d);
>>>>>>
>>>>>> Iirc I did ask before why this isn't ..._by_any_id().
>>>>>
>>>>> I probably was confused by the question about MMUEXT and the 2 domains.
>>>>> There are different similar hypercalls (like the mentioned MMUEXT but
>>>>> also hypercalls to map foreign domain memory) that have this check
>>>>> (not the same domain). Any domain has, obviously, access to its own
>>>>> memory, so it should not have to use hypercall to access its own
>>>>> memory. If it does it looks like a mistake causing performance issues
>>>>> or an attempt to circumvent security; in either case you would like to
>>>>> avoid it.
>>>>
>>>> No. Self-grants are possible as well, for example, and for a good reason.
>>>> Allowing normally-remote operations on oneself helps with testing, for
>>>> example. It may also help avoid needing to special-case "self" in code
>>>> which needs to cover both cases.
>>>
>>> But this is not a grant, it's a copy.
>>
>> Sure, but the underlying principle is what matters. Plus you don't prevent
>> self-copy by using ..._by_id(), you only preclude the use of DOMID_SELF.
>
> Sure about this?
No, I'm sorry: I (repeatedly) managed to ignore the "remote" in the function
called. That said, my request stands: No arbitrary restrictions please. If
you can properly justify a restriction, that's a different thing.
>>>>>>> + XEN_GUEST_HANDLE(uint8) buffer;
>>>>>>> +};
>>>>>>
>>>>>> What was (again) left unaddressed is the question towards using GFNs on both
>>>>>> sides of the copy. This would eliminate the need for the flags field, taken
>>>>>> by a 2nd domid_t one then.
>>>>>>
>>>>>
>>>>> This was addressed in
>>>>> https://lists.xenproject.org/archives/html/xen-devel/2026-06/msg00567.html
>>>>
>>>> Well, yes, but not in a satisfactory way. Back channels tell me that you
>>>> actually got the same feedback already on internal review. Which makes it
>>>> all the more puzzling that you insist on doing it differently. Multiple
>>>> maintainers asking for the same thing may be an indication of something.
>>>
>>> Not needing to have backchannel feedback, I already wrote that a
>>> similar approach was tried and made the code more complicated.
>>
>> Even if indeed so: Yet at the same time more flexible.
>>
>>> Both maintainers didn't comment on my replies so I assume they were
>>> fine with it.
>>> And you are failing to provide positive feedback.
>>> I asked (that one internally) for examples of guest buffers provided
>>> as frame numbers but I got no answer (or better the answer was more
>>> "currently there are not").
>>> Also note that the location of xen_foreigncopy_t structure is also
>>> provided using a guest pointer.
>>> I remember there were some discussions about ABI changes (2/3 years
>>> ago) to address this and other issues but I cannot see much progress.
>>
>> And it's that (very slowly progressing effort) which made me ask. The
>> fewer virtual addresses we bake into new sub-ops, the better for that
>> effort. And no, that doesn't go as far as completely eliminating
>> handles (presently representing virtual addresses) - that needs to be
>> part of the new ABI.
>
> In other words, you want me to code something temporary that you
> already know that needs to be changed.
What do you mean by "temporary"? We will need to live with the present
ABI for the foreseeable future. The new ABI's requirements haven't even
been spelled out yet. Patches to allow use of physical addresses in
place of virtual ones were actually turned down on the grounds of there
not having been a write-down of all requirements.
>> To preempt the argument towards "fewer virtual addresses" not really
>> being true when changing from handle-to-uint8 to handle-to-pfn: The
>> former won't be able to express a buffer mapped contiguously in VA
>> space, but discontiguous in PA space. The latter will, simply be
>> avoiding buffer VAs in the first place (the array of frame numbers
>> can e.g. be placed in a dedicated hypercall argument area known to be
>> physically contiguous).
>
> If it's mapped continuously in VA and you pass the VA I don't
> understand the problem. From the way I see it's more the latter that's
> the problem.
I'm talking of the future, where VAs wouldn't be used anymore. The
buffer you use couldn't be described by a single PA, unless the caller
took specific measures up front.
Jan
next prev parent reply other threads:[~2026-06-29 6:59 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-19 13:04 [PATCH v6 00/16] xenguest optimisations Frediano Ziglio
2026-06-19 13:04 ` [PATCH v6 01/16] libs/guest: Reduce number of parts in write_split_record Frediano Ziglio
2026-06-30 16:35 ` Andrew Cooper
2026-07-08 9:07 ` Anthony PERARD
2026-06-19 13:04 ` [PATCH v6 02/16] libs/guest: Reduce number of I/O vectors in write_batch Frediano Ziglio
2026-06-30 16:40 ` Andrew Cooper
2026-07-02 12:31 ` Frediano Ziglio
2026-07-01 13:52 ` [PATCH v6 1.9/16] libs/guest: Allocate rec_pfns earlier in write_batch() Andrew Cooper
2026-07-08 9:08 ` Anthony PERARD
2026-07-01 13:57 ` [PATCH v6.1 02/16] libs/guest: Reduce number of iovecs " Andrew Cooper
2026-07-08 9:09 ` Anthony PERARD
2026-06-19 13:04 ` [PATCH v6 03/16] libs/guest: Reduce number of I/O vectors in write_batch Frediano Ziglio
2026-06-30 16:46 ` Andrew Cooper
2026-07-02 12:33 ` Frediano Ziglio
2026-07-08 9:34 ` Anthony PERARD
2026-06-19 13:04 ` [PATCH v6 04/16] libs/guest: Use a single write_exact in write_headers Frediano Ziglio
2026-06-30 16:47 ` Andrew Cooper
2026-07-08 9:35 ` Anthony PERARD
2026-06-19 13:04 ` [PATCH v6 05/16] libs/guest: allocate various migration arrays just once Frediano Ziglio
2026-07-01 11:34 ` Andrew Cooper
2026-06-19 13:04 ` [PATCH v6 06/16] libs/call: cache up to 4 pages in hypercall bounce buffers Frediano Ziglio
2026-07-07 13:51 ` Anthony PERARD
2026-07-07 14:05 ` Anthony PERARD
2026-07-07 14:47 ` Frediano Ziglio
2026-07-08 13:19 ` Anthony PERARD
2026-07-09 7:13 ` Frediano Ziglio
2026-06-19 13:04 ` [PATCH v6 07/16] libs/guest: avoids using 2 indexes Frediano Ziglio
2026-07-08 13:19 ` Anthony PERARD
2026-06-19 13:04 ` [PATCH v6 08/16] libs/guest: fill directly iov structure Frediano Ziglio
2026-07-01 11:47 ` Andrew Cooper
2026-06-19 13:04 ` [PATCH v6 09/16] libs/ctrl: Allows writev_exact to change iov array Frediano Ziglio
2026-06-30 17:08 ` Andrew Cooper
2026-06-19 13:04 ` [PATCH v6 10/16] libs/guest: add xg_foreignmemory_copy_{from,to} Frediano Ziglio
2026-07-08 13:32 ` Anthony PERARD
2026-07-09 10:07 ` Frediano Ziglio
2026-06-19 13:04 ` [PATCH v6 11/16] PoC: libs/guest: use foreign copy during migration Frediano Ziglio
2026-07-08 13:55 ` Anthony PERARD
2026-07-09 9:35 ` Frediano Ziglio
2026-06-19 13:04 ` [PATCH v6 12/16] xen: implement new foreign copy hypercall Frediano Ziglio
2026-06-22 10:34 ` Jan Beulich
2026-06-23 10:55 ` Frediano Ziglio
2026-06-23 13:21 ` Jan Beulich
2026-06-23 21:18 ` Frediano Ziglio
2026-06-24 6:44 ` Jan Beulich
2026-06-26 14:14 ` Frediano Ziglio
2026-06-29 6:59 ` Jan Beulich [this message]
2026-08-03 14:51 ` Frediano Ziglio
2026-06-22 10:44 ` Jan Beulich
2026-06-23 20:37 ` Daniel P. Smith
2026-06-19 13:04 ` [PATCH v6 13/16] privcmd: Add definition for new Linux privcmd to access new Xen hypercall Frediano Ziglio
2026-07-08 13:59 ` Anthony PERARD
2026-07-09 9:37 ` Frediano Ziglio
2026-06-19 13:04 ` [PATCH v6 14/16] libs/guest: use new hypercall if available Frediano Ziglio
2026-06-19 13:05 ` [PATCH v6 15/16] libs/guest: finalize PoC Frediano Ziglio
2026-07-08 14:12 ` Anthony PERARD
2026-07-09 9:39 ` Frediano Ziglio
2026-06-19 13:05 ` [PATCH Linux v6 16/16] xen/privcmd: Add new ABI to allow copying foreign memory Frediano Ziglio
2026-07-09 10:53 ` Juergen Gross
2026-08-03 14:05 ` Juergen Gross
2026-08-03 14:23 ` Frediano Ziglio
2026-08-03 14:52 ` Juergen Gross
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=46b70e9d-1ade-4ba6-ad5f-87d2c9652a7b@suse.com \
--to=jbeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=anthony.perard@vates.tech \
--cc=dpsmith@apertussolutions.com \
--cc=freddy77@gmail.com \
--cc=frediano.ziglio@citrix.com \
--cc=jgross@suse.com \
--cc=roger.pau@citrix.com \
--cc=teddy.astie@vates.tech \
--cc=xen-devel@lists.xenproject.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.