Symbol: limiter
drivers/md/dm-vdo/data-vio.c
1027
static void dump_limiter(const char *name, struct limiter *limiter)
drivers/md/dm-vdo/data-vio.c
1029
vdo_log_info("%s: %u of %u busy (max %u), %s", name, limiter->busy,
drivers/md/dm-vdo/data-vio.c
1030
limiter->limit, limiter->max_busy,
drivers/md/dm-vdo/data-vio.c
1031
((bio_list_empty(&limiter->waiters) &&
drivers/md/dm-vdo/data-vio.c
1032
bio_list_empty(&limiter->new_waiters)) ?
drivers/md/dm-vdo/data-vio.c
1054
dump_limiter("data_vios", &pool->limiter);
drivers/md/dm-vdo/data-vio.c
1060
for (i = 0; i < pool->limiter.limit; i++) {
drivers/md/dm-vdo/data-vio.c
1081
return READ_ONCE(pool->limiter.busy);
drivers/md/dm-vdo/data-vio.c
1086
return READ_ONCE(pool->limiter.limit);
drivers/md/dm-vdo/data-vio.c
1091
return READ_ONCE(pool->limiter.max_busy);
drivers/md/dm-vdo/data-vio.c
124
struct limiter;
drivers/md/dm-vdo/data-vio.c
125
typedef void (*assigner_fn)(struct limiter *limiter);
drivers/md/dm-vdo/data-vio.c
167
struct limiter limiter;
drivers/md/dm-vdo/data-vio.c
169
struct limiter discard_limiter;
drivers/md/dm-vdo/data-vio.c
234
if (pool->limiter.busy > 0)
drivers/md/dm-vdo/data-vio.c
240
return (bio_list_empty(&pool->limiter.new_waiters) &&
drivers/md/dm-vdo/data-vio.c
579
static void assign_data_vio(struct limiter *limiter, struct data_vio *data_vio)
drivers/md/dm-vdo/data-vio.c
581
struct bio *bio = bio_list_pop(limiter->permitted_waiters);
drivers/md/dm-vdo/data-vio.c
583
launch_bio(limiter->pool->completion.vdo, data_vio, bio);
drivers/md/dm-vdo/data-vio.c
584
limiter->wake_count++;
drivers/md/dm-vdo/data-vio.c
586
bio = bio_list_peek(limiter->permitted_waiters);
drivers/md/dm-vdo/data-vio.c
587
limiter->arrival = ((bio == NULL) ? U64_MAX : get_arrival_time(bio));
drivers/md/dm-vdo/data-vio.c
590
static void assign_discard_permit(struct limiter *limiter)
drivers/md/dm-vdo/data-vio.c
592
struct bio *bio = bio_list_pop(&limiter->waiters);
drivers/md/dm-vdo/data-vio.c
594
if (limiter->arrival == U64_MAX)
drivers/md/dm-vdo/data-vio.c
595
limiter->arrival = get_arrival_time(bio);
drivers/md/dm-vdo/data-vio.c
597
bio_list_add(limiter->permitted_waiters, bio);
drivers/md/dm-vdo/data-vio.c
600
static void get_waiters(struct limiter *limiter)
drivers/md/dm-vdo/data-vio.c
602
bio_list_merge_init(&limiter->waiters, &limiter->new_waiters);
drivers/md/dm-vdo/data-vio.c
614
static void assign_data_vio_to_waiter(struct limiter *limiter)
drivers/md/dm-vdo/data-vio.c
616
assign_data_vio(limiter, get_available_data_vio(limiter->pool));
drivers/md/dm-vdo/data-vio.c
619
static void update_limiter(struct limiter *limiter)
drivers/md/dm-vdo/data-vio.c
621
struct bio_list *waiters = &limiter->waiters;
drivers/md/dm-vdo/data-vio.c
622
data_vio_count_t available = limiter->limit - limiter->busy;
drivers/md/dm-vdo/data-vio.c
624
VDO_ASSERT_LOG_ONLY((limiter->release_count <= limiter->busy),
drivers/md/dm-vdo/data-vio.c
626
limiter->release_count, limiter->busy);
drivers/md/dm-vdo/data-vio.c
628
get_waiters(limiter);
drivers/md/dm-vdo/data-vio.c
629
for (; (limiter->release_count > 0) && !bio_list_empty(waiters); limiter->release_count--)
drivers/md/dm-vdo/data-vio.c
630
limiter->assigner(limiter);
drivers/md/dm-vdo/data-vio.c
632
if (limiter->release_count > 0) {
drivers/md/dm-vdo/data-vio.c
633
WRITE_ONCE(limiter->busy, limiter->busy - limiter->release_count);
drivers/md/dm-vdo/data-vio.c
634
limiter->release_count = 0;
drivers/md/dm-vdo/data-vio.c
639
limiter->assigner(limiter);
drivers/md/dm-vdo/data-vio.c
641
WRITE_ONCE(limiter->busy, limiter->limit - available);
drivers/md/dm-vdo/data-vio.c
642
if (limiter->max_busy < limiter->busy)
drivers/md/dm-vdo/data-vio.c
643
WRITE_ONCE(limiter->max_busy, limiter->busy);
drivers/md/dm-vdo/data-vio.c
678
if (pool->limiter.arrival < pool->discard_limiter.arrival) {
drivers/md/dm-vdo/data-vio.c
679
assign_data_vio(&pool->limiter, data_vio);
drivers/md/dm-vdo/data-vio.c
684
pool->limiter.release_count++;
drivers/md/dm-vdo/data-vio.c
704
get_waiters(&pool->limiter);
drivers/md/dm-vdo/data-vio.c
707
if (pool->limiter.arrival == U64_MAX) {
drivers/md/dm-vdo/data-vio.c
708
struct bio *bio = bio_list_peek(&pool->limiter.waiters);
drivers/md/dm-vdo/data-vio.c
711
pool->limiter.arrival = get_arrival_time(bio);
drivers/md/dm-vdo/data-vio.c
736
update_limiter(&pool->limiter);
drivers/md/dm-vdo/data-vio.c
737
to_wake = pool->limiter.wake_count;
drivers/md/dm-vdo/data-vio.c
738
pool->limiter.wake_count = 0;
drivers/md/dm-vdo/data-vio.c
753
wake_up_nr(&pool->limiter.blocked_threads, to_wake);
drivers/md/dm-vdo/data-vio.c
764
static void initialize_limiter(struct limiter *limiter, struct data_vio_pool *pool,
drivers/md/dm-vdo/data-vio.c
767
limiter->pool = pool;
drivers/md/dm-vdo/data-vio.c
768
limiter->assigner = assigner;
drivers/md/dm-vdo/data-vio.c
769
limiter->limit = limit;
drivers/md/dm-vdo/data-vio.c
770
limiter->arrival = U64_MAX;
drivers/md/dm-vdo/data-vio.c
771
init_waitqueue_head(&limiter->blocked_threads);
drivers/md/dm-vdo/data-vio.c
854
initialize_limiter(&pool->limiter, pool, assign_data_vio_to_waiter, pool_size);
drivers/md/dm-vdo/data-vio.c
855
pool->limiter.permitted_waiters = &pool->limiter.waiters;
drivers/md/dm-vdo/data-vio.c
908
VDO_ASSERT_LOG_ONLY((pool->limiter.busy == 0),
drivers/md/dm-vdo/data-vio.c
910
pool->limiter.busy);
drivers/md/dm-vdo/data-vio.c
911
VDO_ASSERT_LOG_ONLY((bio_list_empty(&pool->limiter.waiters) &&
drivers/md/dm-vdo/data-vio.c
912
bio_list_empty(&pool->limiter.new_waiters)),
drivers/md/dm-vdo/data-vio.c
928
static bool acquire_permit(struct limiter *limiter)
drivers/md/dm-vdo/data-vio.c
930
if (limiter->busy >= limiter->limit)
drivers/md/dm-vdo/data-vio.c
933
WRITE_ONCE(limiter->busy, limiter->busy + 1);
drivers/md/dm-vdo/data-vio.c
934
if (limiter->max_busy < limiter->busy)
drivers/md/dm-vdo/data-vio.c
935
WRITE_ONCE(limiter->max_busy, limiter->busy);
drivers/md/dm-vdo/data-vio.c
939
static void wait_permit(struct limiter *limiter, struct bio *bio)
drivers/md/dm-vdo/data-vio.c
940
__releases(&limiter->pool->lock)
drivers/md/dm-vdo/data-vio.c
944
bio_list_add(&limiter->new_waiters, bio);
drivers/md/dm-vdo/data-vio.c
945
prepare_to_wait_exclusive(&limiter->blocked_threads, &wait,
drivers/md/dm-vdo/data-vio.c
947
spin_unlock(&limiter->pool->lock);
drivers/md/dm-vdo/data-vio.c
949
finish_wait(&limiter->blocked_threads, &wait);
drivers/md/dm-vdo/data-vio.c
974
if (!acquire_permit(&pool->limiter)) {
drivers/md/dm-vdo/data-vio.c
975
wait_permit(&pool->limiter, bio);
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c
197
__le32 limiter;
net/rxrpc/call_object.c
266
struct semaphore *limiter = &rxrpc_call_limiter;
net/rxrpc/call_object.c
269
limiter = &rxrpc_kernel_call_limiter;
net/rxrpc/call_object.c
271
down(limiter);
net/rxrpc/call_object.c
272
return limiter;
net/rxrpc/call_object.c
274
return down_interruptible(limiter) < 0 ? NULL : limiter;
net/rxrpc/call_object.c
282
struct semaphore *limiter = &rxrpc_call_limiter;
net/rxrpc/call_object.c
285
limiter = &rxrpc_kernel_call_limiter;
net/rxrpc/call_object.c
286
up(limiter);
net/rxrpc/call_object.c
333
struct semaphore *limiter;
net/rxrpc/call_object.c
344
limiter = rxrpc_get_call_slot(p, gfp);
net/rxrpc/call_object.c
345
if (!limiter) {
net/rxrpc/call_object.c
353
up(limiter);