Lines Matching defs:rxfh

1044 static int ethtool_check_xfrm_rxfh(u32 input_xfrm, u64 rxfh)
1052 !ethtool_rxfh_config_is_sym(rxfh))
1111 struct ethtool_rxfh_param rxfh = {};
1113 rc = ops->get_rxfh(dev, &rxfh);
1117 rc = ethtool_check_xfrm_rxfh(rxfh.input_xfrm, info.data);
1301 struct ethtool_rxfh_param rxfh = {};
1308 rxfh.indir_size = dev->ethtool_ops->get_rxfh_indir_size(dev);
1309 if (rxfh.indir_size == 0)
1318 &rxfh.indir_size, sizeof(rxfh.indir_size)))
1325 if (user_size < rxfh.indir_size)
1328 rxfh.indir = kcalloc(rxfh.indir_size, sizeof(rxfh.indir[0]), GFP_USER);
1329 if (!rxfh.indir)
1333 ret = dev->ethtool_ops->get_rxfh(dev, &rxfh);
1339 rxfh.indir, rxfh.indir_size * sizeof(*rxfh.indir)))
1343 kfree(rxfh.indir);
1405 /* indicate whether rxfh was set to default */
1425 struct ethtool_rxfh rxfh;
1439 if (copy_from_user(&rxfh, useraddr, sizeof(rxfh)))
1441 user_indir_size = rxfh.indir_size;
1442 user_key_size = rxfh.key_size;
1445 if (rxfh.rsvd8[0] || rxfh.rsvd8[1] || rxfh.rsvd32)
1448 if (rxfh.rss_context && !ops->create_rxfh_context)
1451 rxfh.indir_size = rxfh_dev.indir_size;
1452 rxfh.key_size = rxfh_dev.key_size;
1453 if (copy_to_user(useraddr, &rxfh, sizeof(rxfh)))
1473 if (rxfh.rss_context) {
1474 ctx = xa_load(&dev->ethtool->rss_ctx, rxfh.rss_context);
1500 &rxfh_dev.hfunc, sizeof(rxfh.hfunc))) {
1505 sizeof(rxfh.input_xfrm))) {
1510 sizeof(rxfh.key_size))) {
1534 struct ethtool_rxfh rxfh;
1549 if (copy_from_user(&rxfh, useraddr, sizeof(rxfh)))
1553 if (rxfh.rsvd8[0] || rxfh.rsvd8[1] || rxfh.rsvd32)
1556 if (rxfh.rss_context && !ops->create_rxfh_context)
1559 if (rxfh.input_xfrm && rxfh.input_xfrm != RXH_XFRM_SYM_XOR &&
1560 rxfh.input_xfrm != RXH_XFRM_SYM_OR_XOR &&
1561 rxfh.input_xfrm != RXH_XFRM_NO_CHANGE)
1563 if (rxfh.input_xfrm != RXH_XFRM_NO_CHANGE &&
1564 rxfh.input_xfrm & ~ops->supported_input_xfrm)
1566 create = rxfh.rss_context == ETH_RXFH_CONTEXT_ALLOC;
1568 if ((rxfh.indir_size &&
1569 rxfh.indir_size != ETH_RXFH_INDIR_NO_CHANGE &&
1570 rxfh.indir_size != dev_indir_size) ||
1571 (rxfh.key_size && rxfh.key_size != dev_key_size))
1579 (rxfh.indir_size == ETH_RXFH_INDIR_NO_CHANGE &&
1580 rxfh.key_size == 0 && rxfh.hfunc == ETH_RSS_HASH_NO_CHANGE &&
1581 rxfh.input_xfrm == RXH_XFRM_NO_CHANGE))
1587 if (rxfh.rss_context && !ops->rxfh_per_ctx_key)
1588 if (rxfh.key_size ||
1589 (rxfh.hfunc && rxfh.hfunc != ETH_RSS_HASH_NO_CHANGE) ||
1590 (rxfh.input_xfrm && rxfh.input_xfrm != RXH_XFRM_NO_CHANGE))
1603 /* rxfh.indir_size == 0 means reset the indir table to default (master
1605 * rxfh.indir_size == ETH_RXFH_INDIR_NO_CHANGE means leave it unchanged.
1607 if (rxfh.indir_size &&
1608 rxfh.indir_size != ETH_RXFH_INDIR_NO_CHANGE) {
1615 rxfh.indir_size);
1618 } else if (rxfh.indir_size == 0) {
1619 if (rxfh.rss_context == 0) {
1633 if (rxfh.key_size) {
1638 rxfh.key_size)) {
1646 ret = ethtool_check_flow_types(dev, rxfh.input_xfrm);
1650 if (rxfh.rss_context && rxfh_dev.rss_delete) {
1651 ret = ethtool_check_rss_ctx_busy(dev, rxfh.rss_context);
1677 rxfh.rss_context = ctx_id;
1678 } else if (rxfh.rss_context) {
1679 ctx = xa_load(&dev->ethtool->rss_ctx, rxfh.rss_context);
1685 rxfh_dev.hfunc = rxfh.hfunc;
1686 rxfh_dev.rss_context = rxfh.rss_context;
1687 rxfh_dev.input_xfrm = rxfh.input_xfrm;
1689 if (!rxfh.rss_context) {
1701 ret = ops->remove_rxfh_context(dev, ctx, rxfh.rss_context,
1711 xa_erase(&dev->ethtool->rss_ctx, rxfh.rss_context);
1722 /* indicate whether rxfh was set to default */
1723 if (rxfh.indir_size == 0)
1725 else if (rxfh.indir_size != ETH_RXFH_INDIR_NO_CHANGE)
1730 WARN_ON(xa_erase(&dev->ethtool->rss_ctx, rxfh.rss_context) != ctx);
1737 rxfh.indir_size &&
1738 rxfh.indir_size != ETH_RXFH_INDIR_NO_CHANGE;
1743 ctx->key_configured = !!rxfh.key_size;
1756 ethtool_rss_notify(dev, ntf, rxfh.rss_context);