net/mlx: fix setting interface flags
According to the documentation, the function priv_set_flags(priv, keep, flags) should not modify the flags in "keep" mask. So 'flags' argument should be masked with '~keep' before ORing it with the previous flags value. This avoids messing up the kernel interface flags when calling priv_set_flags(priv, ~IFF_UP, ~IFF_UP) in priv_set_link(): $ ip link 26: eth0: BROADCAST,MULTICAST,NOARP,ALLMULTI,PROMISC,DEBUG,\ DYNAMIC,AUTOMEDIA,PORTSEL,NOTRAILERS Fixes:7fae69eeff
("mlx4: new poll mode driver") Fixes:771fa900b7
("mlx5: introduce new driver for Mellanox ConnectX-4 adapters") Reported-by: Fengtian Guo <fengtian.guo@6wind.com> Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
This commit is contained in:
parent
af15ee640d
commit
33242e3e46
@ -689,7 +689,7 @@ priv_set_flags(struct priv *priv, unsigned int keep, unsigned int flags)
|
||||
if (priv_get_sysfs_ulong(priv, "flags", &tmp) == -1)
|
||||
return -1;
|
||||
tmp &= keep;
|
||||
tmp |= flags;
|
||||
tmp |= (flags & (~keep));
|
||||
return priv_set_sysfs_ulong(priv, "flags", tmp);
|
||||
}
|
||||
|
||||
|
@ -461,7 +461,7 @@ priv_set_flags(struct priv *priv, unsigned int keep, unsigned int flags)
|
||||
if (priv_get_sysfs_ulong(priv, "flags", &tmp) == -1)
|
||||
return -1;
|
||||
tmp &= keep;
|
||||
tmp |= flags;
|
||||
tmp |= (flags & (~keep));
|
||||
return priv_set_sysfs_ulong(priv, "flags", tmp);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user