X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fchar%2Fipmi%2Fipmi_msghandler.c;h=fe02300e621c657d1dea06b0d06bd7c336e147e1;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=4191db2900bd06b07f191d8ed121872f3c30dda5;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index 4191db290..fe02300e6 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -49,7 +49,7 @@ #define PFX "IPMI message handler: " #define IPMI_MSGHANDLER_VERSION "v33" -struct ipmi_recv_msg *ipmi_alloc_recv_msg(void); +static struct ipmi_recv_msg *ipmi_alloc_recv_msg(void); static int ipmi_init_msghandler(void); static int initialized = 0; @@ -294,44 +294,6 @@ struct ipmi_smi unsigned int events; }; -int -ipmi_register_all_cmd_rcvr(ipmi_user_t user) -{ - unsigned long flags; - int rv = -EBUSY; - - write_lock_irqsave(&(user->intf->users_lock), flags); - write_lock(&(user->intf->cmd_rcvr_lock)); - if ((user->intf->all_cmd_rcvr == NULL) - && (list_empty(&(user->intf->cmd_rcvrs)))) - { - user->intf->all_cmd_rcvr = user; - rv = 0; - } - write_unlock(&(user->intf->cmd_rcvr_lock)); - write_unlock_irqrestore(&(user->intf->users_lock), flags); - return rv; -} - -int -ipmi_unregister_all_cmd_rcvr(ipmi_user_t user) -{ - unsigned long flags; - int rv = -EINVAL; - - write_lock_irqsave(&(user->intf->users_lock), flags); - write_lock(&(user->intf->cmd_rcvr_lock)); - if (user->intf->all_cmd_rcvr == user) - { - user->intf->all_cmd_rcvr = NULL; - rv = 0; - } - write_unlock(&(user->intf->cmd_rcvr_lock)); - write_unlock_irqrestore(&(user->intf->users_lock), flags); - return rv; -} - - #define MAX_IPMI_INTERFACES 4 static ipmi_smi_t ipmi_interfaces[MAX_IPMI_INTERFACES]; @@ -342,7 +304,7 @@ static DECLARE_RWSEM(interfaces_sem); /* Directly protects the ipmi_interfaces data structure. This is claimed in the timer interrupt. */ -static spinlock_t interfaces_lock = SPIN_LOCK_UNLOCKED; +static DEFINE_SPINLOCK(interfaces_lock); /* List of watchers that want to know when smi's are added and deleted. */ @@ -389,7 +351,7 @@ call_smi_watchers(int i) up_read(&smi_watchers_sem); } -int +static int ipmi_addr_equal(struct ipmi_addr *addr1, struct ipmi_addr *addr2) { if (addr1->addr_type != addr2->addr_type) @@ -481,6 +443,9 @@ unsigned int ipmi_addr_length(int addr_type) return sizeof(struct ipmi_ipmb_addr); } + if (addr_type == IPMI_LAN_ADDR_TYPE) + return sizeof(struct ipmi_lan_addr); + return 0; } @@ -1360,26 +1325,6 @@ static inline int i_ipmi_request(ipmi_user_t user, return rv; } -int ipmi_request(ipmi_user_t user, - struct ipmi_addr *addr, - long msgid, - struct kernel_ipmi_msg *msg, - void *user_msg_data, - int priority) -{ - return i_ipmi_request(user, - user->intf, - addr, - msgid, - msg, - user_msg_data, - NULL, NULL, - priority, - user->intf->my_address, - user->intf->my_lun, - -1, 0); -} - int ipmi_request_settime(ipmi_user_t user, struct ipmi_addr *addr, long msgid, @@ -1426,28 +1371,6 @@ int ipmi_request_supply_msgs(ipmi_user_t user, -1, 0); } -int ipmi_request_with_source(ipmi_user_t user, - struct ipmi_addr *addr, - long msgid, - struct kernel_ipmi_msg *msg, - void *user_msg_data, - int priority, - unsigned char source_address, - unsigned char source_lun) -{ - return i_ipmi_request(user, - user->intf, - addr, - msgid, - msg, - user_msg_data, - NULL, NULL, - priority, - source_address, - source_lun, - -1, 0); -} - static int ipmb_file_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) { @@ -1702,14 +1625,6 @@ channel_handler(ipmi_smi_t intf, struct ipmi_smi_msg *msg) return; } -void ipmi_poll_interface(ipmi_user_t user) -{ - ipmi_smi_t intf = user->intf; - - if (intf->handlers->poll) - intf->handlers->poll(intf->send_info); -} - int ipmi_register_smi(struct ipmi_smi_handlers *handlers, void *send_info, unsigned char version_major, @@ -2389,12 +2304,17 @@ static int handle_bmc_rsp(ipmi_smi_t intf, if (!found) { /* Special handling for NULL users. */ - if (!recv_msg->user && intf->null_user_handler) + if (!recv_msg->user && intf->null_user_handler){ intf->null_user_handler(intf, msg); - /* The user for the message went away, so give up. */ - spin_lock_irqsave(&intf->counter_lock, flags); - intf->unhandled_local_responses++; - spin_unlock_irqrestore(&intf->counter_lock, flags); + spin_lock_irqsave(&intf->counter_lock, flags); + intf->handled_local_responses++; + spin_unlock_irqrestore(&intf->counter_lock, flags); + }else{ + /* The user for the message went away, so give up. */ + spin_lock_irqsave(&intf->counter_lock, flags); + intf->unhandled_local_responses++; + spin_unlock_irqrestore(&intf->counter_lock, flags); + } ipmi_free_recv_msg(recv_msg); } else { struct ipmi_system_interface_addr *smi_addr; @@ -3126,9 +3046,9 @@ static int panic_event(struct notifier_block *this, } static struct notifier_block panic_block = { - panic_event, - NULL, - 200 /* priority: INT_MAX >= x >= 0 */ + .notifier_call = panic_event, + .next = NULL, + .priority = 200 /* priority: INT_MAX >= x >= 0 */ }; static int ipmi_init_msghandler(void) @@ -3211,15 +3131,11 @@ module_exit(cleanup_ipmi); module_init(ipmi_init_msghandler_mod); MODULE_LICENSE("GPL"); -EXPORT_SYMBOL(ipmi_alloc_recv_msg); EXPORT_SYMBOL(ipmi_create_user); EXPORT_SYMBOL(ipmi_destroy_user); EXPORT_SYMBOL(ipmi_get_version); -EXPORT_SYMBOL(ipmi_request); EXPORT_SYMBOL(ipmi_request_settime); EXPORT_SYMBOL(ipmi_request_supply_msgs); -EXPORT_SYMBOL(ipmi_request_with_source); -EXPORT_SYMBOL(ipmi_poll_interface); EXPORT_SYMBOL(ipmi_register_smi); EXPORT_SYMBOL(ipmi_unregister_smi); EXPORT_SYMBOL(ipmi_register_for_cmd); @@ -3227,12 +3143,9 @@ EXPORT_SYMBOL(ipmi_unregister_for_cmd); EXPORT_SYMBOL(ipmi_smi_msg_received); EXPORT_SYMBOL(ipmi_smi_watchdog_pretimeout); EXPORT_SYMBOL(ipmi_alloc_smi_msg); -EXPORT_SYMBOL(ipmi_register_all_cmd_rcvr); -EXPORT_SYMBOL(ipmi_unregister_all_cmd_rcvr); EXPORT_SYMBOL(ipmi_addr_length); EXPORT_SYMBOL(ipmi_validate_addr); EXPORT_SYMBOL(ipmi_set_gets_events); -EXPORT_SYMBOL(ipmi_addr_equal); EXPORT_SYMBOL(ipmi_smi_watcher_register); EXPORT_SYMBOL(ipmi_smi_watcher_unregister); EXPORT_SYMBOL(ipmi_set_my_address);