vchan: fix multiple server instances from single process
Use new u2mfn_fd for each ring_init call - each open fd to u2mfn is capable to do only one u2mfn_alloc_kpage, so it can't be reused at the next ring_init.
This commit is contained in:
parent
debcf6d24a
commit
eea3aa3b72
@ -92,6 +92,7 @@ static int ring_init(struct libvchan *ctrl)
|
||||
static int ring_init(struct libvchan *ctrl)
|
||||
{
|
||||
int mfn;
|
||||
int u2mfn_fd;
|
||||
struct vchan_interface *ring;
|
||||
#ifdef CONFIG_STUBDOM
|
||||
ring = (struct vchan_interface *) memalign(XC_PAGE_SIZE, sizeof(*ring));
|
||||
@ -102,12 +103,15 @@ static int ring_init(struct libvchan *ctrl)
|
||||
|
||||
mfn = virtual_to_mfn(ring);
|
||||
#else
|
||||
ring = (struct vchan_interface *) u2mfn_alloc_kpage ();
|
||||
u2mfn_fd = u2mfn_get_fd();
|
||||
if (u2mfn_fd < 0)
|
||||
return -1;
|
||||
ring = (struct vchan_interface *) u2mfn_alloc_kpage_with_fd (u2mfn_fd);
|
||||
|
||||
if (ring == MAP_FAILED)
|
||||
return -1;
|
||||
|
||||
if (u2mfn_get_last_mfn (&mfn) < 0)
|
||||
if (u2mfn_get_last_mfn_with_fd (u2mfn_fd, &mfn) < 0)
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user