Module Name: src Committed By: yamaguchi Date: Fri Dec 20 01:45:20 UTC 2019
Modified Files: src/sys/dev/pci: if_ixl.c Log Message: Fix ixl_{add|remove}_macvlan() to return errno instead of command status To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/dev/pci/if_ixl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/if_ixl.c diff -u src/sys/dev/pci/if_ixl.c:1.6 src/sys/dev/pci/if_ixl.c:1.7 --- src/sys/dev/pci/if_ixl.c:1.6 Fri Dec 20 01:18:53 2019 +++ src/sys/dev/pci/if_ixl.c Fri Dec 20 01:45:20 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_ixl.c,v 1.6 2019/12/20 01:18:53 yamaguchi Exp $ */ +/* $NetBSD: if_ixl.c,v 1.7 2019/12/20 01:45:20 yamaguchi Exp $ */ /* * Copyright (c) 2013-2015, Intel Corporation @@ -1448,16 +1448,13 @@ ixl_add_multi(struct ixl_softc *sc, uint rv = ixl_add_macvlan(sc, addrlo, 0, IXL_AQ_OP_ADD_MACVLAN_IGNORE_VLAN); - if (rv == IXL_AQ_RC_ENOSPC) { + if (rv == ENOSPC) { ixl_del_all_multiaddr(sc); SET(ifp->if_flags, IFF_ALLMULTI); return 0; } - if (rv != IXL_AQ_RC_OK) - return EIO; - - return 0; + return rv; } static void @@ -1489,7 +1486,7 @@ ixl_del_multi(struct ixl_softc *sc, uint ETHER_NEXT_MULTI(step, enm)) { rv = ixl_add_macvlan(sc, enm->enm_addrlo, 0, IXL_AQ_OP_ADD_MACVLAN_IGNORE_VLAN); - if (rv != IXL_AQ_RC_OK) + if (rv != 0) break; } @@ -4180,7 +4177,24 @@ ixl_add_macvlan(struct ixl_softc *sc, co return IXL_AQ_RC_EINVAL; } - return le16toh(iaq.iaq_retval); + switch (le16toh(iaq.iaq_retval)) { + case IXL_AQ_RC_OK: + break; + case IXL_AQ_RC_ENOSPC: + return ENOSPC; + case IXL_AQ_RC_ENOENT: + return ENOENT; + case IXL_AQ_RC_EACCES: + return EACCES; + case IXL_AQ_RC_EEXIST: + return EEXIST; + case IXL_AQ_RC_EINVAL: + return EINVAL; + default: + return EIO; + } + + return 0; } static int @@ -4210,10 +4224,23 @@ ixl_remove_macvlan(struct ixl_softc *sc, elem->vlan = htole16(vlan); if (ixl_atq_poll(sc, &iaq, 250) != 0) { - return IXL_AQ_RC_EINVAL; + return EINVAL; } - return le16toh(iaq.iaq_retval); + switch (le16toh(iaq.iaq_retval)) { + case IXL_AQ_RC_OK: + break; + case IXL_AQ_RC_ENOENT: + return ENOENT; + case IXL_AQ_RC_EACCES: + return EACCES; + case IXL_AQ_RC_EINVAL: + return EINVAL; + default: + return EIO; + } + + return 0; } static int @@ -4756,14 +4783,14 @@ ixl_set_macvlan(struct ixl_softc *sc) /* remove default mac filter and replace it so we can see vlans */ error = ixl_remove_macvlan(sc, sc->sc_enaddr, 0, 0); - if (error != IXL_AQ_RC_OK) { + if (error != 0 && error != ENOENT) { aprint_debug_dev(sc->sc_dev, "unable to remove macvlan\n"); rv = -1; } error = ixl_remove_macvlan(sc, sc->sc_enaddr, 0, IXL_AQ_OP_REMOVE_MACVLAN_IGNORE_VLAN); - if (error != IXL_AQ_RC_OK && error != IXL_AQ_RC_ENOENT) { + if (error != 0 && error != ENOENT) { aprint_debug_dev(sc->sc_dev, "unable to remove macvlan(IGNORE_VLAN)\n"); rv = -1; @@ -4771,14 +4798,14 @@ ixl_set_macvlan(struct ixl_softc *sc) error = ixl_add_macvlan(sc, sc->sc_enaddr, 0, IXL_AQ_OP_ADD_MACVLAN_IGNORE_VLAN); - if (error != IXL_AQ_RC_OK) { + if (error != 0) { aprint_debug_dev(sc->sc_dev, "unable to add mac address\n"); rv = -1; } error = ixl_add_macvlan(sc, etherbroadcastaddr, 0, IXL_AQ_OP_ADD_MACVLAN_IGNORE_VLAN); - if (error != IXL_AQ_RC_OK) { + if (error != 0) { aprint_debug_dev(sc->sc_dev, "unable to add broadcast mac address\n"); rv = -1;