pvpanic.c (cc5b392d0f94f27743583140d819fa35a46899db) | pvpanic.c (84b0f12a953c4feff9994b1c4583ed18b441f482) |
---|---|
1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Pvpanic Device Support 4 * 5 * Copyright (C) 2013 Fujitsu. 6 * Copyright (C) 2018 ZTE. 7 * Copyright (C) 2021 Oracle. 8 */ --- 9 unchanged lines hidden (view full) --- 18#include <linux/cdev.h> 19#include <linux/list.h> 20 21#include <uapi/misc/pvpanic.h> 22 23#include "pvpanic.h" 24 25MODULE_AUTHOR("Mihai Carabas <mihai.carabas@oracle.com>"); | 1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Pvpanic Device Support 4 * 5 * Copyright (C) 2013 Fujitsu. 6 * Copyright (C) 2018 ZTE. 7 * Copyright (C) 2021 Oracle. 8 */ --- 9 unchanged lines hidden (view full) --- 18#include <linux/cdev.h> 19#include <linux/list.h> 20 21#include <uapi/misc/pvpanic.h> 22 23#include "pvpanic.h" 24 25MODULE_AUTHOR("Mihai Carabas <mihai.carabas@oracle.com>"); |
26MODULE_DESCRIPTION("pvpanic device driver "); | 26MODULE_DESCRIPTION("pvpanic device driver"); |
27MODULE_LICENSE("GPL"); 28 29static struct list_head pvpanic_list; 30static spinlock_t pvpanic_lock; 31 32static void 33pvpanic_send_event(unsigned int event) 34{ 35 struct pvpanic_instance *pi_cur; 36 37 spin_lock(&pvpanic_lock); 38 list_for_each_entry(pi_cur, &pvpanic_list, list) { 39 if (event & pi_cur->capability & pi_cur->events) 40 iowrite8(event, pi_cur->base); 41 } 42 spin_unlock(&pvpanic_lock); 43} 44 45static int | 27MODULE_LICENSE("GPL"); 28 29static struct list_head pvpanic_list; 30static spinlock_t pvpanic_lock; 31 32static void 33pvpanic_send_event(unsigned int event) 34{ 35 struct pvpanic_instance *pi_cur; 36 37 spin_lock(&pvpanic_lock); 38 list_for_each_entry(pi_cur, &pvpanic_list, list) { 39 if (event & pi_cur->capability & pi_cur->events) 40 iowrite8(event, pi_cur->base); 41 } 42 spin_unlock(&pvpanic_lock); 43} 44 45static int |
46pvpanic_panic_notify(struct notifier_block *nb, unsigned long code, 47 void *unused) | 46pvpanic_panic_notify(struct notifier_block *nb, unsigned long code, void *unused) |
48{ 49 unsigned int event = PVPANIC_PANICKED; 50 51 if (kexec_crash_loaded()) 52 event = PVPANIC_CRASH_LOADED; 53 54 pvpanic_send_event(event); 55 --- 35 unchanged lines hidden (view full) --- 91} 92EXPORT_SYMBOL_GPL(devm_pvpanic_probe); 93 94static int pvpanic_init(void) 95{ 96 INIT_LIST_HEAD(&pvpanic_list); 97 spin_lock_init(&pvpanic_lock); 98 | 47{ 48 unsigned int event = PVPANIC_PANICKED; 49 50 if (kexec_crash_loaded()) 51 event = PVPANIC_CRASH_LOADED; 52 53 pvpanic_send_event(event); 54 --- 35 unchanged lines hidden (view full) --- 90} 91EXPORT_SYMBOL_GPL(devm_pvpanic_probe); 92 93static int pvpanic_init(void) 94{ 95 INIT_LIST_HEAD(&pvpanic_list); 96 spin_lock_init(&pvpanic_lock); 97 |
99 atomic_notifier_chain_register(&panic_notifier_list, 100 &pvpanic_panic_nb); | 98 atomic_notifier_chain_register(&panic_notifier_list, &pvpanic_panic_nb); |
101 102 return 0; 103} 104module_init(pvpanic_init); 105 106static void pvpanic_exit(void) 107{ | 99 100 return 0; 101} 102module_init(pvpanic_init); 103 104static void pvpanic_exit(void) 105{ |
108 atomic_notifier_chain_unregister(&panic_notifier_list, 109 &pvpanic_panic_nb); | 106 atomic_notifier_chain_unregister(&panic_notifier_list, &pvpanic_panic_nb); |
110 111} 112module_exit(pvpanic_exit); | 107 108} 109module_exit(pvpanic_exit); |