| 1246 | } |
| 1247 | |
| 1248 | static int cxgbe_dev_rss_reta_update(struct rte_eth_dev *dev, |
| 1249 | struct rte_eth_rss_reta_entry64 *reta_conf, |
| 1250 | uint16_t reta_size) |
| 1251 | { |
| 1252 | struct port_info *pi = dev->data->dev_private; |
| 1253 | struct adapter *adapter = pi->adapter; |
| 1254 | u16 i, idx, shift, *rss; |
| 1255 | int ret; |
| 1256 | |
| 1257 | if (!(adapter->flags & FULL_INIT_DONE)) |
| 1258 | return -ENOMEM; |
| 1259 | |
| 1260 | if (!reta_size || reta_size > pi->rss_size) |
| 1261 | return -EINVAL; |
| 1262 | |
| 1263 | rss = rte_calloc(NULL, pi->rss_size, sizeof(u16), 0); |
| 1264 | if (!rss) |
| 1265 | return -ENOMEM; |
| 1266 | |
| 1267 | rte_memcpy(rss, pi->rss, pi->rss_size * sizeof(u16)); |
| 1268 | for (i = 0; i < reta_size; i++) { |
| 1269 | idx = i / RTE_ETH_RETA_GROUP_SIZE; |
| 1270 | shift = i % RTE_ETH_RETA_GROUP_SIZE; |
| 1271 | if (!(reta_conf[idx].mask & (1ULL << shift))) |
| 1272 | continue; |
| 1273 | |
| 1274 | rss[i] = reta_conf[idx].reta[shift]; |
| 1275 | } |
| 1276 | |
| 1277 | ret = cxgbe_write_rss(pi, rss); |
| 1278 | if (!ret) |
| 1279 | rte_memcpy(pi->rss, rss, pi->rss_size * sizeof(u16)); |
| 1280 | |
| 1281 | rte_free(rss); |
| 1282 | return ret; |
| 1283 | } |
| 1284 | |
| 1285 | static int cxgbe_dev_rss_reta_query(struct rte_eth_dev *dev, |
| 1286 | struct rte_eth_rss_reta_entry64 *reta_conf, |
nothing calls this directly
no test coverage detected