|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 01/13] xsplice: Design document (v5).
>>> On 05.02.16 at 22:47, <konrad.wilk@xxxxxxxxxx> wrote:
>> Also is using "long" here really a good idea? Shouldn't we rather use
>> fixed width or ELF types?
>
> We can. It would look like this:
>
> struct xsplice_patch_func {
> const unsigned char *name;
> Elf64_Xword new_addr;
> Elf64_Xword old_addr;
> Elf64_Word new_size;
> Elf64_Word old_size;
> uint8_t pad[32];
> };
>
> Much nicer.
Leaving only the question on whether then we should have two (for
now) variants - one for ELF32 (which at least ARM32 will want) and
another for ELF64.
>> > +* `old_size` and `new_size` contain the sizes of the respective functions
>> > in bytes.
>> > + The value **MUST** not be zero.
>>
>> For old_size I can see this, but can't new_size being zero "NOP out
>> the entire code sequence"?
>
> The patchset does not (yet) support that. Nor the short branch instructions.
> I am trying to keep the amount of 'features' to the minimum so that reviews
> can be easier.
Understood. However, the emphasized "**MUST**" pretty much
excludes the possibility for the future: One thing is the specification
that you present here, another the implementation, which may of
course initially lack certain functionality.
>> > +### XEN_SYSCTL_XSPLICE_LIST (2)
>> > +
>> > +Retrieve an array of abbreviated status and names of payloads that are
>> > loaded in the
>> > +hypervisor.
>> > +
>> > +The caller provides:
>> > +
>> > + * `version`. Initially (on first hypercall) *MUST* be zero.
>> > + * `idx` index iterator. On first call *MUST* be zero, subsequent calls
>> > varies.
>> > + * `nr` the max number of entries to populate.
>> > + * `pad` - *MUST* be zero.
>> > + * `status` virtual address of where to write `struct xen_xsplice_status`
>> > + structures. Caller *MUST* allocate up to `nr` of them.
>> > + * `id` - virtual address of where to write the unique id of the payload.
>> > + Caller *MUST* allocate up to `nr` of them. Each *MUST* be of
>> > + **XEN_XSPLICE_NAME_SIZE** size.
>> > + * `len` - virtual address of where to write the length of each unique id
>> > + of the payload. Caller *MUST* allocate up to `nr` of them. Each *MUST*
>> > be
>> > + of sizeof(uint32_t) (4 bytes).
>> > +
>> > +If the hypercall returns an positive number, it is the number (up to `nr`)
>> > +of the payloads returned, along with `nr` updated with the number of
>> > remaining
>> > +payloads, `version` updated (it may be the same across hypercalls. If it
>> > +varies the data is stale and further calls could fail). The `status`,
>> > +`id`, and `len`' are updated at their designed index value (`idx`) with
>> > +the returned value of data.
>> > +
>> > +If the hypercall returns E2BIG the `count` is too big and should be
>> > +lowered.
>>
>> s/count/nr/ ?
>>
>> > +This operation can be preempted by the hypercall returning XEN_EAGAIN.
>> > +Retry.
>>
>> Why is this necessary when preemption via the 'nr' field is already
>> possible?
>
> I should explain that the XEN_EAGAIN is the mechanism by which the
> hypervisor
> signals that it could only fulfill its 'nr' value.
But such a model seems to contradict "If the hypercall returns an
positive number, ..." above: Either you expect a positive number
to be returned in this case, or -XEN_EAGAIN.
>> > +The v2 design must also have a mechanism for:
>> > +
>> > + * An dependency mechanism for the payloads. To use that information to
>> > load:
>> > + - The appropiate payload. To verify that payload is built against the
>> > + hypervisor. This can be done via the `build-id`
>> > + or via providing an copy of the old code - so that the hypervisor
>> > can
>> > + verify it against the code in memory.
>>
>> I was missing this above - do you really intend to do patching without
>> at least one of those two safety measures?
>
> Ross wrote the patches and I will make them part of the patch series. But
> the
> problem is that there will be now over 30 patches - so to make it easier
> to review I was thinking to roll them out in 'waves'. I can most certainly
> include it in the next posting.
Trying to break up large series is much appreciated, but I think this
shouldn't lead to stuff going in being overly fragile.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |