Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


  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]),