debuggers.hg

view tools/include/xen-sys/Linux/privcmd.h @ 20837:0b138a019292

libxc: use new (replacement) mmap-batch ioctl

Replace all calls to xc_map_foreign_batch() where the caller doesn't
look at the passed in array to check for errors by calls to
xc_map_foreign_pages(). Replace all remaining calls by such to the
newly introduced xc_map_foreign_bulk().

As a sideband modification (needed while writing the patch to ensure
they're unused) eliminate unused parameters to
uncanonicalize_pagetable() and xc_map_foreign_batch_single(). Also
unmap live_p2m_frame_list earlier in map_and_save_p2m_table(),
reducing the peak amount of virtual address space required.

All supported OSes other than Linux continue to use the old ioctl for
the time being.

Also change libxc's MAJOR to 4.0 to reflect the API change.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
author Keir Fraser <keir.fraser@citrix.com>
date Wed Jan 13 08:12:56 2010 +0000 (2010-01-13)
parents 69b8816b5c8c
children
line source
1 /******************************************************************************
2 * privcmd.h
3 *
4 * Interface to /proc/xen/privcmd.
5 *
6 * Copyright (c) 2003-2005, K A Fraser
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License version 2
10 * as published by the Free Software Foundation; or, when distributed
11 * separately from the Linux kernel or incorporated into other
12 * software packages, subject to the following license:
13 *
14 * Permission is hereby granted, free of charge, to any person obtaining a copy
15 * of this source file (the "Software"), to deal in the Software without
16 * restriction, including without limitation the rights to use, copy, modify,
17 * merge, publish, distribute, sublicense, and/or sell copies of the Software,
18 * and to permit persons to whom the Software is furnished to do so, subject to
19 * the following conditions:
20 *
21 * The above copyright notice and this permission notice shall be included in
22 * all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
30 * IN THE SOFTWARE.
31 */
33 #ifndef __LINUX_PUBLIC_PRIVCMD_H__
34 #define __LINUX_PUBLIC_PRIVCMD_H__
36 #include <linux/types.h>
38 #ifndef __user
39 #define __user
40 #endif
42 typedef struct privcmd_hypercall
43 {
44 __u64 op;
45 __u64 arg[5];
46 } privcmd_hypercall_t;
48 typedef struct privcmd_mmap_entry {
49 __u64 va;
50 __u64 mfn;
51 __u64 npages;
52 } privcmd_mmap_entry_t;
54 typedef struct privcmd_mmap {
55 int num;
56 domid_t dom; /* target domain */
57 privcmd_mmap_entry_t __user *entry;
58 } privcmd_mmap_t;
60 typedef struct privcmd_mmapbatch {
61 int num; /* number of pages to populate */
62 domid_t dom; /* target domain */
63 __u64 addr; /* virtual address */
64 xen_pfn_t __user *arr; /* array of mfns - top nibble set on err */
65 } privcmd_mmapbatch_t;
67 typedef struct privcmd_mmapbatch_v2 {
68 unsigned int num; /* number of pages to populate */
69 domid_t dom; /* target domain */
70 __u64 addr; /* virtual address */
71 const xen_pfn_t __user *arr; /* array of mfns */
72 int __user *err; /* array of error codes */
73 } privcmd_mmapbatch_v2_t;
75 /*
76 * @cmd: IOCTL_PRIVCMD_HYPERCALL
77 * @arg: &privcmd_hypercall_t
78 * Return: Value returned from execution of the specified hypercall.
79 */
80 #define IOCTL_PRIVCMD_HYPERCALL \
81 _IOC(_IOC_NONE, 'P', 0, sizeof(privcmd_hypercall_t))
82 #define IOCTL_PRIVCMD_MMAP \
83 _IOC(_IOC_NONE, 'P', 2, sizeof(privcmd_mmap_t))
84 #define IOCTL_PRIVCMD_MMAPBATCH \
85 _IOC(_IOC_NONE, 'P', 3, sizeof(privcmd_mmapbatch_t))
86 #define IOCTL_PRIVCMD_MMAPBATCH_V2 \
87 _IOC(_IOC_NONE, 'P', 4, sizeof(privcmd_mmapbatch_v2_t))
89 #endif /* __LINUX_PUBLIC_PRIVCMD_H__ */