git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
x86/PCI: Mark Broadwell-EP Home Agent 1 as having non-compliant BARs
[pandora-kernel.git]
/
lib
/
bitmap.c
diff --git
a/lib/bitmap.c
b/lib/bitmap.c
index
0d4a127
..
389e75e
100644
(file)
--- a/
lib/bitmap.c
+++ b/
lib/bitmap.c
@@
-129,7
+129,9
@@
void __bitmap_shift_right(unsigned long *dst,
lower = src[off + k];
if (left && off + k == lim - 1)
lower &= mask;
lower = src[off + k];
if (left && off + k == lim - 1)
lower &= mask;
- dst[k] = upper << (BITS_PER_LONG - rem) | lower >> rem;
+ dst[k] = lower >> rem;
+ if (rem)
+ dst[k] |= upper << (BITS_PER_LONG - rem);
if (left && k == lim - 1)
dst[k] &= mask;
}
if (left && k == lim - 1)
dst[k] &= mask;
}
@@
-170,7
+172,9
@@
void __bitmap_shift_left(unsigned long *dst,
upper = src[k];
if (left && k == lim - 1)
upper &= (1UL << left) - 1;
upper = src[k];
if (left && k == lim - 1)
upper &= (1UL << left) - 1;
- dst[k + off] = lower >> (BITS_PER_LONG - rem) | upper << rem;
+ dst[k + off] = upper << rem;
+ if (rem)
+ dst[k + off] |= lower >> (BITS_PER_LONG - rem);
if (left && k + off == lim - 1)
dst[k + off] &= (1UL << left) - 1;
}
if (left && k + off == lim - 1)
dst[k + off] &= (1UL << left) - 1;
}
@@
-597,12
+601,12
@@
static int __bitmap_parselist(const char *buf, unsigned int buflen,
unsigned a, b;
int c, old_c, totaldigits;
const char __user __force *ubuf = (const char __user __force *)buf;
unsigned a, b;
int c, old_c, totaldigits;
const char __user __force *ubuf = (const char __user __force *)buf;
- int
exp_digi
t, in_range;
+ int
at_star
t, in_range;
totaldigits = c = 0;
bitmap_zero(maskp, nmaskbits);
do {
totaldigits = c = 0;
bitmap_zero(maskp, nmaskbits);
do {
-
exp_digi
t = 1;
+
at_star
t = 1;
in_range = 0;
a = b = 0;
in_range = 0;
a = b = 0;
@@
-631,11
+635,10
@@
static int __bitmap_parselist(const char *buf, unsigned int buflen,
break;
if (c == '-') {
break;
if (c == '-') {
- if (
exp_digi
t || in_range)
+ if (
at_star
t || in_range)
return -EINVAL;
b = 0;
in_range = 1;
return -EINVAL;
b = 0;
in_range = 1;
- exp_digit = 1;
continue;
}
continue;
}
@@
-645,16
+648,18
@@
static int __bitmap_parselist(const char *buf, unsigned int buflen,
b = b * 10 + (c - '0');
if (!in_range)
a = b;
b = b * 10 + (c - '0');
if (!in_range)
a = b;
-
exp_digi
t = 0;
+
at_star
t = 0;
totaldigits++;
}
if (!(a <= b))
return -EINVAL;
if (b >= nmaskbits)
return -ERANGE;
totaldigits++;
}
if (!(a <= b))
return -EINVAL;
if (b >= nmaskbits)
return -ERANGE;
- while (a <= b) {
- set_bit(a, maskp);
- a++;
+ if (!at_start) {
+ while (a <= b) {
+ set_bit(a, maskp);
+ a++;
+ }
}
} while (buflen && c == ',');
return 0;
}
} while (buflen && c == ',');
return 0;