Page MenuHomeFreeBSD

D27371.id80079.diff
No OneTemporary

D27371.id80079.diff

Index: head/sys/kern/kern_cpuset.c
===================================================================
--- head/sys/kern/kern_cpuset.c
+++ head/sys/kern/kern_cpuset.c
@@ -794,14 +794,11 @@
return (EPERM);
domainset_freelist_init(&domains, 0);
domain = domainset_create(domain);
- ndomains = needed = 0;
- do {
- if (ndomains < needed) {
- domainset_freelist_add(&domains, needed - ndomains);
- ndomains = needed;
- }
+ ndomains = 0;
+
+ mtx_lock_spin(&cpuset_lock);
+ for (;;) {
root = cpuset_getroot(set);
- mtx_lock_spin(&cpuset_lock);
dset = root->cs_domain;
/*
* Verify that we have access to this set of domains.
@@ -826,7 +823,15 @@
&needed, 0);
if (error)
goto out;
- } while (ndomains < needed);
+ if (ndomains >= needed)
+ break;
+
+ /* Dropping the lock; we'll need to re-evaluate again. */
+ mtx_unlock_spin(&cpuset_lock);
+ domainset_freelist_add(&domains, needed - ndomains);
+ ndomains = needed;
+ mtx_lock_spin(&cpuset_lock);
+ }
dset = set->cs_domain;
cpuset_update_domain(set, domain, dset, &domains);
out:

File Metadata

Mime Type
text/plain
Expires
Tue, Sep 8, 6:45 PM (7 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38505535
Default Alt Text
D27371.id80079.diff (1 KB)

Event Timeline