|
From: | Akihiko Odaki |
Subject: | Re: [PATCH v3 8/9] igb: respect VT_CTL ignore MAC field |
Date: | Wed, 1 Feb 2023 22:03:24 +0900 |
User-agent: | Mozilla/5.0 (X11; Linux aarch64; rv:102.0) Gecko/20100101 Thunderbird/102.7.0 |
On 2023/02/01 19:29, Sriram Yagnaraman wrote:
-----Original Message----- From: Akihiko Odaki <akihiko.odaki@daynix.com> Sent: Wednesday, 1 February 2023 05:58 To: Sriram Yagnaraman <sriram.yagnaraman@est.tech> Cc: qemu-devel@nongnu.org; Jason Wang <jasowang@redhat.com>; Dmitry Fleytman <dmitry.fleytman@gmail.com>; Michael S . Tsirkin <mst@redhat.com>; Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Subject: Re: [PATCH v3 8/9] igb: respect VT_CTL ignore MAC field On 2023/01/31 18:42, Sriram Yagnaraman wrote:Also trace out a warning if replication mode is disabled, since we only support replication mode enabled. Signed-off-by: Sriram Yagnaraman <sriram.yagnaraman@est.tech> --- hw/net/igb_core.c | 9 +++++++++ hw/net/trace-events | 2 ++ 2 files changed, 11 insertions(+) diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index c5f9c14f47..8115be2d76 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -964,6 +964,10 @@ static uint16_t igb_receive_assign(IGBCore *core,const struct eth_header *ehdr,} if (core->mac[MRQC] & 1) { + if (!(core->mac[VT_CTL] & E1000_VT_CTL_VM_REPL_EN)) { + trace_igb_rx_vmdq_replication_mode_disabled(); + } + if (is_broadcast_ether_addr(ehdr->h_dest)) { for (i = 0; i < IGB_NUM_VM_POOLS; i++) { if (core->mac[VMOLR0 + i] & E1000_VMOLR_BAM) { @@ -1010,6 +1014,11 @@ static uint16_t igb_receive_assign(IGBCore *core,const struct eth_header *ehdr,} } + /* assume a full pool list if IGMAC is set */ + if (core->mac[VT_CTL] & E1000_VT_CTL_IGNORE_MAC) { + queues = BIT(IGB_MAX_VF_FUNCTIONS) - 1; + } +This overwrites "queues", but "external_tx" is not overwritten.Description in section 7.10.3.6 is a bit confusing, I interpreted that packet is not sent to network if it matches an exact filter regardless of VT_CTL.IGMAC setting. I think that VT_CTL.IGMAC setting is only for MAC filtering and pool selection, and not to determine if a packet must go to external LAN or not.
It says nothing about VT_CTL.IGMAC so we need to make the best guess.The rule saying "a unicast packet that matches an exact filter is not sent to the LAN" aligns with the common expectation of driver authors that a packet directed to a VF won't be sent to someone else.
However, when VT_CTL.IGMAC is set, the exact filter does not tell if the destination of the packet is a VF. In such a case, that rule does not do anything good, but can do some harm; if you have used igb for normal MAC routing and later switched to VLAN routing with VT_CTL.IGMAC, the exact filter may be left as is, the exact filter can prevent irrelevant packets from being routed to the external LAN.
if (e1000x_vlan_rx_filter_enabled(core->mac)) { uint16_t mask = 0; diff --git a/hw/net/trace-events b/hw/net/trace-events index e94172e748..9bc7658692 100644 --- a/hw/net/trace-events +++ b/hw/net/trace-events @@ -288,6 +288,8 @@ igb_rx_desc_buff_write(uint64_t addr, uint16_t offset, const void* source, uint3 igb_rx_metadata_rss(uint32_t rss) "RSS data: 0x%X" +igb_rx_vmdq_replication_mode_disabled(void) "WARN: Only replicationmode enabled is supported"+ igb_irq_icr_clear_gpie_nsicr(void) "Clearing ICR on read due to GPIE.NSICRenabled"igb_irq_icr_write(uint32_t bits, uint32_t old_icr, uint32_t new_icr)"Clearing ICR bits 0x%x: 0x%x --> 0x%x"igb_irq_set_iam(uint32_t icr) "Update IAM: 0x%x"
[Prev in Thread] | Current Thread | [Next in Thread] |