void *addr = NULL;
int domids_stride;
unsigned int refs_size = ROUNDUP(count *
- sizeof(struct ioctl_gntdev_map_grant_ref),
+ sizeof(struct ioctl_gntdev_grant_ref),
PAGE_SHIFT);
domids_stride = (flags & XENGNTTAB_GRANT_MAP_SINGLE_DOMAIN) ? 0 : 1;
{
int fd = xgt->fd;
struct ioctl_gntdev_map_grant_ref *map;
- unsigned int map_size = ROUNDUP((sizeof(*map) + (count - 1) *
- sizeof(struct ioctl_gntdev_map_grant_ref)),
- PAGE_SHIFT);
+ unsigned int map_size = sizeof(*map) + (count - 1) * sizeof(map->refs[0]);
void *addr = NULL;
int domids_stride = 1;
int i;
domids_stride = 0;
if ( map_size <= PAGE_SIZE )
- map = alloca(sizeof(*map) +
- (count - 1) * sizeof(struct ioctl_gntdev_map_grant_ref));
+ map = alloca(map_size);
else
{
+ map_size = ROUNDUP(map_size, PAGE_SHIFT);
map = mmap(NULL, map_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON | MAP_POPULATE, -1, 0);
if ( map == MAP_FAILED )