• Home
  • Raw
  • Download

Lines Matching +full:sync +full:- +full:token

1 // SPDX-License-Identifier: GPL-2.0-only
27 * rate-limit tunable for the "low" level notification, and also for
58 * prio <= DEF_PRIORITY - 2 : kswapd becomes somewhat overwhelmed
141 pressure = scale - (reclaimed * scale / scanned); in vmpressure_calc_level()
165 mutex_lock(&vmpr->events_lock); in vmpressure_event()
166 list_for_each_entry(ev, &vmpr->events, node) { in vmpressure_event()
167 if (ancestor && ev->mode == VMPRESSURE_LOCAL) in vmpressure_event()
169 if (signalled && ev->mode == VMPRESSURE_NO_PASSTHROUGH) in vmpressure_event()
171 if (level < ev->level) in vmpressure_event()
173 eventfd_signal(ev->efd, 1); in vmpressure_event()
176 mutex_unlock(&vmpr->events_lock); in vmpressure_event()
190 spin_lock(&vmpr->sr_lock); in vmpressure_work_fn()
197 * vmpr->reclaimed is in sync. in vmpressure_work_fn()
199 scanned = vmpr->tree_scanned; in vmpressure_work_fn()
201 spin_unlock(&vmpr->sr_lock); in vmpressure_work_fn()
205 reclaimed = vmpr->tree_reclaimed; in vmpressure_work_fn()
206 vmpr->tree_scanned = 0; in vmpressure_work_fn()
207 vmpr->tree_reclaimed = 0; in vmpressure_work_fn()
208 spin_unlock(&vmpr->sr_lock); in vmpressure_work_fn()
220 * vmpressure() - Account memory pressure through scanned/reclaimed ratio
236 * only in-kernel users are notified.
253 * Indirect reclaim (kswapd) sets sc->gfp_mask to GFP_KERNEL, so in vmpressure()
271 spin_lock(&vmpr->sr_lock); in vmpressure()
272 scanned = vmpr->tree_scanned += scanned; in vmpressure()
273 vmpr->tree_reclaimed += reclaimed; in vmpressure()
274 spin_unlock(&vmpr->sr_lock); in vmpressure()
278 schedule_work(&vmpr->work); in vmpressure()
282 /* For now, no users for root-level efficiency */ in vmpressure()
286 spin_lock(&vmpr->sr_lock); in vmpressure()
287 scanned = vmpr->scanned += scanned; in vmpressure()
288 reclaimed = vmpr->reclaimed += reclaimed; in vmpressure()
290 spin_unlock(&vmpr->sr_lock); in vmpressure()
293 vmpr->scanned = vmpr->reclaimed = 0; in vmpressure()
294 spin_unlock(&vmpr->sr_lock); in vmpressure()
307 memcg->socket_pressure = jiffies + HZ; in vmpressure()
313 * vmpressure_prio() - Account memory pressure through reclaimer priority level
345 * vmpressure_register_event() - Bind vmpressure notifications to an eventfd
352 * @eventfd. The @args parameter is a comma-delimited string that denotes a
359 * Return: 0 on success, -ENOMEM on memory failure or -EINVAL if @args could
370 char *token; in vmpressure_register_event() local
375 return -ENOMEM; in vmpressure_register_event()
378 token = strsep(&spec, ","); in vmpressure_register_event()
379 ret = match_string(vmpressure_str_levels, VMPRESSURE_NUM_LEVELS, token); in vmpressure_register_event()
385 token = strsep(&spec, ","); in vmpressure_register_event()
386 if (token) { in vmpressure_register_event()
387 ret = match_string(vmpressure_str_modes, VMPRESSURE_NUM_MODES, token); in vmpressure_register_event()
395 ret = -ENOMEM; in vmpressure_register_event()
399 ev->efd = eventfd; in vmpressure_register_event()
400 ev->level = level; in vmpressure_register_event()
401 ev->mode = mode; in vmpressure_register_event()
403 mutex_lock(&vmpr->events_lock); in vmpressure_register_event()
404 list_add(&ev->node, &vmpr->events); in vmpressure_register_event()
405 mutex_unlock(&vmpr->events_lock); in vmpressure_register_event()
413 * vmpressure_unregister_event() - Unbind eventfd from vmpressure
429 mutex_lock(&vmpr->events_lock); in vmpressure_unregister_event()
430 list_for_each_entry(ev, &vmpr->events, node) { in vmpressure_unregister_event()
431 if (ev->efd != eventfd) in vmpressure_unregister_event()
433 list_del(&ev->node); in vmpressure_unregister_event()
437 mutex_unlock(&vmpr->events_lock); in vmpressure_unregister_event()
441 * vmpressure_init() - Initialize vmpressure control structure
449 spin_lock_init(&vmpr->sr_lock); in vmpressure_init()
450 mutex_init(&vmpr->events_lock); in vmpressure_init()
451 INIT_LIST_HEAD(&vmpr->events); in vmpressure_init()
452 INIT_WORK(&vmpr->work, vmpressure_work_fn); in vmpressure_init()
456 * vmpressure_cleanup() - shuts down vmpressure control structure
468 flush_work(&vmpr->work); in vmpressure_cleanup()