51 static unsigned int rdsv3_exthdr_size[__RDSV3_EXTHDR_MAX] = {
52 [RDSV3_EXTHDR_NONE] = 0,
53 [RDSV3_EXTHDR_VERSION] = sizeof (struct rdsv3_ext_header_version),
54 [RDSV3_EXTHDR_RDMA] = sizeof (struct rdsv3_ext_header_rdma),
55 [RDSV3_EXTHDR_RDMA_DEST] = sizeof (struct rdsv3_ext_header_rdma_dest),
56 };
57 #else
58 static unsigned int rdsv3_exthdr_size[__RDSV3_EXTHDR_MAX] = {
59 0,
60 sizeof (struct rdsv3_ext_header_version),
61 sizeof (struct rdsv3_ext_header_rdma),
62 sizeof (struct rdsv3_ext_header_rdma_dest),
63 };
64 #endif
65
66 void
67 rdsv3_message_addref(struct rdsv3_message *rm)
68 {
69 RDSV3_DPRINTF5("rdsv3_message_addref", "addref rm %p ref %d",
70 rm, atomic_get(&rm->m_refcount));
71 atomic_add_32(&rm->m_refcount, 1);
72 }
73
74 /*
75 * This relies on dma_map_sg() not touching sg[].page during merging.
76 */
77 static void
78 rdsv3_message_purge(struct rdsv3_message *rm)
79 {
80 unsigned long i;
81
82 RDSV3_DPRINTF4("rdsv3_message_purge", "Enter(rm: %p)", rm);
83
84 if (test_bit(RDSV3_MSG_PAGEVEC, &rm->m_flags))
85 return;
86
87 for (i = 0; i < rm->m_nents; i++) {
88 RDSV3_DPRINTF5("rdsv3_message_purge", "putting data page %p\n",
89 (void *)rdsv3_sg_page(&rm->m_sg[i]));
90 /* XXX will have to put_page for page refs */
91 kmem_free(rdsv3_sg_page(&rm->m_sg[i]),
|
51 static unsigned int rdsv3_exthdr_size[__RDSV3_EXTHDR_MAX] = {
52 [RDSV3_EXTHDR_NONE] = 0,
53 [RDSV3_EXTHDR_VERSION] = sizeof (struct rdsv3_ext_header_version),
54 [RDSV3_EXTHDR_RDMA] = sizeof (struct rdsv3_ext_header_rdma),
55 [RDSV3_EXTHDR_RDMA_DEST] = sizeof (struct rdsv3_ext_header_rdma_dest),
56 };
57 #else
58 static unsigned int rdsv3_exthdr_size[__RDSV3_EXTHDR_MAX] = {
59 0,
60 sizeof (struct rdsv3_ext_header_version),
61 sizeof (struct rdsv3_ext_header_rdma),
62 sizeof (struct rdsv3_ext_header_rdma_dest),
63 };
64 #endif
65
66 void
67 rdsv3_message_addref(struct rdsv3_message *rm)
68 {
69 RDSV3_DPRINTF5("rdsv3_message_addref", "addref rm %p ref %d",
70 rm, atomic_get(&rm->m_refcount));
71 atomic_inc_32(&rm->m_refcount);
72 }
73
74 /*
75 * This relies on dma_map_sg() not touching sg[].page during merging.
76 */
77 static void
78 rdsv3_message_purge(struct rdsv3_message *rm)
79 {
80 unsigned long i;
81
82 RDSV3_DPRINTF4("rdsv3_message_purge", "Enter(rm: %p)", rm);
83
84 if (test_bit(RDSV3_MSG_PAGEVEC, &rm->m_flags))
85 return;
86
87 for (i = 0; i < rm->m_nents; i++) {
88 RDSV3_DPRINTF5("rdsv3_message_purge", "putting data page %p\n",
89 (void *)rdsv3_sg_page(&rm->m_sg[i]));
90 /* XXX will have to put_page for page refs */
91 kmem_free(rdsv3_sg_page(&rm->m_sg[i]),
|