All of lore.kernel.org
 help / color / mirror / Atom feed
From: George Dunlap <george.dunlap@eu.citrix.com>
To: Dario Faggioli <raistlin@linux.it>
Cc: Andre Przywara <andre.przywara@amd.com>,
	Ian Campbell <Ian.Campbell@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>,
	Juergen Gross <juergen.gross@ts.fujitsu.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: [PATCH 02 of 11] libxl: abstract libxl_cpumap to just libxl_map
Date: Thu, 31 May 2012 15:54:56 +0100	[thread overview]
Message-ID: <4FC78640.3050408@eu.citrix.com> (raw)
In-Reply-To: <82ac47424d0a8888d702.1338466267@Solace>

On 31/05/12 13:11, Dario Faggioli wrote:
> More specifically:
>   1. introduces struct libxl_map;
>   2. re-implement libxl_cpumap_* on top of struct libxl_map_*;
>
> No functional nor interface changes at all.
>
> This is in preparation of the introduction of NUMA nodes maps.
>
> Signed-off-by: Dario Faggioli<dario.faggioli@citrix.eu.com>
Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
>
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -282,11 +282,17 @@ typedef uint32_t libxl_hwcap[8];
>
>   typedef uint64_t libxl_ev_user;
>
> -typedef struct {
> +struct libxl_map {
>       uint32_t size;          /* number of bytes in map */
>       uint8_t *map;
> -} libxl_cpumap;
> -void libxl_cpumap_dispose(libxl_cpumap *map);
> +};
> +void libxl_map_dispose(struct libxl_map *map);
> +
> +typedef struct libxl_map libxl_cpumap;
> +static inline void libxl_cpumap_dispose(libxl_cpumap *cpumap)
> +{
> +    return libxl_map_dispose(cpumap);
> +}
>
>   typedef struct {
>       /*
> diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
> --- a/tools/libxl/libxl_utils.c
> +++ b/tools/libxl/libxl_utils.c
> @@ -488,47 +488,53 @@ int libxl_mac_to_device_nic(libxl_ctx *c
>       return rc;
>   }
>
> +void libxl_map_dispose(struct libxl_map *map)
> +{
> +    free(map->map);
> +}
> +
> +static int libxl_map_alloc(libxl_ctx *ctx, struct libxl_map *map, int n_elems)
> +{
> +    int sz;
> +
> +    sz = (n_elems + 7) / 8;
> +    map->map = calloc(sz, sizeof(*map->map));
> +    if (!map->map)
> +        return ERROR_NOMEM;
> +    map->size = sz;
> +    return 0;
> +}
> +
> +int libxl_map_test(struct libxl_map *map, int elem)
> +{
> +    if (elem>= map->size * 8)
> +        return 0;
> +    return (map->map[elem / 8]&  (1<<  (elem&  7))) ? 1 : 0;
> +}
> +
> +void libxl_map_set(struct libxl_map *map, int elem)
> +{
> +    if (elem>= map->size * 8)
> +        return;
> +    map->map[elem / 8] |= 1<<  (elem&  7);
> +}
> +
> +void libxl_map_reset(struct libxl_map *map, int elem)
> +{
> +    if (elem>= map->size * 8)
> +        return;
> +    map->map[elem / 8]&= ~(1<<  (elem&  7));
> +}
> +
>   int libxl_cpumap_alloc(libxl_ctx *ctx, libxl_cpumap *cpumap)
>   {
>       int max_cpus;
> -    int sz;
>
>       max_cpus = libxl_get_max_cpus(ctx);
>       if (max_cpus == 0)
>           return ERROR_FAIL;
>
> -    sz = (max_cpus + 7) / 8;
> -    cpumap->map = calloc(sz, sizeof(*cpumap->map));
> -    if (!cpumap->map)
> -        return ERROR_NOMEM;
> -    cpumap->size = sz;
> -    return 0;
> -}
> -
> -void libxl_cpumap_dispose(libxl_cpumap *map)
> -{
> -    free(map->map);
> -}
> -
> -int libxl_cpumap_test(libxl_cpumap *cpumap, int cpu)
> -{
> -    if (cpu>= cpumap->size * 8)
> -        return 0;
> -    return (cpumap->map[cpu / 8]&  (1<<  (cpu&  7))) ? 1 : 0;
> -}
> -
> -void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu)
> -{
> -    if (cpu>= cpumap->size * 8)
> -        return;
> -    cpumap->map[cpu / 8] |= 1<<  (cpu&  7);
> -}
> -
> -void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu)
> -{
> -    if (cpu>= cpumap->size * 8)
> -        return;
> -    cpumap->map[cpu / 8]&= ~(1<<  (cpu&  7));
> +    return libxl_map_alloc(ctx, cpumap, max_cpus);
>   }
>
>   int libxl_get_max_cpus(libxl_ctx *ctx)
> diff --git a/tools/libxl/libxl_utils.h b/tools/libxl/libxl_utils.h
> --- a/tools/libxl/libxl_utils.h
> +++ b/tools/libxl/libxl_utils.h
> @@ -63,21 +63,46 @@ int libxl_devid_to_device_nic(libxl_ctx
>   int libxl_vdev_to_device_disk(libxl_ctx *ctx, uint32_t domid, const char *vdev,
>                                  libxl_device_disk *disk);
>
> +int libxl_map_test(struct libxl_map *map, int elem);
> +void libxl_map_set(struct libxl_map *map, int elem);
> +void libxl_map_reset(struct libxl_map *map, int elem);
> +static inline void libxl_map_set_any(struct libxl_map *map)
> +{
> +    memset(map->map, -1, map->size);
> +}
> +static inline void libxl_map_set_none(struct libxl_map *map)
> +{
> +    memset(map->map, 0, map->size);
> +}
> +static inline int libxl_map_elem_valid(struct libxl_map *map, int elem)
> +{
> +    return elem>= 0&&  elem<  (map->size * 8);
> +}
> +
>   int libxl_cpumap_alloc(libxl_ctx *ctx, libxl_cpumap *cpumap);
> -int libxl_cpumap_test(libxl_cpumap *cpumap, int cpu);
> -void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu);
> -void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu);
> +static inline int libxl_cpumap_test(libxl_cpumap *cpumap, int cpu)
> +{
> +    return libxl_map_test(cpumap, cpu);
> +}
> +static inline void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu)
> +{
> +    libxl_map_set(cpumap, cpu);
>   {
> -    memset(cpumap->map, -1, cpumap->size);
> +    libxl_map_set_any(cpumap);
>   }
>   static inline void libxl_cpumap_set_none(libxl_cpumap *cpumap)
>   {
> -    memset(cpumap->map, 0, cpumap->size);
> +    libxl_map_set_none(cpumap);
>   }
>   static inline int libxl_cpumap_cpu_valid(libxl_cpumap *cpumap, int cpu)
>   {
> -    return cpu>= 0&&  cpu<  (cpumap->size * 8);
> +    return libxl_map_elem_valid(cpumap, cpu);
>   }
>   #define libxl_for_each_cpu(var, map) for (var = 0; var<  (map).size * 8; var++)
>   #define libxl_for_each_set_cpu(v, m) for (v = 0; v<  (m).size * 8; v++) \

  parent reply	other threads:[~2012-05-31 14:54 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-31 12:11 [PATCH 00 of 11] Automatic NUMA placement for xl Dario Faggioli
2012-05-31 12:11 ` [PATCH 01 of 11] libxc: abstract xenctl_cpumap to just xenctl_map Dario Faggioli
2012-05-31 14:10   ` Ian Jackson
2012-05-31 14:47     ` George Dunlap
2012-05-31 14:55       ` George Dunlap
2012-05-31 15:01   ` George Dunlap
2012-05-31 15:08     ` Dario Faggioli
2012-05-31 12:11 ` [PATCH 02 of 11] libxl: abstract libxl_cpumap to just libxl_map Dario Faggioli
2012-05-31 14:11   ` Ian Jackson
2012-05-31 14:54   ` George Dunlap [this message]
2012-05-31 12:11 ` [PATCH 03 of 11] libxc, libxl: introduce xc_nodemap_t and libxl_nodemap Dario Faggioli
2012-05-31 14:12   ` Ian Jackson
2012-05-31 14:32     ` Dario Faggioli
2012-05-31 15:41   ` George Dunlap
2012-05-31 16:09     ` Dario Faggioli
2012-05-31 12:11 ` [PATCH 04 of 11] libxl: expand the libxl_{cpu, node}map API a bit Dario Faggioli
2012-05-31 14:13   ` Ian Jackson
2012-05-31 14:30     ` Dario Faggioli
2012-06-08 13:54       ` Ian Jackson
2012-05-31 15:51   ` George Dunlap
2012-05-31 16:01     ` Dario Faggioli
2012-05-31 12:11 ` [PATCH 05 of 11] libxl: add a new Array type to the IDL Dario Faggioli
2012-05-31 15:54   ` George Dunlap
2012-06-08 14:03   ` Ian Jackson
2012-06-08 15:14     ` Dario Faggioli
2012-06-08 15:17       ` Ian Jackson
2012-06-08 15:37       ` Ian Jackson
2012-06-08 15:52         ` Dario Faggioli
2012-06-08 15:57           ` Ian Jackson
2012-06-12  9:02       ` Ian Campbell
2012-06-13  6:59         ` Dario Faggioli
2012-06-18 12:06           ` Dario Faggioli
2012-06-21 14:32           ` Dario Faggioli
2012-06-21 14:35             ` Ian Campbell
2012-06-21 14:35           ` Dario Faggioli
2012-06-26 16:28   ` Ian Jackson
2012-06-26 16:30     ` Ian Campbell
2012-06-26 16:58       ` Dario Faggioli
2012-05-31 12:11 ` [PATCH 06 of 11] libxl: introduce libxl_get_numainfo() Dario Faggioli
2012-05-31 14:22   ` Ian Jackson
2012-05-31 14:57     ` Dario Faggioli
2012-06-01 16:44     ` George Dunlap
2012-06-01 16:58       ` Ian Jackson
2012-05-31 12:11 ` [PATCH 07 of 11] xen: enhance dump_numa output Dario Faggioli
2012-05-31 14:23   ` Ian Jackson
2012-05-31 14:35     ` Dario Faggioli
2012-05-31 12:11 ` [PATCH 08 of 11] xl: add more NUMA information to `xl info -n' Dario Faggioli
2012-05-31 14:24   ` Ian Jackson
2012-05-31 14:40     ` Dario Faggioli
2012-06-01 16:56     ` George Dunlap
2012-05-31 12:11 ` [PATCH 09 of 11] libxl, xl: enable automatic placement of guests on NUMA nodes Dario Faggioli
2012-05-31 15:02   ` Ian Jackson
2012-05-31 16:27     ` Dario Faggioli
2012-05-31 16:42       ` Ian Campbell
2012-05-31 16:56         ` Dario Faggioli
2012-05-31 12:11 ` [PATCH 10 of 11] libxl, xl: heuristics for reordering NUMA placement candidates Dario Faggioli
2012-05-31 12:11 ` [PATCH 11 of 11] Some automatic NUMA placement documentation Dario Faggioli
2012-05-31 15:08   ` Ian Jackson
2012-05-31 15:41     ` Dario Faggioli
2012-06-08 14:01       ` Ian Jackson
2012-06-08 14:03         ` George Dunlap
2012-06-08 14:06           ` Ian Jackson
2012-06-08 14:35             ` Dario Faggioli
2012-06-08 15:19         ` Dario Faggioli

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=4FC78640.3050408@eu.citrix.com \
    --to=george.dunlap@eu.citrix.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=Stefano.Stabellini@eu.citrix.com \
    --cc=andre.przywara@amd.com \
    --cc=juergen.gross@ts.fujitsu.com \
    --cc=raistlin@linux.it \
    --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.