/* sdp_cma.c */
int sdp_cma_handler(struct rdma_cm_id *, struct rdma_cm_event *);
-/* sdp_bcopy.c */
-int sdp_post_credits(struct sdp_sock *ssk);
-
/* sdp_tx.c */
int sdp_tx_ring_create(struct sdp_sock *ssk, struct ib_device *device);
void sdp_tx_ring_destroy(struct sdp_sock *ssk);
mod_timer(&ssk->nagle_timer, jiffies + SDP_NAGLE_TIMEOUT);
}
-int sdp_post_credits(struct sdp_sock *ssk)
-{
- int post_count = 0;
-
- sdp_dbg_data(&ssk->isk.sk, "credits: %d remote credits: %d "
- "tx ring slots left: %d send_head: %p\n",
- tx_credits(ssk), remote_credits(ssk),
- sdp_tx_ring_slots_left(&ssk->tx_ring),
- ssk->isk.sk.sk_send_head);
-
- if (likely(tx_credits(ssk) > 1) &&
- likely(sdp_tx_ring_slots_left(&ssk->tx_ring))) {
- struct sk_buff *skb;
- skb = sdp_stream_alloc_skb(&ssk->isk.sk,
- sizeof(struct sdp_bsdh),
- GFP_KERNEL);
- if (!skb)
- return -ENOMEM;
- sdp_post_send(ssk, skb, SDP_MID_DATA);
- post_count++;
- }
-
- if (post_count)
- sdp_xmit_poll(ssk, 0);
- return post_count;
-}
-
void sdp_post_sends(struct sdp_sock *ssk, int nonagle)
{
/* TODO: nonagle? */
ring_posted(sdp_sk(child)->rx_ring));
memset(&hah, 0, sizeof hah);
hah.bsdh.mid = SDP_MID_HELLO_ACK;
- hah.bsdh.bufs = htons(remote_credits(sdp_sk(child)));
+ hah.bsdh.bufs = htons(ring_posted(sdp_sk(child)->rx_ring));
hah.bsdh.len = htonl(sizeof(struct sdp_bsdh) + SDP_HAH_SIZE);
hah.majv_minv = SDP_MAJV_MINV;
hah.ext_max_adverts = 1; /* Doesn't seem to be mandated by spec,
rdma_reject(id, NULL, 0);
else
rc = rdma_accept(id, NULL);
-
- if (!rc)
- rc = sdp_post_credits(sdp_sk(sk)) < 0 ?: 0;
break;
case RDMA_CM_EVENT_CONNECT_ERROR:
sdp_dbg(sk, "RDMA_CM_EVENT_CONNECT_ERROR\n");