Defined in 1 files as a function:

Referenced in 4 files:

Smatch caller information:

net/smc/smc_tx.c smc_link_sendable() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 1-u64max
DATA_SOURCE 0 lnk $0
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
UNITS 0 lnk unit_byte
HALF_LOCKED2 sk

net/smc/smc_cdc.c smc_link_sendable() -> smc_link_usable()

Type Parameter Key Value
DATA_SOURCE 0 lnk $0
RX_PATH
TASK_NOT_RUNNING
UNITS 0 lnk unit_byte
HALF_LOCKED2 sk

net/smc/smc_wr.c smc_link_sendable() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
DATA_SOURCE 0 lnk $0
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
NO_OVERFLOW_SIMPLE 0 lnk->max_recv_wr
NO_OVERFLOW_SIMPLE 0 lnk->max_send_wr
NO_OVERFLOW_SIMPLE 0 lnk->roce_pd->device->hw_stats_attr_index
NO_OVERFLOW_SIMPLE 0 lnk->roce_pd->device->num_comp_vectors
NO_OVERFLOW_SIMPLE 0 lnk->roce_pd->device->phys_port_cnt
NO_OVERFLOW_SIMPLE 0 lnk->wr_rx_buflen
UNITS 0 lnk unit_byte
HALF_LOCKED2 0 &lnk->lgr->llc_conf_mutex

net/smc/smc_llc.c smc_link_sendable() -> smc_link_usable()

Type Parameter Key Value
DATA_SOURCE 0 lnk $0
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
NO_OVERFLOW_SIMPLE 0 lnk->max_recv_wr
NO_OVERFLOW_SIMPLE 0 lnk->max_send_wr
NO_OVERFLOW_SIMPLE 0 lnk->roce_pd->device->hw_stats_attr_index
NO_OVERFLOW_SIMPLE 0 lnk->roce_pd->device->num_comp_vectors
NO_OVERFLOW_SIMPLE 0 lnk->roce_pd->device->phys_port_cnt
NO_OVERFLOW_SIMPLE 0 lnk->wr_rx_buflen
UNITS 0 lnk unit_byte
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 0 &lnk->lgr->llc_conf_mutex

net/smc/smc_llc.c smc_llc_event_handler() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
UNITS 0 lnk unit_byte
HALF_LOCKED2 &pool->lock

net/smc/smc_llc.c smc_llc_event_work() -> smc_link_usable()

Type Parameter Key Value
UNITS 0 lnk unit_byte
HALF_LOCKED2 &pool->lock

net/smc/smc_llc.c smc_llc_find_asym_link() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
LOCK2 &lgr->llc_conf_mutex
HALF_LOCKED2 &pool->lock
TYPE_LOCK (struct smc_link_group)->llc_conf_mutex

net/smc/smc_llc.c smc_llc_find_asym_link() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
LOCK2 &lgr->llc_conf_mutex
HALF_LOCKED2 &pool->lock
TYPE_LOCK (struct smc_link_group)->llc_conf_mutex

net/smc/smc_llc.c smc_llc_find_asym_link() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
LOCK2 &lgr->llc_conf_mutex
HALF_LOCKED2 &pool->lock
TYPE_LOCK (struct smc_link_group)->llc_conf_mutex

net/smc/smc_llc.c smc_llc_usable_link() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
RX_PATH
TASK_NOT_RUNNING
LOCK2 &lgr->llc_conf_mutex
HALF_LOCKED2 &pool->lock
TYPE_LOCK (struct smc_link_group)->llc_conf_mutex

net/smc/smc_llc.c smc_llc_wait() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
CAPPED_DATA 0 lnk 1
DATA_SOURCE 0 lnk $1
RX_PATH
TASK_NOT_RUNNING
UNITS 0 lnk unit_byte
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &lgr->rmbs_lock
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 &smc->sk
HALF_LOCKED2 global &smc_server_lgr_pending
HALF_LOCKED2 0 &lnk->lgr->llc_conf_mutex

net/smc/smc_llc.c smc_llc_wait() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
PARAM_VALUE 0 lnk->state 2-u32max
CAPPED_DATA 0 lnk 1
DATA_SOURCE 0 lnk $1
RX_PATH
TASK_NOT_RUNNING
UNITS 0 lnk unit_byte
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &lgr->rmbs_lock
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 &smc->sk
HALF_LOCKED2 global &smc_server_lgr_pending
HALF_LOCKED2 0 &lnk->lgr->llc_conf_mutex

net/smc/smc_llc.c smc_llc_wait() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
PARAM_VALUE 0 lnk->state 2-u32max
CAPPED_DATA 0 lnk 1
DATA_SOURCE 0 lnk $1
RX_PATH
TASK_NOT_RUNNING
UNITS 0 lnk unit_byte
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &lgr->rmbs_lock
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 &smc->sk
HALF_LOCKED2 global &smc_server_lgr_pending
HALF_LOCKED2 0 &lnk->lgr->llc_conf_mutex

net/smc/smc_llc.c smc_llc_wait() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
PARAM_VALUE 0 lnk->state 0-1
CAPPED_DATA 0 lnk 1
DATA_SOURCE 0 lnk $1
RX_PATH
TASK_NOT_RUNNING
UNITS 0 lnk unit_byte
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &lgr->rmbs_lock
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 &smc->sk
HALF_LOCKED2 global &smc_server_lgr_pending
HALF_LOCKED2 0 &lnk->lgr->llc_conf_mutex

net/smc/smc_core.c smc_link_sendable() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
DATA_SOURCE 0 lnk $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &pool->lock

net/smc/smc_core.c smc_llc_usable_link() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
PREEMPT_ADD
LOCK2 bh
LOCK2 global &smc_lgr_list.lock
HALF_LOCKED2 &pool->lock
TYPE_LOCK (struct smc_lgr_list)->lock

net/smc/smc_core.c smc_nl_handle_lgr() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
LOCK2 &smc_lgr->lock
LOCK2 bh
HALF_LOCKED2 &nlk->nl_cb_mutex
TYPE_LOCK (struct netlink_sock)->nl_cb_mutex
TYPE_LOCK (struct smc_lgr_list)->lock

net/smc/smc_core.c smcr_buf_map_usable_links() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
RX_PATH
TASK_NOT_RUNNING
LOCK2 &lgr->llc_conf_mutex
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 &smc->sk
HALF_LOCKED2 global &smc_client_lgr_pending
HALF_LOCKED2 global &smc_server_lgr_pending
TYPE_LOCK (struct smc_link_group)->llc_conf_mutex

net/smc/smc_core.c smcr_lgr_set_type() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &lgr->llc_conf_mutex
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 &smc->sk
HALF_LOCKED2 global &smc_client_lgr_pending
HALF_LOCKED2 global &smc_server_lgr_pending

net/smc/smc_core.c smcr_next_link_id() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &pool->lock

net/smc/smc_core.c smcr_port_err() -> smc_link_usable()

Type Parameter Key Value
PARAM_VALUE 0 lnk 4096-ptr_max
PREEMPT_ADD
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 bh
HALF_LOCKED2 global &smc_lgr_list.lock