Hi, Konstantin Thanks for your patient guidance! > IXGBE_WRITE_REG(hw, IXGBE_SRRCTL(rxq->reg_idx), srrctl); in > ixgbe_dev_rx_init( ). > > Same case is also in the code line: IXGBE_WRITE_REG(hw, > IXGBE_VFSRRCTL(i), srrctl); in ixgbevf_dev_rx_init( ). > > Yes, HW can enable/disable it on a per queue basis. > Though it affects rx function selection, and as right now we have one rx > function per device - That's why it looks to me more like a per port offload. > Though I believe these days ixgbe PMD doesn't support it properly anyway > (we always set rxd.hdr_addr to zero) - so probably better to remove it at all. > Yes, rx function is related with offloading. I'll remove this header split capability in my next patch set.
> > > > > > +static int > > > > +ixgbe_check_rx_queue_offloads(struct rte_eth_dev *dev, uint64_t > > > > +requested) { > > > > + uint64_t port_offloads = dev->data->dev_conf.rxmode.offloads; > > > > + uint64_t queue_supported = ixgbe_get_rx_queue_offloads(dev); > > > > + uint64_t port_supported = ixgbe_get_rx_port_offloads(dev); > > > > + > > > > + if ((requested & (queue_supported | port_supported)) != > > > > requested) > > > > + return 0; > > > > + > > > > + if ((port_offloads ^ requested) & port_supported) > > > > > > Could you explain a bit more what are you cheking here? > > > As I can see: > > > (port_offloads ^ requested) - that's a diff between already set and > > > newly requested offloads. > > > Then you check if that diff consists of supported by port offloads, > > > and if yes you return an error? > > > Konstantin > > > > > This function is similar to mlx4_check_rx_queue_offloads() in mlx4 driver. > > As the git log message in the commit > > ce17eddefc20285bbfe575bdc07f42f0b20f34cb say that a per port > > capability should has same setting (enabling or disabling) on both port > configuration via rte_eth_dev_configure( ) and queue configuration via > rte_eth_rx_queue_setup( ). > > This function check if this requirement is matched or not. > > It also check offloading request is supported as a per port or a per queue > capability or not. > > If above checking is pass, it return 1 else return 0. > > Ok, let be more specific here. > Let say: > requested == DEV_RX_OFFLOAD_VLAN_STRIP; > port_offloads == DEV_RX_OFFLOAD_IPV4_CKSUM; port_supported = > (DEV_RX_OFFLOAD_IPV4_CKSUM | > DEV_RX_OFFLOAD_UDP_CKSUM | > DEV_RX_OFFLOAD_TCP_CKSUM | > DEV_RX_OFFLOAD_CRC_STRIP | > DEV_RX_OFFLOAD_JUMBO_FRAME | > DEV_RX_OFFLOAD_SCATTER); > > (port_offloads ^ requested) == DEV_RX_OFFLOAD_VLAN_STRIP | > DEV_RX_OFFLOAD_IPV4_CKSUM; (port_offloads ^ requested) & > port_supported == DEV_RX_OFFLOAD_IPV4_CKSUM; And that function will > return failure, while as I understand it shouldn't - requested queue offload > is > valid. > > Konstantin I'd like to list the git message of commit ce17eddefc20285bbfe575bdc07f42f0b20f34cb which has been submitted by Shahaf Shuler and already been accepted. SHA-1: ce17eddefc20285bbfe575bdc07f42f0b20f34cb * ethdev: introduce Rx queue offloads API Introduce a new API to configure Rx offloads. In the new API, offloads are divided into per-port and per-queue offloads. The PMD reports capability for each of them. Offloads are enabled using the existing DEV_RX_OFFLOAD_* flags. To enable per-port offload, the offload should be set on both device configuration and queue configuration. To enable per-queue offload, the offloads can be set only on queue configuration. Applications should set the ignore_offload_bitfield bit on rxmode structure in order to move to the new API. The old Rx offloads API is kept for the meanwhile, in order to enable a smooth transition for PMDs and application to the new API. Signed-off-by: Shahaf Shuler <shah...@mellanox.com> Reviewed-by: Andrew Rybchenko <arybche...@solarflare.com> Acked-by: Konstantin Ananyev <konstantin.anan...@intel.com> In your example, IPV4_CKSUM is a per port offloading, it is Enabled in port_offloads to rte_eth_dev_configure(), and it Should also be enabled in requested to rte_eth_rx_queue_setup( ). So your example fails in this checking. This function is very similar with priv_is_rx_queue_offloads_allowed( ) in /net/mlx5/mlx5_rxq.c In the patch http://dpdk.org/dev/patchwork/patch/33386/ which has already been accepted.