* [PATCH net] ibmvnic: Fix pending MAC address changes
@ 2018-01-11 1:39 Thomas Falcon
2018-01-15 14:58 ` John Allen
2018-01-16 16:26 ` David Miller
0 siblings, 2 replies; 3+ messages in thread
From: Thomas Falcon @ 2018-01-11 1:39 UTC (permalink / raw)
To: netdev; +Cc: nfont, jallen, Thomas Falcon
Due to architecture limitations, the IBM VNIC client driver is unable
to perform MAC address changes unless the device has "logged in" to
its backing device. Currently, pending MAC changes are handled before
login, resulting in an error and failure to change the MAC address.
Moving that chunk to the end of the ibmvnic_login function, when we are
sure that it was successful, fixes that.
The MAC address can be changed when the device is up or down, so
only check if the device is in a "PROBED" state before setting the
MAC address.
Fixes: c26eba03e407 ("ibmvnic: Update reset infrastructure to support tunable parameters")
Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
---
drivers/net/ethernet/ibm/ibmvnic.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 6911b7c..b676fa9 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -757,6 +757,12 @@ static int ibmvnic_login(struct net_device *netdev)
}
} while (adapter->renegotiate);
+ /* handle pending MAC address changes after successful login */
+ if (adapter->mac_change_pending) {
+ __ibmvnic_set_mac(netdev, &adapter->desired.mac);
+ adapter->mac_change_pending = false;
+ }
+
return 0;
}
@@ -994,11 +1000,6 @@ static int ibmvnic_open(struct net_device *netdev)
mutex_lock(&adapter->reset_lock);
- if (adapter->mac_change_pending) {
- __ibmvnic_set_mac(netdev, &adapter->desired.mac);
- adapter->mac_change_pending = false;
- }
-
if (adapter->state != VNIC_CLOSED) {
rc = ibmvnic_login(netdev);
if (rc) {
@@ -1532,7 +1533,7 @@ static int ibmvnic_set_mac(struct net_device *netdev, void *p)
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
struct sockaddr *addr = p;
- if (adapter->state != VNIC_OPEN) {
+ if (adapter->state == VNIC_PROBED) {
memcpy(&adapter->desired.mac, addr, sizeof(struct sockaddr));
adapter->mac_change_pending = true;
return 0;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net] ibmvnic: Fix pending MAC address changes
2018-01-11 1:39 [PATCH net] ibmvnic: Fix pending MAC address changes Thomas Falcon
@ 2018-01-15 14:58 ` John Allen
2018-01-16 16:26 ` David Miller
1 sibling, 0 replies; 3+ messages in thread
From: John Allen @ 2018-01-15 14:58 UTC (permalink / raw)
To: Thomas Falcon, netdev; +Cc: nfont
On 01/10/2018 07:39 PM, Thomas Falcon wrote:
> Due to architecture limitations, the IBM VNIC client driver is unable
> to perform MAC address changes unless the device has "logged in" to
> its backing device. Currently, pending MAC changes are handled before
> login, resulting in an error and failure to change the MAC address.
> Moving that chunk to the end of the ibmvnic_login function, when we are
> sure that it was successful, fixes that.
>
> The MAC address can be changed when the device is up or down, so
> only check if the device is in a "PROBED" state before setting the
> MAC address.
>
> Fixes: c26eba03e407 ("ibmvnic: Update reset infrastructure to support tunable parameters")
> Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
> ---
Reviewed-by: John Allen <jallen@linux.vnet.ibm.com>
> drivers/net/ethernet/ibm/ibmvnic.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
> index 6911b7c..b676fa9 100644
> --- a/drivers/net/ethernet/ibm/ibmvnic.c
> +++ b/drivers/net/ethernet/ibm/ibmvnic.c
> @@ -757,6 +757,12 @@ static int ibmvnic_login(struct net_device *netdev)
> }
> } while (adapter->renegotiate);
>
> + /* handle pending MAC address changes after successful login */
> + if (adapter->mac_change_pending) {
> + __ibmvnic_set_mac(netdev, &adapter->desired.mac);
> + adapter->mac_change_pending = false;
> + }
> +
> return 0;
> }
>
> @@ -994,11 +1000,6 @@ static int ibmvnic_open(struct net_device *netdev)
>
> mutex_lock(&adapter->reset_lock);
>
> - if (adapter->mac_change_pending) {
> - __ibmvnic_set_mac(netdev, &adapter->desired.mac);
> - adapter->mac_change_pending = false;
> - }
> -
> if (adapter->state != VNIC_CLOSED) {
> rc = ibmvnic_login(netdev);
> if (rc) {
> @@ -1532,7 +1533,7 @@ static int ibmvnic_set_mac(struct net_device *netdev, void *p)
> struct ibmvnic_adapter *adapter = netdev_priv(netdev);
> struct sockaddr *addr = p;
>
> - if (adapter->state != VNIC_OPEN) {
> + if (adapter->state == VNIC_PROBED) {
> memcpy(&adapter->desired.mac, addr, sizeof(struct sockaddr));
> adapter->mac_change_pending = true;
> return 0;
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net] ibmvnic: Fix pending MAC address changes
2018-01-11 1:39 [PATCH net] ibmvnic: Fix pending MAC address changes Thomas Falcon
2018-01-15 14:58 ` John Allen
@ 2018-01-16 16:26 ` David Miller
1 sibling, 0 replies; 3+ messages in thread
From: David Miller @ 2018-01-16 16:26 UTC (permalink / raw)
To: tlfalcon; +Cc: netdev, nfont, jallen
From: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
Date: Wed, 10 Jan 2018 19:39:52 -0600
> Due to architecture limitations, the IBM VNIC client driver is unable
> to perform MAC address changes unless the device has "logged in" to
> its backing device. Currently, pending MAC changes are handled before
> login, resulting in an error and failure to change the MAC address.
> Moving that chunk to the end of the ibmvnic_login function, when we are
> sure that it was successful, fixes that.
>
> The MAC address can be changed when the device is up or down, so
> only check if the device is in a "PROBED" state before setting the
> MAC address.
>
> Fixes: c26eba03e407 ("ibmvnic: Update reset infrastructure to support tunable parameters")
> Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
Applied, thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-01-16 16:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-11 1:39 [PATCH net] ibmvnic: Fix pending MAC address changes Thomas Falcon
2018-01-15 14:58 ` John Allen
2018-01-16 16:26 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).