-void
-kranal_schedule_cqid (__u32 cqid)
-{
- kra_conn_t *conn;
- struct list_head *conns;
- struct list_head *tmp;
-
- conns = kranal_cqid2connlist(cqid);
-
- read_lock(&kranal_data.kra_global_lock);
-
- conn = kranal_cqid2conn_locked(cqid);
-
- if (conn == NULL)
- CWARN("no cqid %x\n", cqid);
- else
- kranal_schedule_conn(conn);
-
- read_unlock(&kranal_data.kra_global_lock);
-}
-
-void
-kranal_schedule_dev(kra_device_t *dev)
-{
- kra_conn_t *conn;
- struct list_head *conns;
- struct list_head *tmp;
- int i;
-
- /* Don't do this in IRQ context (servers may have 1000s of clients) */
- LASSERT (!in_interrupt());
-
- CWARN("Scheduling ALL conns on device %d\n", dev->rad_id);
-
- for (i = 0; i < kranal_data.kra_conn_hash_size; i++) {
-
- /* Drop the lock on each hash bucket to ensure we don't
- * block anyone for too long at IRQ priority on another CPU */
-
- read_lock(&kranal_data.kra_global_lock);
-
- conns = &kranal_data.kra_conns[i];
-
- list_for_each (tmp, conns) {
- conn = list_entry(tmp, kra_conn_t, rac_hashlist);
-
- if (conn->rac_device == dev)
- kranal_schedule_conn(conn);
- }
- read_unlock(&kranal_data.kra_global_lock);
- }
-}
-
-void
-kranal_tx_done (kra_tx_t *tx, int completion)
-{
- ptl_err_t ptlrc = (completion == 0) ? PTL_OK : PTL_FAIL;
- kra_device_t *dev;
- unsigned long flags;
- int i;
- RAP_RETURN rrc;
-
- LASSERT (!in_interrupt());
-
- switch (tx->tx_buftype) {
- default:
- LBUG();
-
- case RANAL_BUF_NONE:
- case RANAL_BUF_IMMEDIATE:
- case RANAL_BUF_PHYS_UNMAPPED:
- case RANAL_BUF_VIRT_UNMAPPED:
- break;
-
- case RANAL_BUF_PHYS_MAPPED:
- LASSERT (tx->tx_conn != NULL);
- dev = tx->tx_conn->rac_device;
- rrc = RapkDeregisterMemory(dev->rad_handle, NULL,
- dev->rad_ptag, &tx->tx_map_key);
- LASSERT (rrc == RAP_SUCCESS);
- break;
-
- case RANAL_BUF_VIRT_MAPPED:
- LASSERT (tx->tx_conn != NULL);
- dev = tx->tx_conn->rac_device;
- rrc = RapkDeregisterMemory(dev->rad_handle, tx->tx_buffer,
- dev->rad_ptag, &tx->tx_map_key);
- LASSERT (rrc == RAP_SUCCESS);
- break;
- }
-
- for (i = 0; i < 2; i++) {
- /* tx may have up to 2 libmsgs to finalise */
- if (tx->tx_libmsg[i] == NULL)
- continue;
-
- lib_finalize(&kranal_lib, NULL, tx->tx_libmsg[i], ptlrc);
- tx->tx_libmsg[i] = NULL;
- }
-
- tx->tx_buftype = RANAL_BUF_NONE;
- tx->tx_msg.ram_type = RANAL_MSG_NONE;
- tx->tx_conn = NULL;
-
- spin_lock_irqsave(&kranal_data.kra_tx_lock, flags);
-
- if (tx->tx_isnblk) {
- list_add_tail(&tx->tx_list, &kranal_data.kra_idle_nblk_txs);
- } else {
- list_add_tail(&tx->tx_list, &kranal_data.kra_idle_txs);
- wake_up(&kranal_data.kra_idle_tx_waitq);
- }
-
- spin_unlock_irqrestore(&kranal_data.kra_tx_lock, flags);
-}
-