[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 04/17] xen/cpupool: switch cpupool id to unsigned
On 01.12.2020 10:01, Jürgen Groß wrote: > On 01.12.20 09:55, Jan Beulich wrote: >> On 01.12.2020 09:21, Juergen Gross wrote: >>> @@ -243,11 +243,11 @@ void cpupool_put(struct cpupool *pool) >>> * - unknown scheduler >>> */ >>> static struct cpupool *cpupool_create( >>> - int poolid, unsigned int sched_id, int *perr) >>> + unsigned int poolid, unsigned int sched_id, int *perr) >>> { >>> struct cpupool *c; >>> struct cpupool **q; >>> - int last = 0; >>> + unsigned int last = 0; >>> >>> *perr = -ENOMEM; >>> if ( (c = alloc_cpupool_struct()) == NULL ) >>> @@ -256,7 +256,7 @@ static struct cpupool *cpupool_create( >>> /* One reference for caller, one reference for cpupool_destroy(). */ >>> atomic_set(&c->refcnt, 2); >>> >>> - debugtrace_printk("cpupool_create(pool=%d,sched=%u)\n", poolid, >>> sched_id); >>> + debugtrace_printk("cpupool_create(pool=%u,sched=%u)\n", poolid, >>> sched_id); >>> >>> spin_lock(&cpupool_lock); >> >> Below from here we have >> >> c->cpupool_id = (poolid == CPUPOOLID_NONE) ? (last + 1) : poolid; >> >> which I think can (a) wrap to zero and (b) cause a pool with id >> CPUPOOLID_NONE to be created. The former is bad in any event, and >> the latter will cause confusion at least with cpupool_add_domain() >> and cpupool_get_id(). I realize this is a tangential problem, i.e. >> may want fixing in a separate change. > > Yes, this is an issue today already, and it is fixed in patch 5. > >> >>> --- a/xen/common/sched/private.h >>> +++ b/xen/common/sched/private.h >>> @@ -505,8 +505,8 @@ static inline void sched_unit_unpause(const struct >>> sched_unit *unit) >>> >>> struct cpupool >>> { >>> - int cpupool_id; >>> -#define CPUPOOLID_NONE (-1) >>> + unsigned int cpupool_id; >>> +#define CPUPOOLID_NONE (~0U) >> >> How about using XEN_SYSCTL_CPUPOOL_PAR_ANY here? Furthermore, >> together with the remark above, I think you also want to consider >> the case of sizeof(unsigned int) > sizeof(uint32_t). > > With patch 5 this should be completely fine. Ah - I didn't expect this kind of fix in a patch with that title, but yes. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |