From patchwork Thu Apr 21 23:12:32 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 92490 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 020BBB6FD9 for ; Fri, 22 Apr 2011 09:12:43 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755611Ab1DUXMe (ORCPT ); Thu, 21 Apr 2011 19:12:34 -0400 Received: from rere.qmqm.pl ([89.167.52.164]:39712 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754062Ab1DUXMe (ORCPT ); Thu, 21 Apr 2011 19:12:34 -0400 Received: by rere.qmqm.pl (Postfix, from userid 1000) id BF22613909; Fri, 22 Apr 2011 01:12:32 +0200 (CEST) From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Subject: [PATCH] net: fix hw_features ethtool_ops->set_flags compatibility MIME-Version: 1.0 To: netdev@vger.kernel.org Cc: Ben Hutchings , Eric Dumazet , Vladislav Zolotarov , Eilon Greenstein In-Reply-To: <1303426342.3464.184.camel@localhost> References: <1303426342.3464.184.camel@localhost> <20110421221548.GA7888@rere.qmqm.pl> <20110412144940.GA26043@rere.qmqm.pl> <20110411202630.C079D13909@rere.qmqm.pl> <1302610228.32697.298.camel@lb-tlvb-vladz> <20110412140708.GA21835@rere.qmqm.pl> <1302619012.6750.8.camel@lb-tlvb-vladz> <20110412193823.0823213A65@rere.qmqm.pl> <1303397531.3685.16.camel@edumazet-laptop> <1303411750.19212.123.camel@lb-tlvb-vladz> <1303413559.3165.55.camel@bwh-desktop> <20110421221548.GA7888@rere.qmqm.pl> Message-Id: <20110421231232.BF22613909@rere.qmqm.pl> Date: Fri, 22 Apr 2011 01:12:32 +0200 (CEST) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Michał Mirosław --- net/core/ethtool.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 13d79f5..a8c5b3e 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -532,7 +532,7 @@ static int ethtool_set_one_feature(struct net_device *dev, int __ethtool_set_flags(struct net_device *dev, u32 data) { - u32 changed; + u32 changed, forced; if (data & ~flags_dup_features) return -EINVAL; @@ -546,7 +546,8 @@ int __ethtool_set_flags(struct net_device *dev, u32 data) } /* allow changing only bits set in hw_features */ - changed = (data ^ dev->wanted_features) & flags_dup_features; + forced = dev->features & flags_dup_features & ~dev->hw_features; + changed = data ^ forced ^ dev->wanted_features; if (changed & ~dev->hw_features) return (changed & dev->hw_features) ? -EINVAL : -EOPNOTSUPP;