From patchwork Tue Jul 27 13:44:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 486705 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:1185:0:0:0:0 with SMTP id f5csp232024jas; Tue, 27 Jul 2021 06:46:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxsny4gXoPSJ1oMOKSxCI14vABVFGm9vpQESdIn+sst0Nvd2pNuA9BjLqPi3G8JvMQemtmX X-Received: by 2002:aa7:cb91:: with SMTP id r17mr27984481edt.99.1627393603313; Tue, 27 Jul 2021 06:46:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627393603; cv=none; d=google.com; s=arc-20160816; b=UWZU3MgyzyElgGqrp3GATk3nCtYteU48QXYvDaep1qYpbMYl8PNS95qz8bLuDPQtth d/tcHc/3b3F0H5FKGPgr3GcIfkCQ56zIL4HjHoBx2PB9MDbrbPuHixsO5ViyUwAoLag3 vniDKcHeTA3ZZ3E6kM4N/fJ/PGEQFjgCsKLj6Qmrajl0z7a2syhx5JDjkS1f65W7tSy/ uwk++4dGpMdcyOI+NwtgTkYI7yBPXVpv7vXn9KtOXMX2MujSwnQxBqIgT7jR5DOudnHy kVTU5DCa7uII7w5KhPDlhwFLaj3Al5cdq9rG3epQo/NjmcUOlMTjVookxscagbcCVAAf +Lxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Zf0YLxDc+1WhrtE0R1x5ImDlrFXKBU+hsF4PdegZstg=; b=mxcCiuYNvBrfffh8QV8Oep3fBFunen07da44j9d7QzRgrbjtc1C76Np4l/QmGrodda JAs1OTsAsCZLyfB8ZKknfrZ7GiJAx3AqWqjydX4f/RIk2i6GAHKvlnR4mqz0TiJlIGVI w0wAkIWx02l9W6S3hRS3osxTkidytxWGynxxb8SEX/eEPPLCsUNV0s94y5zAF8n9nc1x WHmRTykAN4ZomkMcOokHpLzKH5afyoA5aWKWVocHW727rUl8CwrYC0ltAz2sAKUTOCd0 XVEYN4MaftkvDGNoMhV12gELO8vWIyb8e+MxE8WuUBqjOOMKDApV3zoir4zGG2XoGxZu nGtg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=TvumA8Ew; spf=pass (google.com: domain of netdev-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id mj21si2782750ejb.25.2021.07.27.06.46.43; Tue, 27 Jul 2021 06:46:43 -0700 (PDT) Received-SPF: pass (google.com: domain of netdev-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=TvumA8Ew; spf=pass (google.com: domain of netdev-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237046AbhG0Nqf (ORCPT + 8 others); Tue, 27 Jul 2021 09:46:35 -0400 Received: from mail.kernel.org ([198.145.29.99]:46450 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236805AbhG0NqQ (ORCPT ); Tue, 27 Jul 2021 09:46:16 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8621E61A8D; Tue, 27 Jul 2021 13:46:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1627393576; bh=dfFtRwhmshTCcPVwDZ2Z2pUhPD3m5IvZY+PMD6+ey7A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TvumA8EwQkekwtFpQy4p16tZw7UAFLngY2omlwB/UoBbVQzYizMk4dDqsTQdSyAEW gn8lHMrWDfO7TuWz32F+jCEdS+akXlmGH5QyVVm4k3bRk4Dop5r1xvt4gzBZ0jcDNC mIuTBqjZJ+8sC7k4WUA5gMjtSZaa1ZFV/Nn1QK5kMffxrM9HmTUYhzfnkPhxUCaX4L DfucGjj3wh+/eeZe8aAy6qhva4g3rLYEJCCmcpDIPjlDjzSBvMNnnRhALcVt00xPsR w5/RSrKMeTGNO8JCnoUbnGOzyQuOJx7U0SLxza/VkpU6p6qJAauP46lwpELtwbHzh0 uDrFoKnyD9otw== From: Arnd Bergmann To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Arnd Bergmann Subject: [PATCH net-next v3 10/31] hamachi: use ndo_siocdevprivate Date: Tue, 27 Jul 2021 15:44:56 +0200 Message-Id: <20210727134517.1384504-11-arnd@kernel.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210727134517.1384504-1-arnd@kernel.org> References: <20210727134517.1384504-1-arnd@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Arnd Bergmann hamachi has one command that overloads the ifreq argument and requires a conversion to ndo_siocdevprivate in order to make compat mode work, so split it from ndo_ioctl. Signed-off-by: Arnd Bergmann --- drivers/net/ethernet/packetengines/hamachi.c | 63 ++++++++++++-------- 1 file changed, 38 insertions(+), 25 deletions(-) -- 2.29.2 diff --git a/drivers/net/ethernet/packetengines/hamachi.c b/drivers/net/ethernet/packetengines/hamachi.c index d058a63602a9..94823c5f7dff 100644 --- a/drivers/net/ethernet/packetengines/hamachi.c +++ b/drivers/net/ethernet/packetengines/hamachi.c @@ -546,7 +546,9 @@ static int read_eeprom(void __iomem *ioaddr, int location); static int mdio_read(struct net_device *dev, int phy_id, int location); static void mdio_write(struct net_device *dev, int phy_id, int location, int value); static int hamachi_open(struct net_device *dev); -static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); +static int hamachi_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); +static int hamachi_siocdevprivate(struct net_device *dev, struct ifreq *rq, + void __user *data, int cmd); static void hamachi_timer(struct timer_list *t); static void hamachi_tx_timeout(struct net_device *dev, unsigned int txqueue); static void hamachi_init_ring(struct net_device *dev); @@ -571,7 +573,8 @@ static const struct net_device_ops hamachi_netdev_ops = { .ndo_validate_addr = eth_validate_addr, .ndo_set_mac_address = eth_mac_addr, .ndo_tx_timeout = hamachi_tx_timeout, - .ndo_do_ioctl = netdev_ioctl, + .ndo_do_ioctl = hamachi_ioctl, + .ndo_siocdevprivate = hamachi_siocdevprivate, }; @@ -1867,7 +1870,36 @@ static const struct ethtool_ops ethtool_ops_no_mii = { .get_drvinfo = hamachi_get_drvinfo, }; -static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) +/* private ioctl: set rx,tx intr params */ +static int hamachi_siocdevprivate(struct net_device *dev, struct ifreq *rq, + void __user *data, int cmd) +{ + struct hamachi_private *np = netdev_priv(dev); + u32 *d = (u32 *)&rq->ifr_ifru; + + if (!netif_running(dev)) + return -EINVAL; + + if (cmd != SIOCDEVPRIVATE + 3) + return -EOPNOTSUPP; + + /* Should add this check here or an ordinary user can do nasty + * things. -KDU + * + * TODO: Shut down the Rx and Tx engines while doing this. + */ + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + writel(d[0], np->base + TxIntrCtrl); + writel(d[1], np->base + RxIntrCtrl); + printk(KERN_NOTICE "%s: tx %08x, rx %08x intr\n", dev->name, + (u32)readl(np->base + TxIntrCtrl), + (u32)readl(np->base + RxIntrCtrl)); + + return 0; +} + +static int hamachi_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct hamachi_private *np = netdev_priv(dev); struct mii_ioctl_data *data = if_mii(rq); @@ -1876,28 +1908,9 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) if (!netif_running(dev)) return -EINVAL; - if (cmd == (SIOCDEVPRIVATE+3)) { /* set rx,tx intr params */ - u32 *d = (u32 *)&rq->ifr_ifru; - /* Should add this check here or an ordinary user can do nasty - * things. -KDU - * - * TODO: Shut down the Rx and Tx engines while doing this. - */ - if (!capable(CAP_NET_ADMIN)) - return -EPERM; - writel(d[0], np->base + TxIntrCtrl); - writel(d[1], np->base + RxIntrCtrl); - printk(KERN_NOTICE "%s: tx %08x, rx %08x intr\n", dev->name, - (u32) readl(np->base + TxIntrCtrl), - (u32) readl(np->base + RxIntrCtrl)); - rc = 0; - } - - else { - spin_lock_irq(&np->lock); - rc = generic_mii_ioctl(&np->mii_if, data, cmd, NULL); - spin_unlock_irq(&np->lock); - } + spin_lock_irq(&np->lock); + rc = generic_mii_ioctl(&np->mii_if, data, cmd, NULL); + spin_unlock_irq(&np->lock); return rc; }