|
@@ -504,7 +504,7 @@ void *idr_find(struct idr *idp, int id)
|
|
int n;
|
|
int n;
|
|
struct idr_layer *p;
|
|
struct idr_layer *p;
|
|
|
|
|
|
- p = rcu_dereference(idp->top);
|
|
|
|
|
|
+ p = rcu_dereference_raw(idp->top);
|
|
if (!p)
|
|
if (!p)
|
|
return NULL;
|
|
return NULL;
|
|
n = (p->layer+1) * IDR_BITS;
|
|
n = (p->layer+1) * IDR_BITS;
|
|
@@ -519,7 +519,7 @@ void *idr_find(struct idr *idp, int id)
|
|
while (n > 0 && p) {
|
|
while (n > 0 && p) {
|
|
n -= IDR_BITS;
|
|
n -= IDR_BITS;
|
|
BUG_ON(n != p->layer*IDR_BITS);
|
|
BUG_ON(n != p->layer*IDR_BITS);
|
|
- p = rcu_dereference(p->ary[(id >> n) & IDR_MASK]);
|
|
|
|
|
|
+ p = rcu_dereference_raw(p->ary[(id >> n) & IDR_MASK]);
|
|
}
|
|
}
|
|
return((void *)p);
|
|
return((void *)p);
|
|
}
|
|
}
|
|
@@ -552,7 +552,7 @@ int idr_for_each(struct idr *idp,
|
|
struct idr_layer **paa = &pa[0];
|
|
struct idr_layer **paa = &pa[0];
|
|
|
|
|
|
n = idp->layers * IDR_BITS;
|
|
n = idp->layers * IDR_BITS;
|
|
- p = rcu_dereference(idp->top);
|
|
|
|
|
|
+ p = rcu_dereference_raw(idp->top);
|
|
max = 1 << n;
|
|
max = 1 << n;
|
|
|
|
|
|
id = 0;
|
|
id = 0;
|
|
@@ -560,7 +560,7 @@ int idr_for_each(struct idr *idp,
|
|
while (n > 0 && p) {
|
|
while (n > 0 && p) {
|
|
n -= IDR_BITS;
|
|
n -= IDR_BITS;
|
|
*paa++ = p;
|
|
*paa++ = p;
|
|
- p = rcu_dereference(p->ary[(id >> n) & IDR_MASK]);
|
|
|
|
|
|
+ p = rcu_dereference_raw(p->ary[(id >> n) & IDR_MASK]);
|
|
}
|
|
}
|
|
|
|
|
|
if (p) {
|
|
if (p) {
|