From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4A6A2F7EF2 for ; Wed, 12 Aug 2026 12:31:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786537890; cv=none; b=AuFqyAjamOs/3FkV65uMz5AP6ZAKuksTlxiRQL0YaB/bzwUANgqIXk1Yv/pMBT+kTQnu32iyQap+BE0f5UeLgbSFEf5F8x3l44nsX3oVj3oV51+/uUpIYKRI9D8wyhZGRh4d5dzx4iD5SmDW3g6Pn8Rw1BeKprCO36sZxvjuKvE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786537890; c=relaxed/simple; bh=YrU1jeDpX2NjESFWweG/w5+KE90Ha92gmRuTxTZPEDQ=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Zy234FLWGPlFXFWekBSA0e766jeGuwjqzn3TBHqemLfANLXaIuNRh/ZnumiE/23ayiO12SNxF+OqlVaJknIz38xgzxTG1ZIIM4UfUy/hI2Pg2CjfNlZbfBQkWVOCFbN5M4En8Nu/x1sAFbec6neGButuASJFRoRzN8QiHIhrwpI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=smartx.com; spf=pass smtp.mailfrom=smartx.com; dkim=pass (2048-bit key) header.d=smartx-com.20251104.gappssmtp.com header.i=@smartx-com.20251104.gappssmtp.com header.b=z/C8uPmt; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=smartx.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=smartx.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=smartx-com.20251104.gappssmtp.com header.i=@smartx-com.20251104.gappssmtp.com header.b="z/C8uPmt" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2cf27856f9cso7789295ad.2 for ; Wed, 12 Aug 2026 05:31:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=smartx-com.20251104.gappssmtp.com; s=20251104; t=1786537888; x=1787142688; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=llAZHY98bwUGOPpKH+Oy9y9i0REEG5pFeVFVn022z+4=; b=z/C8uPmtzSLCGFe4pzdEvcl9iWq5fA0Xb8oCUiXrOn67vgqof211Qs6RkHWhEfpHBZ VOJECV1V0behceyHMvE58HWajB4yvDieNjz/RhUwxw2dbgi1HjlIDApr+fmCaw8HQ76t WXZKLQEo1ukKEncjhY9pKzw21E1fPBuUfHUazxtYbGjOlsmshT3vT1wx8IPr1iDzWNJY 0+z3kQmnRXJRMBgPI5/2VkBrNbVsvRrkU0HYQdaK199voHD7rqUsIO7srbQtJTO81hyB 74gRiQ/5vnZamv8u65Q5Syq5WkzBfmLnUWQTVH9gslmT2nI3fI4MjH2wJ/cAWIVVdlBJ /ttw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786537888; x=1787142688; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=llAZHY98bwUGOPpKH+Oy9y9i0REEG5pFeVFVn022z+4=; b=ANJsQRriQk2xFaBCLeQqjvSadT9I4elBaE1OskNeqGSCbEV7GEg2xMW4sTWZPAL1vk hbcdeEzBJGioLsBR/91s3wQm9XbS1i5Z8uh3mHCIPA7wXkADovviKmvtocF0wsSUMvHV mEm7eG7J7KgrRPLH8mSSc10sViXG2mOnjqcBfRWVYoUmVFrSpOlln3gUohQysMZ6+3TI WZtM2CD7E17MYBysCWkLfBi5a5kpbPYsfZtCV+R2uVdM8XAPNlX3jAjGg388PVKCZ16m kj8yHfysiLx/36wgOnLFzjDuwjcJEQGbck5srv6rQ1VfN19pYa7FACAy2168ufeWkc3Z xeTA== X-Forwarded-Encrypted: i=1; AHgh+Rq6GqdnxtbDAxTqMJwUXZs4LtXxXou0LOvxhx4iI+59uXT9/IQ1waIzgr46iremv6a2MJGjD0IJ09KO43s=@vger.kernel.org X-Gm-Message-State: AOJu0YwTCrIT+cJFx3rgQb2QjHkj2+aTCgt26bzN6zZG4MHGzYiHcBmt i55w5JVhI9OB7MS4DhZHdOYghQDO/D4nOdSCf9COj7Qwux2uO/4VFzW9LHfaRBKWnXZE3eVgIwm KyfePCGIwZZymlptgiPnavM5vEMoAmHT8DbEckRkalsfFxocEnwyoBntPi5M= X-Gm-Gg: AR+sD11aJmGtPSUY645wjbCkAgzoqIox9deQ5uwFgTW8D6Yi7zf81IC7NvYrzYeLCcs xMOieQ629nDaqKaDFwr8GiPFY31UKcYSHLoiLUAPPVeMdcIH/u0aEnvOZVNzyvFyK3P0ILHv0Wg CB4Q7PMGknwN2P7xipyo/YgiYAW5Q7vuRntlcQGhtL6/g2wvfp+K3XlExUxBSGfKpjNoyzcGCme GQ5Tyi5VTn/ugTBLc4nnOK6+he269mSlLu3TYYTQdaU5l6K5dbb6axhBxAFE5HP2EWWuisfcEjQ wom4Ful7vxjDdUb2tYtTZ1WcDtY618OBQJCbjnL/DAO6H0gHPHLawmplzCucBFdVHCfVty2ZQuP 4SIoboU6KsroZCOThLVN6+Rd0MTSBHswteLeUgYbA0tqzPIRxWrH93RIlNgk0EwNfCDl7FWeGrM fj6NF+hlm2pU5s/hqJirRVhW1mMCM64828Uq7+akkGLhldC6X3VV2uUJJAWmLAAVY9MSKn1MQ6j A== X-Received: by 2002:a17:90b:2b45:b0:380:873:49cb with SMTP id 98e67ed59e1d1-39301834f69mr5641996a91.21.1786537882078; Wed, 12 Aug 2026 05:31:22 -0700 (PDT) Received: from localhost.localdomain ([174.136.204.24]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-14124451180sm8831608c88.1.2026.08.12.05.31.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 05:31:21 -0700 (PDT) From: Wang Zhan To: Aaron Conole , Eelco Chaudron , Ilya Maximets Cc: keyong.sun@smartx.com, netdev@vger.kernel.org, dev@openvswitch.org, linux-kernel@vger.kernel.org, Wang Zhan Subject: [PATCH net-next] openvswitch: enable ops lock for internal ports Date: Wed, 12 Aug 2026 20:30:03 +0800 Message-ID: <20260812123003.3634034-1-wang.zhan@smartx.com> X-Mailer: git-send-email 2.47.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Open vSwitch internal ports currently use RTNL as their ops compatibility lock. Opt them in to netdev instance locking so eligible control operations can be serialized per device instead of contending on the global RTNL lock. The internal port ethtool operations implement get_drvinfo and get_link. The latter uses ethtool_op_get_link(), which synchronizes linkwatch state and requires RTNL. Allow get_drvinfo to run under the instance lock, but set ETHTOOL_OP_NEEDS_RTNL_GLINK to retain RTNL for get_link. Feature synchronization can acquire a lower device's ops lock while holding an internal port's lock. Assign these software upper devices a distinct lockdep class to describe the nesting. Signed-off-by: Wang Zhan --- net/openvswitch/vport-internal_dev.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c index 125d310871e93..eb2e83a3e16f1 100644 --- a/net/openvswitch/vport-internal_dev.c +++ b/net/openvswitch/vport-internal_dev.c @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -29,6 +30,12 @@ static struct internal_dev *internal_dev_priv(struct net_device *netdev) return netdev_priv(netdev); } +static int internal_dev_init(struct net_device *netdev) +{ + netdev_lockdep_set_classes(netdev); + return 0; +} + /* Called with rcu_read_lock_bh. */ static netdev_tx_t internal_dev_xmit(struct sk_buff *skb, struct net_device *netdev) @@ -69,6 +76,7 @@ static void internal_dev_getinfo(struct net_device *netdev, } static const struct ethtool_ops internal_dev_ethtool_ops = { + .op_needs_rtnl = ETHTOOL_OP_NEEDS_RTNL_GLINK, .get_drvinfo = internal_dev_getinfo, .get_link = ethtool_op_get_link, }; @@ -81,6 +89,7 @@ static void internal_dev_destructor(struct net_device *dev) } static const struct net_device_ops internal_dev_netdev_ops = { + .ndo_init = internal_dev_init, .ndo_open = internal_dev_open, .ndo_stop = internal_dev_stop, .ndo_start_xmit = internal_dev_xmit, @@ -106,6 +115,7 @@ static void do_setup(struct net_device *netdev) netdev->needs_free_netdev = true; netdev->priv_destructor = NULL; netdev->ethtool_ops = &internal_dev_ethtool_ops; + netdev->request_ops_lock = true; netdev->rtnl_link_ops = &internal_dev_link_ops; netdev->features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | base-commit: ac155a26750a595703e7dadff84735456d75a479 -- 2.47.3