From nobody Fri Jun 19 02:03:36 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9D254C433F5 for ; Sun, 10 Apr 2022 00:57:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231230AbiDJA72 (ORCPT ); Sat, 9 Apr 2022 20:59:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57818 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233471AbiDJA7Y (ORCPT ); Sat, 9 Apr 2022 20:59:24 -0400 Received: from mail-pj1-x1034.google.com (mail-pj1-x1034.google.com [IPv6:2607:f8b0:4864:20::1034]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 70F1CD48 for ; Sat, 9 Apr 2022 17:57:16 -0700 (PDT) Received: by mail-pj1-x1034.google.com with SMTP id md4so3701662pjb.4 for ; Sat, 09 Apr 2022 17:57:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/jtK/Vrx2NulzdlRFPGXxwDEDEKWt3aWW57PRS+XOqA=; b=Q3fqWcBLRFXsFMjVzCyo5s+q9IpD4s0sEc6ysGZlrrkF2Ufdtp/Ec0mcPPf5BV5znC UiJEoJeMyXdZdZvbGsISnmRGT23acVGxG1HI86sd0PvBcGdJF9gfmleiafIilCVKT6O4 0bRk+tVTWeMTIvZeaO12t1sM58Qba6cujenymQ4ivLB1VhHFf34G+f1eE+ijl5CLq9of Wc31h0wWKrSURHkYSZ1xP0urSU2pZ/d1jeuF4bUoXbvdaS6BjDigA16RoKbCdyMdQSYz a4jC7EtsBZJt2Ap/UAhXVE3CC8WvIvpuFPy8Blgg6pt6UzlA7e4iCOEdLg8iJNQcoGni s8CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/jtK/Vrx2NulzdlRFPGXxwDEDEKWt3aWW57PRS+XOqA=; b=w/jf/oH0gbBeZc+O5iICZaViCjlXzT/mu7qN8erFChzMmWhwvtCJ4VdEljgLM/Lmf1 hlZjSahq02JtQzcFkhXVW5GcFlIcTsDhsbvCIqqS2mbQjxRZymCuKAkBhJ8gNOk91f9l v1dgaTi/5Rd2/uF7j4u9KHX0DLfqOSvuPcXb5aNDK25zVvufVcFbShSY1Ih0KTeSUjLk rBrM2EVyWhy8oRlwmPD1FM2xGoY/8iAnzFBqRuQHQdv4VThEmOTC9QH9/HSLd/Mvj6xz NBMBEGXf5+ru31IV0KZpXycg/P1tbAUHeA6L9yWcdwgEGgMvpaJL+h5IhWGWDn5lrBtL wNZQ== X-Gm-Message-State: AOAM532OVMHY6eH0tZrNmQxFhsM1z8RDdK1aRVrK4cyUxsFC7LGZ6dqu RkeM2fE4Wn8FoL8yH7u0v9A= X-Google-Smtp-Source: ABdhPJzuaAn5Pz4e119YMSAWmO4/3v2UeHNIGezXp/yG9Yb2N7Uc3Prc+aahlQaU53wphLrS52qHjw== X-Received: by 2002:a17:903:1108:b0:156:73a7:7c1 with SMTP id n8-20020a170903110800b0015673a707c1mr25778457plh.101.1649552235927; Sat, 09 Apr 2022 17:57:15 -0700 (PDT) Received: from octofox.hsd1.ca.comcast.net ([2601:641:401:1d20:172c:26af:268e:6e9f]) by smtp.gmail.com with ESMTPSA id l67-20020a633e46000000b003986e01e982sm25088215pga.67.2022.04.09.17.57.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Apr 2022 17:57:15 -0700 (PDT) From: Max Filippov To: linux-xtensa@linux-xtensa.org Cc: Chris Zankel , linux-kernel@vger.kernel.org, Duoming Zhou , Jakub Kicinski , Greg Kroah-Hartman , "David S. Miller" , Max Filippov Subject: [PATCH 1/4] xtensa: iss: drop opened_list logic from the network driver Date: Sat, 9 Apr 2022 17:56:29 -0700 Message-Id: <20220410005632.3925219-2-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220410005632.3925219-1-jcmvbkbc@gmail.com> References: <20220410005632.3925219-1-jcmvbkbc@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" opened_list is used to poll all opened devices in the timer callback, but there's individual timer that is associated with each device. Drop opened_list and only poll the device that is associated with the timer in the timer callback. Signed-off-by: Max Filippov --- arch/xtensa/platforms/iss/network.c | 53 ++++++++--------------------- 1 file changed, 14 insertions(+), 39 deletions(-) diff --git a/arch/xtensa/platforms/iss/network.c b/arch/xtensa/platforms/is= s/network.c index be3aaaad8bee..409def002f55 100644 --- a/arch/xtensa/platforms/iss/network.c +++ b/arch/xtensa/platforms/iss/network.c @@ -38,9 +38,6 @@ #define ISS_NET_TIMER_VALUE (HZ / 10) =20 =20 -static DEFINE_SPINLOCK(opened_lock); -static LIST_HEAD(opened); - static DEFINE_SPINLOCK(devices_lock); static LIST_HEAD(devices); =20 @@ -63,7 +60,6 @@ struct tuntap_info { =20 struct iss_net_private { struct list_head device_list; - struct list_head opened_list; =20 spinlock_t lock; struct net_device *dev; @@ -311,38 +307,28 @@ static int iss_net_rx(struct net_device *dev) return pkt_len; } =20 -static int iss_net_poll(void) +static int iss_net_poll(struct iss_net_private *lp) { - struct list_head *ele; int err, ret =3D 0; =20 - spin_lock(&opened_lock); - - list_for_each(ele, &opened) { - struct iss_net_private *lp; - - lp =3D list_entry(ele, struct iss_net_private, opened_list); - - if (!netif_running(lp->dev)) - break; + if (!netif_running(lp->dev)) + return 0; =20 - spin_lock(&lp->lock); + spin_lock(&lp->lock); =20 - while ((err =3D iss_net_rx(lp->dev)) > 0) - ret++; + while ((err =3D iss_net_rx(lp->dev)) > 0) + ret++; =20 - spin_unlock(&lp->lock); + spin_unlock(&lp->lock); =20 - if (err < 0) { - pr_err("Device '%s' read returned %d, shutting it down\n", - lp->dev->name, err); - dev_close(lp->dev); - } else { - /* FIXME reactivate_fd(lp->fd, ISS_ETH_IRQ); */ - } + if (err < 0) { + pr_err("Device '%s' read returned %d, shutting it down\n", + lp->dev->name, err); + dev_close(lp->dev); + } else { + /* FIXME reactivate_fd(lp->fd, ISS_ETH_IRQ); */ } =20 - spin_unlock(&opened_lock); return ret; } =20 @@ -351,7 +337,7 @@ static void iss_net_timer(struct timer_list *t) { struct iss_net_private *lp =3D from_timer(lp, t, timer); =20 - iss_net_poll(); + iss_net_poll(lp); spin_lock(&lp->lock); mod_timer(&lp->timer, jiffies + lp->timer_val); spin_unlock(&lp->lock); @@ -378,12 +364,6 @@ static int iss_net_open(struct net_device *dev) while ((err =3D iss_net_rx(dev)) > 0) ; =20 - spin_unlock_bh(&lp->lock); - spin_lock_bh(&opened_lock); - list_add(&lp->opened_list, &opened); - spin_unlock_bh(&opened_lock); - spin_lock_bh(&lp->lock); - timer_setup(&lp->timer, iss_net_timer, 0); lp->timer_val =3D ISS_NET_TIMER_VALUE; mod_timer(&lp->timer, jiffies + lp->timer_val); @@ -399,10 +379,6 @@ static int iss_net_close(struct net_device *dev) netif_stop_queue(dev); spin_lock_bh(&lp->lock); =20 - spin_lock(&opened_lock); - list_del(&opened); - spin_unlock(&opened_lock); - del_timer_sync(&lp->timer); =20 lp->tp.close(lp); @@ -520,7 +496,6 @@ static int iss_net_configure(int index, char *init) lp =3D netdev_priv(dev); *lp =3D (struct iss_net_private) { .device_list =3D LIST_HEAD_INIT(lp->device_list), - .opened_list =3D LIST_HEAD_INIT(lp->opened_list), .dev =3D dev, .index =3D index, }; --=20 2.30.2 From nobody Fri Jun 19 02:03:36 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 886F3C433FE for ; Sun, 10 Apr 2022 00:57:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233509AbiDJA7g (ORCPT ); Sat, 9 Apr 2022 20:59:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57940 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233544AbiDJA71 (ORCPT ); Sat, 9 Apr 2022 20:59:27 -0400 Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17FCAB1D for ; Sat, 9 Apr 2022 17:57:18 -0700 (PDT) Received: by mail-pj1-x1035.google.com with SMTP id 2so12005866pjw.2 for ; Sat, 09 Apr 2022 17:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iewQTcBhULh0Wlv/puXFU1ZAd6A0j76cf895Aowl2UU=; b=L/QeTnVVQn5jjd6snJlLFoNDo34diFEa7BHp0Oy6Cd8XrjkU2pIzp5UPnr7I8QcZjA SEA+jA204dyrIqws1t4y3z5Ovwb4L+G5JkyckHDKDzcIeIqOTnbEH238f//fHvKDhcFG KeL74z3++8KfMVnrSX+pzPMB/81fR2LP/4VOIVpNapMH/qFM9hVqQqaH3ttnzATPrW6K wS0h0sw4otD+tnuHvP1SijmCvMIWzejGS3bIsBi7FfZppv6Am+ZJZLbxojHqXX+UCIrd vm/+oMTEvgRsdrcXAEXEyaHzWltL7qmD9JKxUgaraKqTP6uli6B7nu8RQYejLmiyOPkn Hv0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iewQTcBhULh0Wlv/puXFU1ZAd6A0j76cf895Aowl2UU=; b=WGsUxmHEeWU7n6BCvgcqPeY8/GEvgp3chfaaDCsxqdQJ9HLQa+Di2g56hBVNj3aFxN QdmquApQfZsFonXlpJUrJZVJZBk9EZap+8PU5/uCBUEMIqPZnOctH7yah8kC679OhtmY qYOR3TFz4zClX0laPl8imu0pMbY9VApzXACa/PaEF1i3kn40tA5fWW/HqSLduYCJLsY8 FCJFnUePjWKUsyom8EZ11McDhYi1d3Ep4x8U9Y/zKKNBuCsekPR807BufvDBbZl0q5gd PKYBi3nRs3SUBLGBhUNN7hv0iknTv4fvwTP/N9prqkuf2RtXYQ+dHA4uD3a24zOE2bL6 cWOg== X-Gm-Message-State: AOAM531Cdz0Uszi2l/Yo3FKw9CY/Ekk+/btNFqmUh2hOx+tLniHydcFp K2cgAZg64yLgt7qwo43OVAA= X-Google-Smtp-Source: ABdhPJxuIbEUR2rjIgM+QIPwPcWDxqVzGadLvv5PLEpQI792X8OmRHPI+iyWRlhk+5SZC9wabjGa9A== X-Received: by 2002:a17:902:ce82:b0:156:bb3c:3297 with SMTP id f2-20020a170902ce8200b00156bb3c3297mr25408771plg.159.1649552237537; Sat, 09 Apr 2022 17:57:17 -0700 (PDT) Received: from octofox.hsd1.ca.comcast.net ([2601:641:401:1d20:172c:26af:268e:6e9f]) by smtp.gmail.com with ESMTPSA id l67-20020a633e46000000b003986e01e982sm25088215pga.67.2022.04.09.17.57.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Apr 2022 17:57:16 -0700 (PDT) From: Max Filippov To: linux-xtensa@linux-xtensa.org Cc: Chris Zankel , linux-kernel@vger.kernel.org, Duoming Zhou , Jakub Kicinski , Greg Kroah-Hartman , "David S. Miller" , Max Filippov Subject: [PATCH 2/4] xtensa: iss: replace iss_net_set_mac with eth_mac_addr Date: Sat, 9 Apr 2022 17:56:30 -0700 Message-Id: <20220410005632.3925219-3-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220410005632.3925219-1-jcmvbkbc@gmail.com> References: <20220410005632.3925219-1-jcmvbkbc@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" iss_net_set_mac is just a copy of eth_mac_addr with pointless locking. Drop this function and replace it with eth_mac_addr. Signed-off-by: Max Filippov --- arch/xtensa/platforms/iss/network.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/arch/xtensa/platforms/iss/network.c b/arch/xtensa/platforms/is= s/network.c index 409def002f55..e9454652551b 100644 --- a/arch/xtensa/platforms/iss/network.c +++ b/arch/xtensa/platforms/iss/network.c @@ -436,19 +436,6 @@ static void iss_net_tx_timeout(struct net_device *dev,= unsigned int txqueue) { } =20 -static int iss_net_set_mac(struct net_device *dev, void *addr) -{ - struct iss_net_private *lp =3D netdev_priv(dev); - struct sockaddr *hwaddr =3D addr; - - if (!is_valid_ether_addr(hwaddr->sa_data)) - return -EADDRNOTAVAIL; - spin_lock_bh(&lp->lock); - eth_hw_addr_set(dev, hwaddr->sa_data); - spin_unlock_bh(&lp->lock); - return 0; -} - static int iss_net_change_mtu(struct net_device *dev, int new_mtu) { return -EINVAL; @@ -474,7 +461,7 @@ static const struct net_device_ops iss_netdev_ops =3D { .ndo_start_xmit =3D iss_net_start_xmit, .ndo_validate_addr =3D eth_validate_addr, .ndo_change_mtu =3D iss_net_change_mtu, - .ndo_set_mac_address =3D iss_net_set_mac, + .ndo_set_mac_address =3D eth_mac_addr, .ndo_tx_timeout =3D iss_net_tx_timeout, .ndo_set_rx_mode =3D iss_net_set_multicast_list, }; --=20 2.30.2 From nobody Fri Jun 19 02:03:36 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31987C433F5 for ; Sun, 10 Apr 2022 00:57:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233899AbiDJA7k (ORCPT ); Sat, 9 Apr 2022 20:59:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58304 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233599AbiDJA7d (ORCPT ); Sat, 9 Apr 2022 20:59:33 -0400 Received: from mail-pf1-x431.google.com (mail-pf1-x431.google.com [IPv6:2607:f8b0:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C0B4564F6 for ; Sat, 9 Apr 2022 17:57:19 -0700 (PDT) Received: by mail-pf1-x431.google.com with SMTP id p25so4875478pfn.13 for ; Sat, 09 Apr 2022 17:57:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QZNoJQrBGI9JD45OnD6DIZaXO/kMMPWpj/KlmoCg03Y=; b=FwOQLSf/HG4LwtLIqHupe+fHvCXm64v1gVZDCBKGg2AlaliD20Q53zlWOFTcpktBiv ef1Cse59e0GnvQaf5ZSTC56IoAvVc6DPuHr6mgLHj2KfHXVCw6udysns5/2UmYAyn4nI kJ27R9b4jvpvLIoowVRqWDmH9leFfVyM78oaQAZDhF8V0va62+C7krCKyyhaUScoxt+J LJ84mJBOOSxbZAsrTHTB3JSWMW5CWKLWHhzNOLXNIO1ndYL3JjsWQ36z26uBoFNIxkGM VhNlSrVt8DrfQStWGm5LOemLMwOeE9gSAuHZAbDXl8g42GGQWqw+D1Vt+rvJZuAiAi2x cOOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QZNoJQrBGI9JD45OnD6DIZaXO/kMMPWpj/KlmoCg03Y=; b=eRA7vri/wvrfWL4Uj0GOURIN0myeRUFPmoOjYrGl3k4N1INeOuRKR16CHOGP0uS4JG N6vSiJek4F0W/FlA4TNQC8mIPzXY0r5/tK3x38b5no7IInYKXCorgRPs4XsPDY7YBfIQ Hx271XNgNbrG6MzKcFnWwf2VIu68AxfV1f57tfTjT6Tl8KjXgHHRuqbww6fvIa94IINh oZwqYvVOyVLr7fYeLJuihluD61OBXeuTN61x3YZOO+REw9lQ282szskfRp0hru8Ydlgq PR/xcILatsgIs893ds+yV4WG5ZjGyy9vzOQ+V4tEBL9a6DOhiUUwDk25NZfIbUVwGJsv fdsQ== X-Gm-Message-State: AOAM532M0uwhnGT10+UC3ItWCgu2XaA0k1k1YtAAwVc05WtruJbSVIp3 zmxu8xJuy3YvrWN8LWYBm2k= X-Google-Smtp-Source: ABdhPJy2HLDay9p3FhB603mR+SAS80G+Oqjxmw6ZZ7aLpSTa1A+RagKHOXktT7Fg5EH6FApxpv/osg== X-Received: by 2002:a63:4707:0:b0:382:207b:889c with SMTP id u7-20020a634707000000b00382207b889cmr21322246pga.541.1649552239187; Sat, 09 Apr 2022 17:57:19 -0700 (PDT) Received: from octofox.hsd1.ca.comcast.net ([2601:641:401:1d20:172c:26af:268e:6e9f]) by smtp.gmail.com with ESMTPSA id l67-20020a633e46000000b003986e01e982sm25088215pga.67.2022.04.09.17.57.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Apr 2022 17:57:18 -0700 (PDT) From: Max Filippov To: linux-xtensa@linux-xtensa.org Cc: Chris Zankel , linux-kernel@vger.kernel.org, Duoming Zhou , Jakub Kicinski , Greg Kroah-Hartman , "David S. Miller" , Max Filippov Subject: [PATCH 3/4] xtensa: iss: clean up per-device locking in network driver Date: Sat, 9 Apr 2022 17:56:31 -0700 Message-Id: <20220410005632.3925219-4-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220410005632.3925219-1-jcmvbkbc@gmail.com> References: <20220410005632.3925219-1-jcmvbkbc@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Per-device locking in the ISS network driver is used to protect poll timer and stats updates. Stat collection is not protected. Remove per-device locking everywhere except the stats updates. Replace ndo_get_stats callback with ndo_get_stats64 and use proper locking there as well. As a side effect this fixes possible deadlock between iss_net_close and iss_net_timer. Reported by: Duoming Zhou Signed-off-by: Max Filippov --- arch/xtensa/platforms/iss/network.c | 39 +++++++++++++---------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/arch/xtensa/platforms/iss/network.c b/arch/xtensa/platforms/is= s/network.c index e9454652551b..13802babba17 100644 --- a/arch/xtensa/platforms/iss/network.c +++ b/arch/xtensa/platforms/iss/network.c @@ -65,7 +65,7 @@ struct iss_net_private { struct net_device *dev; struct platform_device pdev; struct timer_list tl; - struct net_device_stats stats; + struct rtnl_link_stats64 stats; =20 struct timer_list timer; unsigned int timer_val; @@ -281,7 +281,9 @@ static int iss_net_rx(struct net_device *dev) =20 skb =3D dev_alloc_skb(dev->mtu + 2 + ETH_HEADER_OTHER); if (skb =3D=3D NULL) { + spin_lock_bh(&lp->lock); lp->stats.rx_dropped++; + spin_unlock_bh(&lp->lock); return 0; } =20 @@ -298,8 +300,10 @@ static int iss_net_rx(struct net_device *dev) skb_trim(skb, pkt_len); skb->protocol =3D lp->tp.protocol(skb); =20 + spin_lock_bh(&lp->lock); lp->stats.rx_bytes +=3D skb->len; lp->stats.rx_packets++; + spin_unlock_bh(&lp->lock); netif_rx(skb); return pkt_len; } @@ -314,13 +318,9 @@ static int iss_net_poll(struct iss_net_private *lp) if (!netif_running(lp->dev)) return 0; =20 - spin_lock(&lp->lock); - while ((err =3D iss_net_rx(lp->dev)) > 0) ret++; =20 - spin_unlock(&lp->lock); - if (err < 0) { pr_err("Device '%s' read returned %d, shutting it down\n", lp->dev->name, err); @@ -338,9 +338,7 @@ static void iss_net_timer(struct timer_list *t) struct iss_net_private *lp =3D from_timer(lp, t, timer); =20 iss_net_poll(lp); - spin_lock(&lp->lock); mod_timer(&lp->timer, jiffies + lp->timer_val); - spin_unlock(&lp->lock); } =20 =20 @@ -349,11 +347,9 @@ static int iss_net_open(struct net_device *dev) struct iss_net_private *lp =3D netdev_priv(dev); int err; =20 - spin_lock_bh(&lp->lock); - err =3D lp->tp.open(lp); if (err < 0) - goto out; + return err; =20 netif_start_queue(dev); =20 @@ -368,22 +364,17 @@ static int iss_net_open(struct net_device *dev) lp->timer_val =3D ISS_NET_TIMER_VALUE; mod_timer(&lp->timer, jiffies + lp->timer_val); =20 -out: - spin_unlock_bh(&lp->lock); return err; } =20 static int iss_net_close(struct net_device *dev) { struct iss_net_private *lp =3D netdev_priv(dev); - netif_stop_queue(dev); - spin_lock_bh(&lp->lock); =20 + netif_stop_queue(dev); del_timer_sync(&lp->timer); - lp->tp.close(lp); =20 - spin_unlock_bh(&lp->lock); return 0; } =20 @@ -393,13 +384,14 @@ static int iss_net_start_xmit(struct sk_buff *skb, st= ruct net_device *dev) int len; =20 netif_stop_queue(dev); - spin_lock_bh(&lp->lock); =20 len =3D lp->tp.write(lp, &skb); =20 if (len =3D=3D skb->len) { + spin_lock_bh(&lp->lock); lp->stats.tx_packets++; lp->stats.tx_bytes +=3D skb->len; + spin_unlock_bh(&lp->lock); netif_trans_update(dev); netif_start_queue(dev); =20 @@ -408,24 +400,29 @@ static int iss_net_start_xmit(struct sk_buff *skb, st= ruct net_device *dev) =20 } else if (len =3D=3D 0) { netif_start_queue(dev); + spin_lock_bh(&lp->lock); lp->stats.tx_dropped++; + spin_unlock_bh(&lp->lock); =20 } else { netif_start_queue(dev); pr_err("%s: %s failed(%d)\n", dev->name, __func__, len); } =20 - spin_unlock_bh(&lp->lock); =20 dev_kfree_skb(skb); return NETDEV_TX_OK; } =20 =20 -static struct net_device_stats *iss_net_get_stats(struct net_device *dev) +static void iss_net_get_stats64(struct net_device *dev, + struct rtnl_link_stats64 *stats) { struct iss_net_private *lp =3D netdev_priv(dev); - return &lp->stats; + + spin_lock_bh(&lp->lock); + *stats =3D lp->stats; + spin_unlock_bh(&lp->lock); } =20 static void iss_net_set_multicast_list(struct net_device *dev) @@ -457,7 +454,7 @@ static int driver_registered; static const struct net_device_ops iss_netdev_ops =3D { .ndo_open =3D iss_net_open, .ndo_stop =3D iss_net_close, - .ndo_get_stats =3D iss_net_get_stats, + .ndo_get_stats64 =3D iss_net_get_stats64, .ndo_start_xmit =3D iss_net_start_xmit, .ndo_validate_addr =3D eth_validate_addr, .ndo_change_mtu =3D iss_net_change_mtu, --=20 2.30.2 From nobody Fri Jun 19 02:03:36 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D308FC433F5 for ; Sun, 10 Apr 2022 00:57:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233646AbiDJA7q (ORCPT ); Sat, 9 Apr 2022 20:59:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58344 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233658AbiDJA7e (ORCPT ); Sat, 9 Apr 2022 20:59:34 -0400 Received: from mail-pg1-x52a.google.com (mail-pg1-x52a.google.com [IPv6:2607:f8b0:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 888CCC0 for ; Sat, 9 Apr 2022 17:57:21 -0700 (PDT) Received: by mail-pg1-x52a.google.com with SMTP id s21so6582662pgv.13 for ; Sat, 09 Apr 2022 17:57:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4iRUXL5EjBMyBZSPE/qcFAd30W/jy0/d7mesyYzIDjE=; b=a6MdRpZNHypAnH2GDSZ1p5dpqA4nHrNO3ZbUHBzNlMwwxwiSspxlmVP8qSgtfAy3Kx Ata4cquvJL5jyp4yprQn73mHpLLxLpNIVah/m9DAldEohIV+WcPHhy6T/+HMW1eAJGz/ EUqI4BeGzJLbypf5p6zbup1US7KHJ6ozxiq6HqvOPxRvIj4NDaSl1W5N1mcQtKwVrdrJ UjmNDu1soJOlYWlRifnefGJmUqw3yhBCuNuXZC3ElgXT9WpTngMjrHmAoRXTETSLQPkP wz8tvSJO3+RLwVtt2aXQrcRw5Wiy/0di9MQo6yLcmHsYXq98AG/9Y+T2OEb9/w2DrpJO WCug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4iRUXL5EjBMyBZSPE/qcFAd30W/jy0/d7mesyYzIDjE=; b=QQO8hHYz8gBCHSp1DMXOwXPdf+jVKQbLGr/WK1hkjZMNiER+ZK7jguvhY+IQG6hiLV lxhD7bC8O0Dhbk1L43vlsMAz1D/CHhuR9yHM1Y4fKVnz0nnNm1rtWOpkYqEdKEkZsZDV NlBm0e9NUlJIwryoQdPT8intO9xBsnryihSa8zAvZRXAAszi39G+pKDr/wr0+GLI93Sm DPFQjI/VtH5zAiQsPbe8P5WoAiMTHxqiJ9PoaWheVVxwAtRk1XaNq+1IqonEaWrdSPPo W4cN96KJGvcSguYq7YFLnQaUuwlIB3ersdUscntgrxKWVibQtD2B6+FlCYuKnmVsoRqL yQCA== X-Gm-Message-State: AOAM533NC5M58lJjSa5SwEBHLGKtxwxlzgmHfmUJnHsf7hjJc7yWfS6k ZpDDlwR9GtnHwLCX4lMXtEA= X-Google-Smtp-Source: ABdhPJxzQ2ENfrXJ19nbHzvj3yrTKUn+qIqOGgMXwQpALKXXpGJikbZTWUa4stddYRTxHyPP9wDgeA== X-Received: by 2002:a05:6a00:985:b0:505:9b3b:3fd6 with SMTP id u5-20020a056a00098500b005059b3b3fd6mr5038821pfg.30.1649552240941; Sat, 09 Apr 2022 17:57:20 -0700 (PDT) Received: from octofox.hsd1.ca.comcast.net ([2601:641:401:1d20:172c:26af:268e:6e9f]) by smtp.gmail.com with ESMTPSA id l67-20020a633e46000000b003986e01e982sm25088215pga.67.2022.04.09.17.57.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Apr 2022 17:57:20 -0700 (PDT) From: Max Filippov To: linux-xtensa@linux-xtensa.org Cc: Chris Zankel , linux-kernel@vger.kernel.org, Duoming Zhou , Jakub Kicinski , Greg Kroah-Hartman , "David S. Miller" , Max Filippov Subject: [PATCH 4/4] xtensa: iss: extract and constify network callbacks Date: Sat, 9 Apr 2022 17:56:32 -0700 Message-Id: <20220410005632.3925219-5-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220410005632.3925219-1-jcmvbkbc@gmail.com> References: <20220410005632.3925219-1-jcmvbkbc@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Instead of storing pointers to callback functions in the struct iss_net_private::tp move them to struct struct iss_net_ops and store a const pointer to it. Make static const tuntap_ops structure with tuntap callbacks and initialize tp.net_ops with it in the tuntap_probe. Signed-off-by: Max Filippov --- arch/xtensa/platforms/iss/network.c | 47 +++++++++++++++++------------ 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/arch/xtensa/platforms/iss/network.c b/arch/xtensa/platforms/is= s/network.c index 13802babba17..fd84d4891758 100644 --- a/arch/xtensa/platforms/iss/network.c +++ b/arch/xtensa/platforms/iss/network.c @@ -56,6 +56,17 @@ struct tuntap_info { /* -----------------------------------------------------------------------= -- */ =20 =20 +struct iss_net_private; + +struct iss_net_ops { + int (*open)(struct iss_net_private *lp); + void (*close)(struct iss_net_private *lp); + int (*read)(struct iss_net_private *lp, struct sk_buff **skb); + int (*write)(struct iss_net_private *lp, struct sk_buff **skb); + unsigned short (*protocol)(struct sk_buff *skb); + int (*poll)(struct iss_net_private *lp); +}; + /* This structure contains out private information for the driver. */ =20 struct iss_net_private { @@ -78,12 +89,7 @@ struct iss_net_private { struct tuntap_info tuntap; } info; =20 - int (*open)(struct iss_net_private *lp); - void (*close)(struct iss_net_private *lp); - int (*read)(struct iss_net_private *lp, struct sk_buff **skb); - int (*write)(struct iss_net_private *lp, struct sk_buff **skb); - unsigned short (*protocol)(struct sk_buff *skb); - int (*poll)(struct iss_net_private *lp); + const struct iss_net_ops *net_ops; } tp; =20 }; @@ -211,6 +217,15 @@ static int tuntap_poll(struct iss_net_private *lp) return simc_poll(lp->tp.info.tuntap.fd); } =20 +static const struct iss_net_ops tuntap_ops =3D { + .open =3D tuntap_open, + .close =3D tuntap_close, + .read =3D tuntap_read, + .write =3D tuntap_write, + .protocol =3D tuntap_protocol, + .poll =3D tuntap_poll, +}; + /* * ethX=3Dtuntap,[mac address],device name */ @@ -253,13 +268,7 @@ static int tuntap_probe(struct iss_net_private *lp, in= t index, char *init) lp->mtu =3D TRANSPORT_TUNTAP_MTU; =20 lp->tp.info.tuntap.fd =3D -1; - - lp->tp.open =3D tuntap_open; - lp->tp.close =3D tuntap_close; - lp->tp.read =3D tuntap_read; - lp->tp.write =3D tuntap_write; - lp->tp.protocol =3D tuntap_protocol; - lp->tp.poll =3D tuntap_poll; + lp->tp.net_ops =3D &tuntap_ops; =20 return 1; } @@ -274,7 +283,7 @@ static int iss_net_rx(struct net_device *dev) =20 /* Check if there is any new data. */ =20 - if (lp->tp.poll(lp) =3D=3D 0) + if (lp->tp.net_ops->poll(lp) =3D=3D 0) return 0; =20 /* Try to allocate memory, if it fails, try again next round. */ @@ -293,12 +302,12 @@ static int iss_net_rx(struct net_device *dev) =20 skb->dev =3D dev; skb_reset_mac_header(skb); - pkt_len =3D lp->tp.read(lp, &skb); + pkt_len =3D lp->tp.net_ops->read(lp, &skb); skb_put(skb, pkt_len); =20 if (pkt_len > 0) { skb_trim(skb, pkt_len); - skb->protocol =3D lp->tp.protocol(skb); + skb->protocol =3D lp->tp.net_ops->protocol(skb); =20 spin_lock_bh(&lp->lock); lp->stats.rx_bytes +=3D skb->len; @@ -347,7 +356,7 @@ static int iss_net_open(struct net_device *dev) struct iss_net_private *lp =3D netdev_priv(dev); int err; =20 - err =3D lp->tp.open(lp); + err =3D lp->tp.net_ops->open(lp); if (err < 0) return err; =20 @@ -373,7 +382,7 @@ static int iss_net_close(struct net_device *dev) =20 netif_stop_queue(dev); del_timer_sync(&lp->timer); - lp->tp.close(lp); + lp->tp.net_ops->close(lp); =20 return 0; } @@ -385,7 +394,7 @@ static int iss_net_start_xmit(struct sk_buff *skb, stru= ct net_device *dev) =20 netif_stop_queue(dev); =20 - len =3D lp->tp.write(lp, &skb); + len =3D lp->tp.net_ops->write(lp, &skb); =20 if (len =3D=3D skb->len) { spin_lock_bh(&lp->lock); --=20 2.30.2