Lines Matching refs:depth

44 int sbitmap_init_node(struct sbitmap *sb, unsigned int depth, int shift,
58 if (depth >= 4) {
59 while ((4U << shift) > depth)
68 sb->depth = depth;
69 sb->map_nr = DIV_ROUND_UP(sb->depth, bits_per_word);
71 if (depth == 0) {
81 sb->map[i].depth = min(depth, bits_per_word);
82 depth -= sb->map[i].depth;
89 void sbitmap_resize(struct sbitmap *sb, unsigned int depth)
97 sb->depth = depth;
98 sb->map_nr = DIV_ROUND_UP(sb->depth, bits_per_word);
101 sb->map[i].depth = min(depth, bits_per_word);
102 depth -= sb->map[i].depth;
107 static int __sbitmap_get_word(unsigned long *word, unsigned long depth,
114 nr = find_next_zero_bit(word, depth, hint);
115 if (unlikely(nr >= depth)) {
132 if (hint >= depth - 1)
146 sb->map[index].depth, alloc_hint,
203 min(sb->map[index].depth, shallow_depth),
247 weight += bitmap_weight(&word->word, word->depth);
249 weight += bitmap_weight(&word->cleared, word->depth);
266 seq_printf(m, "depth=%u\n", sb->depth);
296 unsigned int word_bits = READ_ONCE(sb->map[i].depth);
325 unsigned int depth)
332 * batch size is small enough that the full depth of the bitmap,
333 * potentially limited by a shallow depth, is enough to wake up all of
337 * be a partial word. There are depth / bits_per_word full words and
338 * depth % bits_per_word bits left over. In bitwise arithmetic:
341 * depth / bits_per_word = depth >> shift
342 * depth % bits_per_word = depth & ((1 << shift) - 1)
347 depth = ((depth >> sbq->sb.shift) * shallow_depth +
348 min(depth & ((1U << sbq->sb.shift) - 1), shallow_depth));
349 wake_batch = clamp_t(unsigned int, depth / SBQ_WAIT_QUEUES, 1,
355 int sbitmap_queue_init_node(struct sbitmap_queue *sbq, unsigned int depth,
361 ret = sbitmap_init_node(&sbq->sb, depth, shift, flags, node);
371 if (depth && !round_robin) {
373 *per_cpu_ptr(sbq->alloc_hint, i) = prandom_u32() % depth;
377 sbq->wake_batch = sbq_calc_wake_batch(sbq, depth);
399 unsigned int depth)
401 unsigned int wake_batch = sbq_calc_wake_batch(sbq, depth);
417 void sbitmap_queue_resize(struct sbitmap_queue *sbq, unsigned int depth)
419 sbitmap_queue_update_wake_batch(sbq, depth);
420 sbitmap_resize(&sbq->sb, depth);
426 unsigned int hint, depth;
430 depth = READ_ONCE(sbq->sb.depth);
431 if (unlikely(hint >= depth)) {
432 hint = depth ? prandom_u32() % depth : 0;
443 if (hint >= depth - 1)
455 unsigned int hint, depth;
461 depth = READ_ONCE(sbq->sb.depth);
462 if (unlikely(hint >= depth)) {
463 hint = depth ? prandom_u32() % depth : 0;
474 if (hint >= depth - 1)
487 sbitmap_queue_update_wake_batch(sbq, sbq->sb.depth);
587 if (likely(!sbq->round_robin && nr < sbq->sb.depth))