diff options
Diffstat (limited to 'lib/bitmap.c')
-rw-r--r-- | lib/bitmap.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/lib/bitmap.c b/lib/bitmap.c index 36e380da00c5..a13c7f4e325a 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c | |||
@@ -159,7 +159,7 @@ void __bitmap_shift_left(unsigned long *dst, const unsigned long *src, | |||
159 | unsigned int shift, unsigned int nbits) | 159 | unsigned int shift, unsigned int nbits) |
160 | { | 160 | { |
161 | int k; | 161 | int k; |
162 | unsigned int lim = BITS_TO_LONGS(nbits), left = nbits % BITS_PER_LONG; | 162 | unsigned int lim = BITS_TO_LONGS(nbits); |
163 | unsigned int off = shift/BITS_PER_LONG, rem = shift % BITS_PER_LONG; | 163 | unsigned int off = shift/BITS_PER_LONG, rem = shift % BITS_PER_LONG; |
164 | for (k = lim - off - 1; k >= 0; --k) { | 164 | for (k = lim - off - 1; k >= 0; --k) { |
165 | unsigned long upper, lower; | 165 | unsigned long upper, lower; |
@@ -172,13 +172,8 @@ void __bitmap_shift_left(unsigned long *dst, const unsigned long *src, | |||
172 | lower = src[k - 1] >> (BITS_PER_LONG - rem); | 172 | lower = src[k - 1] >> (BITS_PER_LONG - rem); |
173 | else | 173 | else |
174 | lower = 0; | 174 | lower = 0; |
175 | upper = src[k]; | 175 | upper = src[k] << rem; |
176 | if (left && k == lim - 1) | ||
177 | upper &= (1UL << left) - 1; | ||
178 | upper <<= rem; | ||
179 | dst[k + off] = lower | upper; | 176 | dst[k + off] = lower | upper; |
180 | if (left && k + off == lim - 1) | ||
181 | dst[k + off] &= (1UL << left) - 1; | ||
182 | } | 177 | } |
183 | if (off) | 178 | if (off) |
184 | memset(dst, 0, off*sizeof(unsigned long)); | 179 | memset(dst, 0, off*sizeof(unsigned long)); |