|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCHv9 4/4] gnttab: use per-VCPU maptrack free lists
>>> On 20.05.15 at 17:54, <david.vrabel@xxxxxxxxxx> wrote:
> static inline int
> get_maptrack_handle(
> struct grant_table *lgt)
> {
> + struct vcpu *v = current;
> int i;
> grant_handle_t handle;
> struct grant_mapping *new_mt;
> - unsigned int new_mt_limit, nr_frames;
> + unsigned int nr_frames;
>
> - spin_lock(&lgt->maptrack_lock);
> + handle = __get_maptrack_handle(lgt, v);
> + if ( likely(handle != -1) )
> + return handle;
>
> - while ( unlikely((handle = __get_maptrack_handle(lgt)) == -1) )
> - {
> - nr_frames = nr_maptrack_frames(lgt);
> - if ( nr_frames >= max_maptrack_frames )
> - break;
> + nr_frames = nr_vcpu_maptrack_frames(v);
> + if ( nr_frames >= max_maptrack_frames )
I think you want to check lgt->maptrack_pages here, to make sure
the global limit remains a per-domain one. Or else we'd need a dual
(Dom0/DomU) or even per-domain bound to avoid many-vCPU
guests being able to force Xen into using significant amounts of
memory for their maptrack.
> @@ -1447,6 +1484,17 @@ gnttab_setup_table(
> gt = d->grant_table;
> write_lock(>->lock);
>
> + /* Tracking of mapped foreign frames table */
> + if ( (gt->maptrack = xzalloc_array(struct grant_mapping *,
> + max_maptrack_frames * d->max_vcpus))
> == NULL )
> + goto out3;
Not that vzalloc() meanwhile exists. But depending on the resolution
of the aspect above you may not even urgently need it here.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |