Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.14-rc5 58 lines 1.4 kB view raw
1#include <linux/kernel.h> 2#include <linux/module.h> 3#include <linux/init.h> 4#include <linux/blkdev.h> 5#include <linux/list.h> 6#include <linux/llist.h> 7#include <linux/smp.h> 8#include <linux/cpu.h> 9 10#include <linux/blk-mq.h> 11#include "blk-mq.h" 12 13static LIST_HEAD(blk_mq_cpu_notify_list); 14static DEFINE_SPINLOCK(blk_mq_cpu_notify_lock); 15 16static int blk_mq_main_cpu_notify(struct notifier_block *self, 17 unsigned long action, void *hcpu) 18{ 19 unsigned int cpu = (unsigned long) hcpu; 20 struct blk_mq_cpu_notifier *notify; 21 22 spin_lock(&blk_mq_cpu_notify_lock); 23 24 list_for_each_entry(notify, &blk_mq_cpu_notify_list, list) 25 notify->notify(notify->data, action, cpu); 26 27 spin_unlock(&blk_mq_cpu_notify_lock); 28 return NOTIFY_OK; 29} 30 31void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier) 32{ 33 BUG_ON(!notifier->notify); 34 35 spin_lock(&blk_mq_cpu_notify_lock); 36 list_add_tail(&notifier->list, &blk_mq_cpu_notify_list); 37 spin_unlock(&blk_mq_cpu_notify_lock); 38} 39 40void blk_mq_unregister_cpu_notifier(struct blk_mq_cpu_notifier *notifier) 41{ 42 spin_lock(&blk_mq_cpu_notify_lock); 43 list_del(&notifier->list); 44 spin_unlock(&blk_mq_cpu_notify_lock); 45} 46 47void blk_mq_init_cpu_notifier(struct blk_mq_cpu_notifier *notifier, 48 void (*fn)(void *, unsigned long, unsigned int), 49 void *data) 50{ 51 notifier->notify = fn; 52 notifier->data = data; 53} 54 55void __init blk_mq_cpu_init(void) 56{ 57 hotcpu_notifier(blk_mq_main_cpu_notify, 0); 58}