From: Don Slutz <dslutz@verizon.com>
To: David Vrabel <david.vrabel@citrix.com>, xen-devel@lists.xen.org
Cc: Daniel Kiper <daniel.kiper@oracle.com>,
kexec@lists.infradead.org, Jan Beulich <jbeulich@suse.com>
Subject: Re: [Xen-devel] [PATCH 6/9] libxc: add hypercall buffer arrays
Date: Thu, 7 Nov 2013 15:46:43 -0500 [thread overview]
Message-ID: <527BFC33.1060109@terremark.com> (raw)
In-Reply-To: <1383749386-11891-7-git-send-email-david.vrabel@citrix.com>
For what it is worth.
Reviewed-by: Don Slutz <dslutz@verizon.com>
-Don Slutz
On 11/06/13 09:49, David Vrabel wrote:
> From: David Vrabel <david.vrabel@citrix.com>
>
> Hypercall buffer arrays are used when a hypercall takes a variable
> length array of buffers.
>
> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
> Tested-by: Daniel Kiper <daniel.kiper@oracle.com>
> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
> ---
> tools/libxc/xc_hcall_buf.c | 73 ++++++++++++++++++++++++++++++++++++++++++++
> tools/libxc/xenctrl.h | 27 ++++++++++++++++
> 2 files changed, 100 insertions(+), 0 deletions(-)
>
> diff --git a/tools/libxc/xc_hcall_buf.c b/tools/libxc/xc_hcall_buf.c
> index c354677..e762a93 100644
> --- a/tools/libxc/xc_hcall_buf.c
> +++ b/tools/libxc/xc_hcall_buf.c
> @@ -228,6 +228,79 @@ void xc__hypercall_bounce_post(xc_interface *xch, xc_hypercall_buffer_t *b)
> xc__hypercall_buffer_free(xch, b);
> }
>
> +struct xc_hypercall_buffer_array {
> + unsigned max_bufs;
> + xc_hypercall_buffer_t *bufs;
> +};
> +
> +xc_hypercall_buffer_array_t *xc_hypercall_buffer_array_create(xc_interface *xch,
> + unsigned n)
> +{
> + xc_hypercall_buffer_array_t *array;
> + xc_hypercall_buffer_t *bufs = NULL;
> +
> + array = malloc(sizeof(*array));
> + if ( array == NULL )
> + goto error;
> +
> + bufs = calloc(n, sizeof(*bufs));
> + if ( bufs == NULL )
> + goto error;
> +
> + array->max_bufs = n;
> + array->bufs = bufs;
> +
> + return array;
> +
> +error:
> + free(bufs);
> + free(array);
> + return NULL;
> +}
> +
> +void *xc__hypercall_buffer_array_alloc(xc_interface *xch,
> + xc_hypercall_buffer_array_t *array,
> + unsigned index,
> + xc_hypercall_buffer_t *hbuf,
> + size_t size)
> +{
> + void *buf;
> +
> + if ( index >= array->max_bufs || array->bufs[index].hbuf )
> + abort();
> +
> + buf = xc__hypercall_buffer_alloc(xch, hbuf, size);
> + if ( buf )
> + array->bufs[index] = *hbuf;
> + return buf;
> +}
> +
> +void *xc__hypercall_buffer_array_get(xc_interface *xch,
> + xc_hypercall_buffer_array_t *array,
> + unsigned index,
> + xc_hypercall_buffer_t *hbuf)
> +{
> + if ( index >= array->max_bufs || array->bufs[index].hbuf == NULL )
> + abort();
> +
> + *hbuf = array->bufs[index];
> + return array->bufs[index].hbuf;
> +}
> +
> +void xc_hypercall_buffer_array_destroy(xc_interface *xc,
> + xc_hypercall_buffer_array_t *array)
> +{
> + unsigned i;
> +
> + if ( array == NULL )
> + return;
> +
> + for (i = 0; i < array->max_bufs; i++ )
> + xc__hypercall_buffer_free(xc, &array->bufs[i]);
> + free(array->bufs);
> + free(array);
> +}
> +
> /*
> * Local variables:
> * mode: C
> diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h
> index 8cf3f3b..a7e8c31 100644
> --- a/tools/libxc/xenctrl.h
> +++ b/tools/libxc/xenctrl.h
> @@ -321,6 +321,33 @@ void xc__hypercall_buffer_free_pages(xc_interface *xch, xc_hypercall_buffer_t *b
> #define xc_hypercall_buffer_free_pages(_xch, _name, _nr) xc__hypercall_buffer_free_pages(_xch, HYPERCALL_BUFFER(_name), _nr)
>
> /*
> + * Array of hypercall buffers.
> + *
> + * Create an array with xc_hypercall_buffer_array_create() and
> + * populate it by declaring one hypercall buffer in a loop and
> + * allocating the buffer with xc_hypercall_buffer_array_alloc().
> + *
> + * To access a previously allocated buffers, declare a new hypercall
> + * buffer and call xc_hypercall_buffer_array_get().
> + *
> + * Destroy the array with xc_hypercall_buffer_array_destroy() to free
> + * the array and all its alocated hypercall buffers.
> + */
> +struct xc_hypercall_buffer_array;
> +typedef struct xc_hypercall_buffer_array xc_hypercall_buffer_array_t;
> +
> +xc_hypercall_buffer_array_t *xc_hypercall_buffer_array_create(xc_interface *xch, unsigned n);
> +void *xc__hypercall_buffer_array_alloc(xc_interface *xch, xc_hypercall_buffer_array_t *array,
> + unsigned index, xc_hypercall_buffer_t *hbuf, size_t size);
> +#define xc_hypercall_buffer_array_alloc(_xch, _array, _index, _name, _size) \
> + xc__hypercall_buffer_array_alloc(_xch, _array, _index, HYPERCALL_BUFFER(_name), _size)
> +void *xc__hypercall_buffer_array_get(xc_interface *xch, xc_hypercall_buffer_array_t *array,
> + unsigned index, xc_hypercall_buffer_t *hbuf);
> +#define xc_hypercall_buffer_array_get(_xch, _array, _index, _name, _size) \
> + xc__hypercall_buffer_array_get(_xch, _array, _index, HYPERCALL_BUFFER(_name))
> +void xc_hypercall_buffer_array_destroy(xc_interface *xc, xc_hypercall_buffer_array_t *array);
> +
> +/*
> * CPUMAP handling
> */
> typedef uint8_t *xc_cpumap_t;
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2013-11-07 20:50 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-06 14:49 [PATCHv10 0/9] Xen: extend kexec hypercall for use with pv-ops kernels David Vrabel
2013-11-06 14:49 ` [PATCH 1/9] x86: give FIX_EFI_MPF its own fixmap entry David Vrabel
2013-11-06 18:49 ` Don Slutz
2013-11-06 18:49 ` [Xen-devel] " Don Slutz
2013-11-06 14:49 ` David Vrabel
2013-11-06 14:49 ` [PATCH 2/9] kexec: add public interface for improved load/unload sub-ops David Vrabel
2013-11-07 20:38 ` Don Slutz
2013-11-07 20:38 ` Don Slutz
2013-11-06 14:49 ` David Vrabel
2013-11-06 14:49 ` [PATCH 3/9] kexec: add infrastructure for handling kexec images David Vrabel
2013-11-06 14:49 ` David Vrabel
2013-11-07 20:40 ` Don Slutz
2013-11-07 20:40 ` [Xen-devel] " Don Slutz
2013-11-07 23:51 ` Don Slutz
2013-11-07 23:51 ` Don Slutz
2013-11-08 12:50 ` [PATCHv11 " David Vrabel
2013-11-11 14:37 ` Don Slutz
2013-11-15 14:35 ` Jan Beulich
2013-11-15 18:31 ` David Vrabel
2013-11-18 8:07 ` Jan Beulich
2013-11-18 11:04 ` David Vrabel
2013-11-18 11:34 ` Jan Beulich
2013-11-18 12:25 ` Daniel Kiper
2013-11-18 12:53 ` Jan Beulich
2013-11-18 13:24 ` Daniel Kiper
2013-11-18 13:43 ` Jan Beulich
2013-11-18 14:23 ` Daniel Kiper
2013-11-18 15:24 ` Jan Beulich
2013-11-18 21:50 ` Daniel Kiper
2013-11-19 12:40 ` Jan Beulich
2013-11-20 19:59 ` Daniel Kiper
2013-11-21 16:19 ` Jan Beulich
2013-11-18 11:43 ` Daniel Kiper
2013-11-06 14:49 ` [PATCH 4/9] kexec: extend hypercall with improved load/unload ops David Vrabel
2013-11-06 14:49 ` David Vrabel
2013-11-07 20:56 ` [Xen-devel] " Don Slutz
2013-11-07 20:56 ` Don Slutz
2013-11-06 14:49 ` [PATCH 5/9] xen: kexec crash image when dom0 crashes David Vrabel
2013-11-06 14:49 ` David Vrabel
2013-11-07 20:44 ` Don Slutz
2013-11-07 20:44 ` [Xen-devel] " Don Slutz
2013-11-06 14:49 ` [PATCH 6/9] libxc: add hypercall buffer arrays David Vrabel
2013-11-06 14:49 ` David Vrabel
2013-11-07 20:46 ` Don Slutz [this message]
2013-11-07 20:46 ` Don Slutz
2013-11-06 14:49 ` [PATCH 7/9] libxc: add API for kexec hypercall David Vrabel
2013-11-07 20:48 ` Don Slutz
2013-11-07 20:48 ` Don Slutz
2013-11-06 14:49 ` David Vrabel
2013-11-06 14:49 ` [PATCH 8/9] x86: check kexec relocation code fits in a page David Vrabel
2013-11-06 14:49 ` David Vrabel
2013-11-06 18:51 ` Don Slutz
2013-11-06 18:51 ` [Xen-devel] " Don Slutz
2013-11-06 14:49 ` [PATCH 9/9] MAINTAINERS: Add KEXEC maintainer David Vrabel
2013-11-06 14:49 ` David Vrabel
2013-11-06 18:50 ` Don Slutz
2013-11-06 18:50 ` Don Slutz
2013-11-07 21:16 ` [PATCHv10 0/9] Xen: extend kexec hypercall for use with pv-ops kernels Daniel Kiper
2013-11-07 21:16 ` Daniel Kiper
2013-11-07 21:25 ` Andrew Cooper
2013-11-07 21:25 ` [Xen-devel] " Andrew Cooper
2013-11-07 21:41 ` Daniel Kiper
2013-11-07 21:41 ` [Xen-devel] " Daniel Kiper
2013-11-07 21:57 ` Andrew Cooper
2013-11-07 21:57 ` Andrew Cooper
2013-11-08 13:20 ` [Xen-devel] " David Vrabel
2013-11-08 13:20 ` David Vrabel
2013-11-08 13:13 ` David Vrabel
2013-11-08 13:13 ` David Vrabel
2013-11-08 13:19 ` Jan Beulich
2013-11-08 13:19 ` Jan Beulich
2013-11-08 14:01 ` Andrew Cooper
2013-11-08 14:01 ` [Xen-devel] " Andrew Cooper
2013-11-08 14:22 ` Don Slutz
2013-11-08 14:22 ` Don Slutz
2013-11-08 14:36 ` Jan Beulich
2013-11-08 14:36 ` [Xen-devel] " Jan Beulich
2013-11-08 15:15 ` Daniel Kiper
2013-11-08 15:42 ` Konrad Rzeszutek Wilk
2013-11-08 16:28 ` Daniel Kiper
2013-11-08 16:28 ` [Xen-devel] " Daniel Kiper
2013-11-08 15:42 ` Konrad Rzeszutek Wilk
2013-11-08 15:48 ` Andrew Cooper
2013-11-08 15:48 ` [Xen-devel] " Andrew Cooper
2013-11-08 15:15 ` Daniel Kiper
2013-11-08 13:48 ` Daniel Kiper
2013-11-08 14:01 ` [Xen-devel] " Andrew Cooper
2013-11-08 14:01 ` Andrew Cooper
2013-11-08 13:48 ` Daniel Kiper
2013-11-08 15:04 ` Daniel Kiper
2013-11-08 15:04 ` Daniel Kiper
2013-11-09 19:18 ` Daniel Kiper
2013-11-11 14:34 ` Don Slutz
2013-11-11 14:34 ` Don Slutz
2013-11-11 15:09 ` David Vrabel
2013-11-11 15:09 ` David Vrabel
2013-11-09 19:18 ` Daniel Kiper
2013-11-11 17:18 ` Keir Fraser
2013-11-11 17:18 ` [Xen-devel] " Keir Fraser
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=527BFC33.1060109@terremark.com \
--to=dslutz@verizon.com \
--cc=daniel.kiper@oracle.com \
--cc=david.vrabel@citrix.com \
--cc=jbeulich@suse.com \
--cc=kexec@lists.infradead.org \
--cc=xen-devel@lists.xen.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.