[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 05/17] xen/cpupool: switch cpupool list to normal list interface
On 01.12.20 10:12, Jan Beulich wrote:
On 01.12.2020 09:21, Juergen Gross wrote:
@@ -260,23 +257,42 @@ static struct cpupool *cpupool_create(
spin_lock(&cpupool_lock);
- for_each_cpupool(q)
+ if ( poolid != CPUPOOLID_NONE )
{
- last = (*q)->cpupool_id;
- if ( (poolid != CPUPOOLID_NONE) && (last >= poolid) )
- break;
+ q = __cpupool_find_by_id(poolid, false);
+ if ( !q )
+ list_add_tail(&c->list, &cpupool_list);
+ else
+ {
+ list_add_tail(&c->list, &q->list);
+ if ( q->cpupool_id == poolid )
+ {
+ *perr = -EEXIST;
+ goto err;
+ }
You bail _after_ having added the new entry to the list?
Yes, this is making exit handling easier.
+ }
+
+ c->cpupool_id = poolid;
}
- if ( *q != NULL )
+ else
{
- if ( (*q)->cpupool_id == poolid )
+ /* Cpupool 0 is created with specified id at boot and never removed. */
+ ASSERT(!list_empty(&cpupool_list));
+
+ q = list_last_entry(&cpupool_list, struct cpupool, list);
+ /* In case of wrap search for first free id. */
+ if ( q->cpupool_id == CPUPOOLID_NONE - 1 )
{
- *perr = -EEXIST;
- goto err;
+ list_for_each_entry(q, &cpupool_list, list)
+ if ( q->cpupool_id + 1 != list_next_entry(q, list)->cpupool_id
)
+ break;
}
- c->next = *q;
+
+ list_add(&c->list, &q->list);
+
+ c->cpupool_id = q->cpupool_id + 1;
What guarantees that you managed to find an unused ID, other
than at current CPU speeds it taking too long to create 4
billion pools? Since you're doing this under lock, wouldn't
it help anyway to have a global helper variable pointing at
the lowest pool followed by an unused ID?
An admin doing that would be quite crazy and wouldn't deserve better.
For being usable a cpupool needs to have a cpu assigned to it. And I
don't think we are coming even close to 4 billion supported cpus. :-)
Yes, it would be possible to create 4 billion empty cpupools, but for
what purpose? There are simpler ways to make the system unusable with
dom0 root access.
Juergen
Attachment:
OpenPGP_0xB0DE9DD628BF132F.asc
Description: application/pgp-keys
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature
|