Lines Matching full:user

41 static struct ipmi_recv_msg *ipmi_alloc_recv_msg(struct ipmi_user *user);
43 struct ipmi_user *user);
158 /* The default maximum number of message a user may have outstanding. */
162 "The most message a user may have outstanding.");
182 * The main "user" data structure.
194 /* The interface this user is bound to. */
206 struct ipmi_user *user; member
273 * but may be changed by the user.
317 /* Commands we got from the user that were invalid. */
323 /* Responses from the MC that were delivered to a user. */
326 /* Responses from the MC that were not delivered to a user. */
354 /* The response was delivered to the user. */
381 /* The response was delivered to the user. */
390 /* The command was delivered to the user. */
477 * Messages queued for deliver to the user.
564 * interface comes in with a NULL user, call this routine with
606 struct ipmi_user *user = container_of(ref, struct ipmi_user, refcount); in free_ipmi_user() local
609 owner = user->intf->owner; in free_ipmi_user()
610 kref_put(&user->intf->refcount, intf_free); in free_ipmi_user()
612 vfree(user); in free_ipmi_user()
615 static void release_ipmi_user(struct ipmi_user *user) in release_ipmi_user() argument
617 kref_put(&user->refcount, free_ipmi_user); in release_ipmi_user()
620 static struct ipmi_user *acquire_ipmi_user(struct ipmi_user *user) in acquire_ipmi_user() argument
622 if (!kref_get_unless_zero(&user->refcount)) in acquire_ipmi_user()
624 return user; in acquire_ipmi_user()
757 * keep things in order for the user. in ipmi_smi_watcher_register()
951 if (!msg->user) { in deliver_response()
970 * refcount to the user. in deliver_response()
1163 * We do this verification because the user can be deleted in intf_start_seq_timer()
1192 * We do this verification because the user can be deleted in intf_err_seq()
1215 struct ipmi_user **user) in ipmi_create_user() argument
1271 /* Note that each existing user holds a refcount to the interface. */ in ipmi_create_user()
1290 /* User wants pretimeouts, so make sure to watch for them. */ in ipmi_create_user()
1298 *user = new_user; in ipmi_create_user()
1328 static void _ipmi_destroy_user(struct ipmi_user *user) in _ipmi_destroy_user() argument
1330 struct ipmi_smi *intf = user->intf; in _ipmi_destroy_user()
1336 if (!refcount_dec_if_one(&user->destroyed)) in _ipmi_destroy_user()
1339 if (user->handler->shutdown) in _ipmi_destroy_user()
1340 user->handler->shutdown(user->handler_data); in _ipmi_destroy_user()
1342 if (user->handler->ipmi_watchdog_pretimeout) in _ipmi_destroy_user()
1345 if (user->gets_events) in _ipmi_destroy_user()
1348 /* Remove the user from the interface's list and sequence table. */ in _ipmi_destroy_user()
1349 list_del(&user->link); in _ipmi_destroy_user()
1355 && (intf->seq_table[i].recv_msg->user == user)) { in _ipmi_destroy_user()
1364 * Remove the user from the command receiver's table. First in _ipmi_destroy_user()
1372 if (rcvr->user == user) { in _ipmi_destroy_user()
1387 if (msg->user != user) in _ipmi_destroy_user()
1394 release_ipmi_user(user); in _ipmi_destroy_user()
1397 void ipmi_destroy_user(struct ipmi_user *user) in ipmi_destroy_user() argument
1399 struct ipmi_smi *intf = user->intf; in ipmi_destroy_user()
1402 _ipmi_destroy_user(user); in ipmi_destroy_user()
1405 kref_put(&user->refcount, free_ipmi_user); in ipmi_destroy_user()
1409 int ipmi_get_version(struct ipmi_user *user, in ipmi_get_version() argument
1416 user = acquire_ipmi_user(user); in ipmi_get_version()
1417 if (!user) in ipmi_get_version()
1420 rv = bmc_get_device_id(user->intf, NULL, &id, NULL, NULL); in ipmi_get_version()
1425 release_ipmi_user(user); in ipmi_get_version()
1431 int ipmi_set_my_address(struct ipmi_user *user, in ipmi_set_my_address() argument
1437 user = acquire_ipmi_user(user); in ipmi_set_my_address()
1438 if (!user) in ipmi_set_my_address()
1445 user->intf->addrinfo[channel].address = address; in ipmi_set_my_address()
1447 release_ipmi_user(user); in ipmi_set_my_address()
1453 int ipmi_get_my_address(struct ipmi_user *user, in ipmi_get_my_address() argument
1459 user = acquire_ipmi_user(user); in ipmi_get_my_address()
1460 if (!user) in ipmi_get_my_address()
1467 *address = user->intf->addrinfo[channel].address; in ipmi_get_my_address()
1469 release_ipmi_user(user); in ipmi_get_my_address()
1475 int ipmi_set_my_LUN(struct ipmi_user *user, in ipmi_set_my_LUN() argument
1481 user = acquire_ipmi_user(user); in ipmi_set_my_LUN()
1482 if (!user) in ipmi_set_my_LUN()
1489 user->intf->addrinfo[channel].lun = LUN & 0x3; in ipmi_set_my_LUN()
1491 release_ipmi_user(user); in ipmi_set_my_LUN()
1497 int ipmi_get_my_LUN(struct ipmi_user *user, in ipmi_get_my_LUN() argument
1503 user = acquire_ipmi_user(user); in ipmi_get_my_LUN()
1504 if (!user) in ipmi_get_my_LUN()
1511 *address = user->intf->addrinfo[channel].lun; in ipmi_get_my_LUN()
1513 release_ipmi_user(user); in ipmi_get_my_LUN()
1519 int ipmi_get_maintenance_mode(struct ipmi_user *user) in ipmi_get_maintenance_mode() argument
1524 user = acquire_ipmi_user(user); in ipmi_get_maintenance_mode()
1525 if (!user) in ipmi_get_maintenance_mode()
1528 spin_lock_irqsave(&user->intf->maintenance_mode_lock, flags); in ipmi_get_maintenance_mode()
1529 mode = user->intf->maintenance_mode; in ipmi_get_maintenance_mode()
1530 spin_unlock_irqrestore(&user->intf->maintenance_mode_lock, flags); in ipmi_get_maintenance_mode()
1531 release_ipmi_user(user); in ipmi_get_maintenance_mode()
1551 int ipmi_set_maintenance_mode(struct ipmi_user *user, int mode) in ipmi_set_maintenance_mode() argument
1555 struct ipmi_smi *intf = user->intf; in ipmi_set_maintenance_mode()
1557 user = acquire_ipmi_user(user); in ipmi_set_maintenance_mode()
1558 if (!user) in ipmi_set_maintenance_mode()
1588 release_ipmi_user(user); in ipmi_set_maintenance_mode()
1594 int ipmi_set_gets_events(struct ipmi_user *user, bool val) in ipmi_set_gets_events() argument
1596 struct ipmi_smi *intf = user->intf; in ipmi_set_gets_events()
1600 user = acquire_ipmi_user(user); in ipmi_set_gets_events()
1601 if (!user) in ipmi_set_gets_events()
1607 if (user->gets_events == val) in ipmi_set_gets_events()
1610 user->gets_events = val; in ipmi_set_gets_events()
1620 while (user->gets_events && !list_empty(&intf->waiting_events)) { in ipmi_set_gets_events()
1630 ipmi_set_recv_msg_user(msg, user); in ipmi_set_gets_events()
1637 release_ipmi_user(user); in ipmi_set_gets_events()
1675 int ipmi_register_for_cmd(struct ipmi_user *user, in ipmi_register_for_cmd() argument
1680 struct ipmi_smi *intf = user->intf; in ipmi_register_for_cmd()
1684 user = acquire_ipmi_user(user); in ipmi_register_for_cmd()
1685 if (!user) in ipmi_register_for_cmd()
1696 rcvr->user = user; in ipmi_register_for_cmd()
1714 release_ipmi_user(user); in ipmi_register_for_cmd()
1720 int ipmi_unregister_for_cmd(struct ipmi_user *user, in ipmi_unregister_for_cmd() argument
1725 struct ipmi_smi *intf = user->intf; in ipmi_unregister_for_cmd()
1730 user = acquire_ipmi_user(user); in ipmi_unregister_for_cmd()
1731 if (!user) in ipmi_unregister_for_cmd()
1741 if (rcvr->user == user) { in ipmi_unregister_for_cmd()
1753 release_ipmi_user(user); in ipmi_unregister_for_cmd()
1926 * We don't let the user do these, since we manage in i_ipmi_req_sysintf()
2031 * It's a response, so use the user's sequence in i_ipmi_req_ipmb()
2208 * It's a response, so use the user's sequence in i_ipmi_req_lan()
2277 * Separate from ipmi_request so that the user does not have to be
2282 static int i_ipmi_request(struct ipmi_user *user, in i_ipmi_request() argument
2303 recv_msg->user = user; in i_ipmi_request()
2304 if (user) { in i_ipmi_request()
2305 atomic_inc(&user->nr_msgs); in i_ipmi_request()
2307 kref_get(&user->refcount); in i_ipmi_request()
2310 recv_msg = ipmi_alloc_recv_msg(user); in i_ipmi_request()
2396 int ipmi_request_settime(struct ipmi_user *user, in ipmi_request_settime() argument
2408 if (!user) in ipmi_request_settime()
2411 user = acquire_ipmi_user(user); in ipmi_request_settime()
2412 if (!user) in ipmi_request_settime()
2415 rv = check_addr(user->intf, addr, &saddr, &lun); in ipmi_request_settime()
2417 rv = i_ipmi_request(user, in ipmi_request_settime()
2418 user->intf, in ipmi_request_settime()
2430 release_ipmi_user(user); in ipmi_request_settime()
2435 int ipmi_request_supply_msgs(struct ipmi_user *user, in ipmi_request_supply_msgs() argument
2447 if (!user) in ipmi_request_supply_msgs()
2450 user = acquire_ipmi_user(user); in ipmi_request_supply_msgs()
2451 if (!user) in ipmi_request_supply_msgs()
2454 rv = check_addr(user->intf, addr, &saddr, &lun); in ipmi_request_supply_msgs()
2456 rv = i_ipmi_request(user, in ipmi_request_supply_msgs()
2457 user->intf, in ipmi_request_supply_msgs()
2469 release_ipmi_user(user); in ipmi_request_supply_msgs()
3496 void ipmi_poll_interface(struct ipmi_user *user) in ipmi_poll_interface() argument
3498 ipmi_poll(user->intf); in ipmi_poll_interface()
3519 struct ipmi_user *user; in nr_msgs_show() local
3523 list_for_each_entry(user, &intf->users, link) in nr_msgs_show()
3524 count += atomic_read(&user->nr_msgs); in nr_msgs_show()
3810 struct ipmi_user *user = list_first_entry(&intf->users, in ipmi_unregister_smi() local
3813 _ipmi_destroy_user(user); in ipmi_unregister_smi()
3896 struct ipmi_user *user = NULL; in handle_ipmb_get_msg_cmd() local
3918 user = rcvr->user; in handle_ipmb_get_msg_cmd()
3919 recv_msg = ipmi_alloc_recv_msg(user); in handle_ipmb_get_msg_cmd()
3923 if (user == NULL) { in handle_ipmb_get_msg_cmd()
3924 /* We didn't find a user, deliver an error response. */ in handle_ipmb_get_msg_cmd()
3995 struct ipmi_user *user = NULL; in handle_ipmb_direct_rcv_cmd() local
4005 user = rcvr->user; in handle_ipmb_direct_rcv_cmd()
4006 recv_msg = ipmi_alloc_recv_msg(user); in handle_ipmb_direct_rcv_cmd()
4010 if (user == NULL) { in handle_ipmb_direct_rcv_cmd()
4011 /* We didn't find a user, deliver an error response. */ in handle_ipmb_direct_rcv_cmd()
4172 struct ipmi_user *user = NULL; in handle_lan_get_msg_cmd() local
4194 user = rcvr->user; in handle_lan_get_msg_cmd()
4195 recv_msg = ipmi_alloc_recv_msg(user); in handle_lan_get_msg_cmd()
4199 if (user == NULL) { in handle_lan_get_msg_cmd()
4200 /* We didn't find a user, just give up and return an error. */ in handle_lan_get_msg_cmd()
4284 struct ipmi_user *user = NULL; in handle_oem_get_msg_cmd() local
4314 user = rcvr->user; in handle_oem_get_msg_cmd()
4315 recv_msg = ipmi_alloc_recv_msg(user); in handle_oem_get_msg_cmd()
4319 if (user == NULL) { in handle_oem_get_msg_cmd()
4320 /* We didn't find a user, just give up. */ in handle_oem_get_msg_cmd()
4393 struct ipmi_user *user; in handle_read_event_rsp() local
4414 * Allocate and fill in one message for every user that is in handle_read_event_rsp()
4418 list_for_each_entry(user, &intf->users, link) { in handle_read_event_rsp()
4419 if (!user->gets_events) in handle_read_event_rsp()
4422 recv_msg = ipmi_alloc_recv_msg(user); in handle_read_event_rsp()
4427 user = recv_msg->user; in handle_read_event_rsp()
4430 kref_put(&user->refcount, free_ipmi_user); in handle_read_event_rsp()
4639 * deliver a send message response to the user. in handle_one_recv_msg()
4862 struct ipmi_user *user; in smi_work() local
4865 list_for_each_entry(user, &intf->users, link) { in smi_work()
4866 if (user->handler->ipmi_watchdog_pretimeout) in smi_work()
4867 user->handler->ipmi_watchdog_pretimeout( in smi_work()
4868 user->handler_data); in smi_work()
4874 * Freeing the message can cause a user to be released, which in smi_work()
4882 struct ipmi_user *user = msg->user; in smi_work() local
4886 if (refcount_read(&user->destroyed) == 0) in smi_work()
4889 user->handler->ipmi_recv_hndl(msg, user->handler_data); in smi_work()
5207 static struct ipmi_recv_msg *ipmi_alloc_recv_msg(struct ipmi_user *user) in ipmi_alloc_recv_msg() argument
5211 if (user) { in ipmi_alloc_recv_msg()
5212 if (atomic_add_return(1, &user->nr_msgs) > max_msgs_per_user) { in ipmi_alloc_recv_msg()
5213 atomic_dec(&user->nr_msgs); in ipmi_alloc_recv_msg()
5220 if (user) in ipmi_alloc_recv_msg()
5221 atomic_dec(&user->nr_msgs); in ipmi_alloc_recv_msg()
5225 rv->user = user; in ipmi_alloc_recv_msg()
5227 if (user) in ipmi_alloc_recv_msg()
5228 kref_get(&user->refcount); in ipmi_alloc_recv_msg()
5235 if (msg->user && !oops_in_progress) { in ipmi_free_recv_msg()
5236 atomic_dec(&msg->user->nr_msgs); in ipmi_free_recv_msg()
5237 kref_put(&msg->user->refcount, free_ipmi_user); in ipmi_free_recv_msg()
5244 struct ipmi_user *user) in ipmi_set_recv_msg_user() argument
5246 WARN_ON_ONCE(msg->user); /* User should not be set. */ in ipmi_set_recv_msg_user()
5247 msg->user = user; in ipmi_set_recv_msg_user()
5248 atomic_inc(&user->nr_msgs); in ipmi_set_recv_msg_user()
5249 kref_get(&user->refcount); in ipmi_set_recv_msg_user()
5299 void ipmi_panic_request_and_wait(struct ipmi_user *user, in ipmi_panic_request_and_wait() argument
5303 user->intf->run_to_completion = 1; in ipmi_panic_request_and_wait()
5304 _ipmi_panic_request_and_wait(user->intf, addr, msg); in ipmi_panic_request_and_wait()
5484 struct ipmi_user *user; in panic_event() local
5521 list_for_each_entry(user, &intf->users, link) { in panic_event()
5522 if (user->handler->ipmi_panic_handler) in panic_event()
5523 user->handler->ipmi_panic_handler( in panic_event()
5524 user->handler_data); in panic_event()