[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <456A40F4-7C46-4147-A22E-8B09209FD13A@linux.vnet.ibm.com>
Date: Tue, 20 Oct 2020 16:18:04 -0500
From: Lijun Pan <ljp@...ux.vnet.ibm.com>
To: Jakub Kicinski <kuba@...nel.org>
Cc: Lijun Pan <ljp@...ux.ibm.com>, netdev@...r.kernel.org
Subject: Re: [PATCH net] ibmvnic: save changed mac address to
adapter->mac_addr
> On Oct 19, 2020, at 7:11 PM, Jakub Kicinski <kuba@...nel.org> wrote:
>
> On Thu, 15 Oct 2020 23:57:15 -0500 Lijun Pan wrote:
>> After mac address change request completes successfully, the new mac
>> address need to be saved to adapter->mac_addr as well as
>> netdev->dev_addr. Otherwise, adapter->mac_addr still holds old
>> data.
>
> Do you observe this in practice? Can you show us which path in
> particular you see this happen on?
>
> AFAICS ibmvnic_set_mac() copies the new MAC addr into adapter->mac_addr
> before making a request.
>
> If anything is wrong here is that it does so regardless if MAC addr
> is valid.
>
Yes, I ran some internal test to check the mac address in adapter->mac_addr, and
it is the old data. If you run ifconfig command to change mac addr, the netdev->dev_addr
is changed afterwards, and if you run ifocnfig again, it will show the new mac addr. However,
since we did not check adapter->mac_addr in this use case, this bug was not exposed.
This vnic driver is little bit different than other physical NIC driver. All the control paths
are negotaited with VIOS server, and data paths are through DMA mapping.
__ibmvnic_set_mac copies the new mac addr to crq by
ether_addr_copy(&crq.change_mac_addr.mac_addr[0], dev_addr);
and then send the change request by
rc = ibmvnic_send_crq(adapter, &crq);
Now adapter->mac_addr still has the old data.
When the request is handled by VIOS server, an interrupt is triggered, and
handle_change_mac_rsp is called.
Now it is time to copy the new mac to netdev->dev_addr, and adatper->mac_addr.
ether_addr_copy(netdev->dev_addr,
&crq->change_mac_addr_rsp.mac_addr[0]);
It missed the copy for adapter->mac_addr, which is what I add in this patch.
+ ether_addr_copy(adapter->mac_addr,
+ &crq->change_mac_addr_rsp.mac_addr[0]);
>> Fixes: 62740e97881c("net/ibmvnic: Update MAC address settings after adapter reset")
> ^
> missing space here
>
Will fix this in v2.
Lijun
Powered by blists - more mailing lists