mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
tools/libs/gnttab: Fix PAGE_SIZE redefinition error
If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h header) then gcc will trigger a redefinition error because of -Werror. This patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid confusion between control domain page granularity (PAGE_* definitions) and guest domain page granularity. The exception is in osdep_xenforeignmemory_map() where we need the system page size to check whether the PFN array should be allocated with mmap() or with dynamic allocation. Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro> Reviewed-by: Julien Grall <jgrall@amazon.com> Acked-by: Ian Jackson <iwj@xenproject.org>
This commit is contained in:
1 parent
0dbb4be739
commit
d1b32abd94
3 files changed
+36
-43
No files matched your search
+13
-15
@@ -30,14 +30,11 @@
|
||||
|
||||
#include <xen/sys/gntdev.h>
|
||||
|
||||
#include <xenctrl.h>
|
||||
#include <xen-tools/libs.h>
|
||||
|
||||
#include "private.h"
|
||||
|
||||
#define PAGE_SHIFT 12
|
||||
#define PAGE_SIZE (1UL << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
|
||||
#define DEVXEN "/dev/xen/gntdev"
|
||||
|
||||
int osdep_gnttab_open(xengnttab_handle *xgt)
|
||||
@@ -77,10 +74,11 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
int domids_stride;
|
||||
unsigned int refs_size = ROUNDUP(count *
|
||||
sizeof(struct ioctl_gntdev_grant_ref),
|
||||
PAGE_SHIFT);
|
||||
XC_PAGE_SHIFT);
|
||||
int os_page_size = getpagesize();
|
||||
|
||||
domids_stride = (flags & XENGNTTAB_GRANT_MAP_SINGLE_DOMAIN) ? 0 : 1;
|
||||
if ( refs_size <= PAGE_SIZE )
|
||||
if ( refs_size <= os_page_size )
|
||||
map.refs = malloc(refs_size);
|
||||
else
|
||||
{
|
||||
@@ -107,7 +105,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
goto out;
|
||||
}
|
||||
|
||||
addr = mmap(NULL, PAGE_SIZE * count, prot, MAP_SHARED, fd,
|
||||
addr = mmap(NULL, XC_PAGE_SIZE * count, prot, MAP_SHARED, fd,
|
||||
map.index);
|
||||
if ( addr != MAP_FAILED )
|
||||
{
|
||||
@@ -116,7 +114,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
|
||||
notify.index = map.index;
|
||||
notify.action = 0;
|
||||
if ( notify_offset < PAGE_SIZE * count )
|
||||
if ( notify_offset < XC_PAGE_SIZE * count )
|
||||
{
|
||||
notify.index += notify_offset;
|
||||
notify.action |= UNMAP_NOTIFY_CLEAR_BYTE;
|
||||
@@ -131,7 +129,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
if ( rv )
|
||||
{
|
||||
GTERROR(xgt->logger, "ioctl SET_UNMAP_NOTIFY failed");
|
||||
munmap(addr, count * PAGE_SIZE);
|
||||
munmap(addr, count * XC_PAGE_SIZE);
|
||||
addr = MAP_FAILED;
|
||||
}
|
||||
}
|
||||
@@ -150,7 +148,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
}
|
||||
|
||||
out:
|
||||
if ( refs_size > PAGE_SIZE )
|
||||
if ( refs_size > os_page_size )
|
||||
munmap(map.refs, refs_size);
|
||||
else
|
||||
free(map.refs);
|
||||
@@ -189,7 +187,7 @@ int osdep_gnttab_unmap(xengnttab_handle *xgt,
|
||||
}
|
||||
|
||||
/* Next, unmap the memory. */
|
||||
if ( (rc = munmap(start_address, count * PAGE_SIZE)) )
|
||||
if ( (rc = munmap(start_address, count * XC_PAGE_SIZE)) )
|
||||
return rc;
|
||||
|
||||
/* Finally, unmap the driver slots used to store the grant information. */
|
||||
@@ -256,7 +254,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
goto out;
|
||||
}
|
||||
|
||||
area = mmap(NULL, count * PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,
|
||||
area = mmap(NULL, count * XC_PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,
|
||||
fd, gref_info.index);
|
||||
|
||||
if ( area == MAP_FAILED )
|
||||
@@ -268,7 +266,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
|
||||
notify.index = gref_info.index;
|
||||
notify.action = 0;
|
||||
if ( notify_offset < PAGE_SIZE * count )
|
||||
if ( notify_offset < XC_PAGE_SIZE * count )
|
||||
{
|
||||
notify.index += notify_offset;
|
||||
notify.action |= UNMAP_NOTIFY_CLEAR_BYTE;
|
||||
@@ -283,7 +281,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
if ( err )
|
||||
{
|
||||
GSERROR(xgs->logger, "ioctl SET_UNMAP_NOTIFY failed");
|
||||
munmap(area, count * PAGE_SIZE);
|
||||
munmap(area, count * XC_PAGE_SIZE);
|
||||
area = NULL;
|
||||
}
|
||||
|
||||
@@ -306,7 +304,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
int osdep_gntshr_unshare(xengntshr_handle *xgs,
|
||||
void *start_address, uint32_t count)
|
||||
{
|
||||
return munmap(start_address, count * PAGE_SIZE);
|
||||
return munmap(start_address, count * XC_PAGE_SIZE);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+13
-15
@@ -32,14 +32,11 @@
|
||||
#include <xen/sys/gntdev.h>
|
||||
#include <xen/sys/gntalloc.h>
|
||||
|
||||
#include <xenctrl.h>
|
||||
#include <xen-tools/libs.h>
|
||||
|
||||
#include "private.h"
|
||||
|
||||
#define PAGE_SHIFT 12
|
||||
#define PAGE_SIZE (1UL << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
|
||||
#define DEVXEN "/dev/xen/"
|
||||
|
||||
#ifndef O_CLOEXEC
|
||||
@@ -92,6 +89,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
int fd = xgt->fd;
|
||||
struct ioctl_gntdev_map_grant_ref *map;
|
||||
unsigned int map_size = sizeof(*map) + (count - 1) * sizeof(map->refs[0]);
|
||||
int os_page_size = sysconf(_SC_PAGESIZE);
|
||||
void *addr = NULL;
|
||||
int domids_stride = 1;
|
||||
int i;
|
||||
@@ -99,11 +97,11 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
if (flags & XENGNTTAB_GRANT_MAP_SINGLE_DOMAIN)
|
||||
domids_stride = 0;
|
||||
|
||||
if ( map_size <= PAGE_SIZE )
|
||||
if ( map_size <= os_page_size )
|
||||
map = alloca(map_size);
|
||||
else
|
||||
{
|
||||
map_size = ROUNDUP(map_size, PAGE_SHIFT);
|
||||
map_size = ROUNDUP(map_size, XC_PAGE_SHIFT);
|
||||
map = mmap(NULL, map_size, PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON | MAP_POPULATE, -1, 0);
|
||||
if ( map == MAP_FAILED )
|
||||
@@ -127,7 +125,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
}
|
||||
|
||||
retry:
|
||||
addr = mmap(NULL, PAGE_SIZE * count, prot, MAP_SHARED, fd,
|
||||
addr = mmap(NULL, XC_PAGE_SIZE * count, prot, MAP_SHARED, fd,
|
||||
map->index);
|
||||
|
||||
if (addr == MAP_FAILED && errno == EAGAIN)
|
||||
@@ -152,7 +150,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
struct ioctl_gntdev_unmap_notify notify;
|
||||
notify.index = map->index;
|
||||
notify.action = 0;
|
||||
if (notify_offset < PAGE_SIZE * count) {
|
||||
if (notify_offset < XC_PAGE_SIZE * count) {
|
||||
notify.index += notify_offset;
|
||||
notify.action |= UNMAP_NOTIFY_CLEAR_BYTE;
|
||||
}
|
||||
@@ -164,7 +162,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
rv = ioctl(fd, IOCTL_GNTDEV_SET_UNMAP_NOTIFY, ¬ify);
|
||||
if (rv) {
|
||||
GTERROR(xgt->logger, "ioctl SET_UNMAP_NOTIFY failed");
|
||||
munmap(addr, count * PAGE_SIZE);
|
||||
munmap(addr, count * XC_PAGE_SIZE);
|
||||
addr = MAP_FAILED;
|
||||
}
|
||||
}
|
||||
@@ -184,7 +182,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
}
|
||||
|
||||
out:
|
||||
if ( map_size > PAGE_SIZE )
|
||||
if ( map_size > os_page_size )
|
||||
munmap(map, map_size);
|
||||
|
||||
return addr;
|
||||
@@ -220,7 +218,7 @@ int osdep_gnttab_unmap(xengnttab_handle *xgt,
|
||||
}
|
||||
|
||||
/* Next, unmap the memory. */
|
||||
if ( (rc = munmap(start_address, count * PAGE_SIZE)) )
|
||||
if ( (rc = munmap(start_address, count * XC_PAGE_SIZE)) )
|
||||
return rc;
|
||||
|
||||
/* Finally, unmap the driver slots used to store the grant information. */
|
||||
@@ -466,7 +464,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
goto out;
|
||||
}
|
||||
|
||||
area = mmap(NULL, count * PAGE_SIZE, PROT_READ | PROT_WRITE,
|
||||
area = mmap(NULL, count * XC_PAGE_SIZE, PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED, fd, gref_info->index);
|
||||
|
||||
if (area == MAP_FAILED) {
|
||||
@@ -477,7 +475,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
|
||||
notify.index = gref_info->index;
|
||||
notify.action = 0;
|
||||
if (notify_offset < PAGE_SIZE * count) {
|
||||
if (notify_offset < XC_PAGE_SIZE * count) {
|
||||
notify.index += notify_offset;
|
||||
notify.action |= UNMAP_NOTIFY_CLEAR_BYTE;
|
||||
}
|
||||
@@ -489,7 +487,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
err = ioctl(fd, IOCTL_GNTALLOC_SET_UNMAP_NOTIFY, ¬ify);
|
||||
if (err) {
|
||||
GSERROR(xgs->logger, "ioctl SET_UNMAP_NOTIFY failed");
|
||||
munmap(area, count * PAGE_SIZE);
|
||||
munmap(area, count * XC_PAGE_SIZE);
|
||||
area = NULL;
|
||||
}
|
||||
|
||||
@@ -510,7 +508,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
int osdep_gntshr_unshare(xengntshr_handle *xgs,
|
||||
void *start_address, uint32_t count)
|
||||
{
|
||||
return munmap(start_address, count * PAGE_SIZE);
|
||||
return munmap(start_address, count * XC_PAGE_SIZE);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+10
-13
@@ -28,15 +28,12 @@
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include <xenctrl.h>
|
||||
#include <xen/xen.h>
|
||||
#include <xen/xenio.h>
|
||||
|
||||
#include "private.h"
|
||||
|
||||
#define PAGE_SHIFT 12
|
||||
#define PAGE_SIZE (1UL << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
|
||||
#define DEVXEN "/kern/xen/privcmd"
|
||||
|
||||
int osdep_gnttab_open(xengnttab_handle *xgt)
|
||||
@@ -87,19 +84,19 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
}
|
||||
|
||||
map.count = count;
|
||||
addr = mmap(NULL, count * PAGE_SIZE,
|
||||
addr = mmap(NULL, count * XC_PAGE_SIZE,
|
||||
prot, flags | MAP_ANON | MAP_SHARED, -1, 0);
|
||||
if ( map.va == MAP_FAILED )
|
||||
{
|
||||
GTERROR(xgt->logger, "osdep_gnttab_grant_map: mmap failed");
|
||||
munmap((void *)map.va, count * PAGE_SIZE);
|
||||
munmap((void *)map.va, count * XC_PAGE_SIZE);
|
||||
addr = MAP_FAILED;
|
||||
}
|
||||
map.va = addr;
|
||||
|
||||
map.notify.offset = 0;
|
||||
map.notify.action = 0;
|
||||
if ( notify_offset < PAGE_SIZE * count )
|
||||
if ( notify_offset < XC_PAGE_SIZE * count )
|
||||
{
|
||||
map.notify.offset = notify_offset;
|
||||
map.notify.action |= UNMAP_NOTIFY_CLEAR_BYTE;
|
||||
@@ -115,7 +112,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt,
|
||||
{
|
||||
GTERROR(xgt->logger,
|
||||
"ioctl IOCTL_GNTDEV_MMAP_GRANT_REF failed: %d", rv);
|
||||
munmap(addr, count * PAGE_SIZE);
|
||||
munmap(addr, count * XC_PAGE_SIZE);
|
||||
addr = MAP_FAILED;
|
||||
}
|
||||
|
||||
@@ -136,7 +133,7 @@ int osdep_gnttab_unmap(xengnttab_handle *xgt,
|
||||
}
|
||||
|
||||
/* Next, unmap the memory. */
|
||||
rc = munmap(start_address, count * PAGE_SIZE);
|
||||
rc = munmap(start_address, count * XC_PAGE_SIZE);
|
||||
|
||||
return rc;
|
||||
}
|
||||
@@ -187,7 +184,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
alloc.domid = domid;
|
||||
alloc.flags = writable ? GNTDEV_ALLOC_FLAG_WRITABLE : 0;
|
||||
alloc.count = count;
|
||||
area = mmap(NULL, count * PAGE_SIZE,
|
||||
area = mmap(NULL, count * XC_PAGE_SIZE,
|
||||
PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0);
|
||||
|
||||
if ( area == MAP_FAILED )
|
||||
@@ -200,7 +197,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
|
||||
alloc.notify.offset = 0;
|
||||
alloc.notify.action = 0;
|
||||
if ( notify_offset < PAGE_SIZE * count )
|
||||
if ( notify_offset < XC_PAGE_SIZE * count )
|
||||
{
|
||||
alloc.notify.offset = notify_offset;
|
||||
alloc.notify.action |= UNMAP_NOTIFY_CLEAR_BYTE;
|
||||
@@ -215,7 +212,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
if ( err )
|
||||
{
|
||||
GSERROR(xgs->logger, "IOCTL_GNTDEV_ALLOC_GRANT_REF failed");
|
||||
munmap(area, count * PAGE_SIZE);
|
||||
munmap(area, count * XC_PAGE_SIZE);
|
||||
area = MAP_FAILED;
|
||||
goto out;
|
||||
}
|
||||
@@ -230,7 +227,7 @@ void *osdep_gntshr_share_pages(xengntshr_handle *xgs,
|
||||
int osdep_gntshr_unshare(xengntshr_handle *xgs,
|
||||
void *start_address, uint32_t count)
|
||||
{
|
||||
return munmap(start_address, count * PAGE_SIZE);
|
||||
return munmap(start_address, count * XC_PAGE_SIZE);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||