| 124 | } |
| 125 | |
| 126 | struct rte_mempool * |
| 127 | rte_comp_op_pool_create(const char *name, |
| 128 | unsigned int nb_elts, unsigned int cache_size, |
| 129 | uint16_t user_size, int socket_id) |
| 130 | { |
| 131 | struct rte_comp_op_pool_private *priv; |
| 132 | |
| 133 | unsigned int elt_size = sizeof(struct rte_comp_op) + user_size; |
| 134 | |
| 135 | /* lookup mempool in case already allocated */ |
| 136 | struct rte_mempool *mp = rte_mempool_lookup(name); |
| 137 | |
| 138 | if (mp != NULL) { |
| 139 | priv = (struct rte_comp_op_pool_private *) |
| 140 | rte_mempool_get_priv(mp); |
| 141 | |
| 142 | if (mp->elt_size != elt_size || |
| 143 | mp->cache_size < cache_size || |
| 144 | mp->size < nb_elts || |
| 145 | priv->user_size < user_size) { |
| 146 | mp = NULL; |
| 147 | COMPRESSDEV_LOG(ERR, |
| 148 | "Mempool %s already exists but with incompatible parameters", |
| 149 | name); |
| 150 | return NULL; |
| 151 | } |
| 152 | return mp; |
| 153 | } |
| 154 | |
| 155 | mp = rte_mempool_create( |
| 156 | name, |
| 157 | nb_elts, |
| 158 | elt_size, |
| 159 | cache_size, |
| 160 | sizeof(struct rte_comp_op_pool_private), |
| 161 | NULL, |
| 162 | NULL, |
| 163 | rte_comp_op_init, |
| 164 | NULL, |
| 165 | socket_id, |
| 166 | 0); |
| 167 | |
| 168 | if (mp == NULL) { |
| 169 | COMPRESSDEV_LOG(ERR, "Failed to create mempool %s", name); |
| 170 | return NULL; |
| 171 | } |
| 172 | |
| 173 | priv = (struct rte_comp_op_pool_private *) |
| 174 | rte_mempool_get_priv(mp); |
| 175 | |
| 176 | priv->user_size = user_size; |
| 177 | |
| 178 | return mp; |
| 179 | } |
| 180 | |
| 181 | struct rte_comp_op * |
| 182 | rte_comp_op_alloc(struct rte_mempool *mempool) |