File tree 2 files changed +30
-14
lines changed
2 files changed +30
-14
lines changed Original file line number Diff line number Diff line change @@ -65,16 +65,6 @@ static inline int get_bitmask_order(unsigned int count)
65
65
return order ; /* We could be slightly more clever with -1 here... */
66
66
}
67
67
68
- static inline int get_count_order (unsigned int count )
69
- {
70
- int order ;
71
-
72
- order = fls (count ) - 1 ;
73
- if (count & (count - 1 ))
74
- order ++ ;
75
- return order ;
76
- }
77
-
78
68
static __always_inline unsigned long hweight_long (unsigned long w )
79
69
{
80
70
return sizeof (w ) == 4 ? hweight32 (w ) : hweight64 (w );
@@ -191,6 +181,32 @@ static inline unsigned fls_long(unsigned long l)
191
181
return fls64 (l );
192
182
}
193
183
184
+ static inline int get_count_order (unsigned int count )
185
+ {
186
+ int order ;
187
+
188
+ order = fls (count ) - 1 ;
189
+ if (count & (count - 1 ))
190
+ order ++ ;
191
+ return order ;
192
+ }
193
+
194
+ /**
195
+ * get_count_order_long - get order after rounding @l up to power of 2
196
+ * @l: parameter
197
+ *
198
+ * it is same as get_count_order() but with long type parameter
199
+ */
200
+ static inline int get_count_order_long (unsigned long l )
201
+ {
202
+ if (l == 0UL )
203
+ return -1 ;
204
+ else if (l & (l - 1UL ))
205
+ return (int )fls_long (l );
206
+ else
207
+ return (int )fls_long (l ) - 1 ;
208
+ }
209
+
194
210
/**
195
211
* __ffs64 - find first set bit in a 64 bit word
196
212
* @word: The 64 bit word
Original file line number Diff line number Diff line change @@ -1359,14 +1359,14 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
1359
1359
struct vm_struct * area ;
1360
1360
1361
1361
BUG_ON (in_interrupt ());
1362
- if (flags & VM_IOREMAP )
1363
- align = 1ul << clamp_t (int , fls_long (size ),
1364
- PAGE_SHIFT , IOREMAP_MAX_ORDER );
1365
-
1366
1362
size = PAGE_ALIGN (size );
1367
1363
if (unlikely (!size ))
1368
1364
return NULL ;
1369
1365
1366
+ if (flags & VM_IOREMAP )
1367
+ align = 1ul << clamp_t (int , get_count_order_long (size ),
1368
+ PAGE_SHIFT , IOREMAP_MAX_ORDER );
1369
+
1370
1370
area = kzalloc_node (sizeof (* area ), gfp_mask & GFP_RECLAIM_MASK , node );
1371
1371
if (unlikely (!area ))
1372
1372
return NULL ;
You can’t perform that action at this time.
0 commit comments