From patchwork Thu Nov 30 13:32:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomasz Duszynski X-Patchwork-Id: 31830 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6F91A4C57; Thu, 30 Nov 2017 14:32:45 +0100 (CET) Received: from mail-lf0-f67.google.com (mail-lf0-f67.google.com [209.85.215.67]) by dpdk.org (Postfix) with ESMTP id 3EC0E3259 for ; Thu, 30 Nov 2017 14:32:42 +0100 (CET) Received: by mail-lf0-f67.google.com with SMTP id l81so7903380lfl.6 for ; Thu, 30 Nov 2017 05:32:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=damFQuOtvKGyebEwTL6+xm/7EgQ4X8HztlhDEDpUsrM=; b=bZuZrepi+RA5im12oh2jMtSB9JnSg4vRqoJcaThpItEW6fsD8AUGtg1XfIDF+AxdnL oqjGRN9s2XIOStpLOKxrHJB9uIEjFrI6wUEKF+TfTujKzi2LEUA1ERAFXACVvwPi/q9x ftBUNyjDD66+W3xZ0t/9OGXJZ3iRRIaT7hlu/arwpL0zMZCl95VZIpHXMHb8SBwQ4br3 EDpeg1eIIRCiUwbGnnXw8WTUQo45hg3V2f0gai/WDWhQWfIo3MeOiAdvxqKa21lA0k8v 2pBiHDpIuDJHnJdyGNQim80G/Ue0KSAi1Eip5ByTdl2GSuSbqeM0SaL+1816fQNstz2z cH/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=damFQuOtvKGyebEwTL6+xm/7EgQ4X8HztlhDEDpUsrM=; b=lQLtcTCmTB6y2SwEz7ixRWKgmuIB+H6j2qR7hUmiAexJjOwWPuqyD7PjZfBFssIH/6 xr4Aqi2ndGwLCnMlhFdHKdXHT3hvt5q6yzM3zts9Fzj5loRjOHLfOF/4fFBvhlTJmuOY 8WJwWdq0YJbn0Y74VuBWsOD8/DpTTCXZEtBlal6DEw09wKF4WzbQTiA94hO/7PCIrm9w zobhmsLienQgsVg5N07wcpN25iYC8FP24B5tGSF8qbsYcs3mfjKbyddc30IcT1OqDZCq ARh0H3HvzJtrG461aYosOZxFw/n+N0Syn3/fq6bHNiPkuQ5VTQq/8qXc7LtQXlxT41c2 cflg== X-Gm-Message-State: AJaThX5hGOQFvegOXG3Dqsl2PPuVZxgBxGPyEdBZkles19AF5e2JwslP y6ALaqFiEJTHmUcaj+IZOG8RwqT0DfU= X-Google-Smtp-Source: AGs4zMZjiooUPQqhyjCpp7w++BT2sDBq0cxuGZ8huJPlbM9atQBvF3jcIgy8d8luEBCvZraQhFnGPA== X-Received: by 10.46.48.5 with SMTP id w5mr2872038ljw.99.1512048761637; Thu, 30 Nov 2017 05:32:41 -0800 (PST) Received: from tdu.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id x27sm717277lfb.23.2017.11.30.05.32.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 30 Nov 2017 05:32:40 -0800 (PST) From: Tomasz Duszynski To: dev@dpdk.org Cc: mw@semihalf.com, jck@semihalf.com, dima@marvell.com, nsamsono@marvell.com, jianbo.liu@arm.com, Tomasz Duszynski Date: Thu, 30 Nov 2017 14:32:20 +0100 Message-Id: <1512048743-23749-5-git-send-email-tdu@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1512048743-23749-1-git-send-email-tdu@semihalf.com> References: <1512048743-23749-1-git-send-email-tdu@semihalf.com> Subject: [dpdk-dev] [PATCH 4/7] net/mrvl: check if ppio is initialized X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Uninitialized ppio cannot be passed to MUSDK library routines as application will crash. Fix this by first checking whether ppio has been initialized. Signed-off-by: Tomasz Duszynski --- drivers/net/mrvl/mrvl_ethdev.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/drivers/net/mrvl/mrvl_ethdev.c b/drivers/net/mrvl/mrvl_ethdev.c index 89eec44..92cc283 100644 --- a/drivers/net/mrvl/mrvl_ethdev.c +++ b/drivers/net/mrvl/mrvl_ethdev.c @@ -329,6 +329,9 @@ mrvl_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) if (mtu < ETHER_MIN_MTU || mru > MRVL_PKT_SIZE_MAX) return -EINVAL; + if (!priv->ppio) + return -EPERM; + ret = pp2_ppio_set_mru(priv->ppio, mru); if (ret) return ret; @@ -351,6 +354,9 @@ mrvl_dev_set_link_up(struct rte_eth_dev *dev) struct mrvl_priv *priv = dev->data->dev_private; int ret; + if (!priv->ppio) + return -EPERM; + ret = pp2_ppio_enable(priv->ppio); if (ret) return ret; @@ -383,6 +389,9 @@ mrvl_dev_set_link_down(struct rte_eth_dev *dev) { struct mrvl_priv *priv = dev->data->dev_private; + if (!priv->ppio) + return -EPERM; + return pp2_ppio_disable(priv->ppio); } @@ -629,6 +638,9 @@ mrvl_link_update(struct rte_eth_dev *dev, int wait_to_complete __rte_unused) struct ifreq req; int ret, fd, link_up; + if (!priv->ppio) + return -EPERM; + edata.cmd = ETHTOOL_GSET; strcpy(req.ifr_name, dev->data->name); @@ -685,6 +697,9 @@ mrvl_promiscuous_enable(struct rte_eth_dev *dev) struct mrvl_priv *priv = dev->data->dev_private; int ret; + if (!priv->ppio) + return; + ret = pp2_ppio_set_promisc(priv->ppio, 1); if (ret) RTE_LOG(ERR, PMD, "Failed to enable promiscuous mode\n"); @@ -702,6 +717,9 @@ mrvl_allmulticast_enable(struct rte_eth_dev *dev) struct mrvl_priv *priv = dev->data->dev_private; int ret; + if (!priv->ppio) + return; + ret = pp2_ppio_set_mc_promisc(priv->ppio, 1); if (ret) RTE_LOG(ERR, PMD, "Failed enable all-multicast mode\n"); @@ -719,6 +737,9 @@ mrvl_promiscuous_disable(struct rte_eth_dev *dev) struct mrvl_priv *priv = dev->data->dev_private; int ret; + if (!priv->ppio) + return; + ret = pp2_ppio_set_promisc(priv->ppio, 0); if (ret) RTE_LOG(ERR, PMD, "Failed to disable promiscuous mode\n"); @@ -736,6 +757,9 @@ mrvl_allmulticast_disable(struct rte_eth_dev *dev) struct mrvl_priv *priv = dev->data->dev_private; int ret; + if (!priv->ppio) + return; + ret = pp2_ppio_set_mc_promisc(priv->ppio, 0); if (ret) RTE_LOG(ERR, PMD, "Failed to disable all-multicast mode\n"); @@ -756,6 +780,9 @@ mrvl_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index) char buf[ETHER_ADDR_FMT_SIZE]; int ret; + if (!priv->ppio) + return; + ret = pp2_ppio_remove_mac_addr(priv->ppio, dev->data->mac_addrs[index].addr_bytes); if (ret) { @@ -792,6 +819,9 @@ mrvl_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac_addr, /* For setting index 0, mrvl_mac_addr_set() should be used.*/ return -1; + if (!priv->ppio) + return -EPERM; + /* * Maximum number of uc addresses can be tuned via kernel module mvpp2x * parameter uc_filter_max. Maximum number of mc addresses is then @@ -829,6 +859,9 @@ mrvl_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr) struct mrvl_priv *priv = dev->data->dev_private; int ret; + if (!priv->ppio) + return; + ret = pp2_ppio_set_mac_addr(priv->ppio, mac_addr->addr_bytes); if (ret) { char buf[ETHER_ADDR_FMT_SIZE]; @@ -856,6 +889,9 @@ mrvl_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) uint64_t drop_mac = 0; unsigned int i, idx, ret; + if (!priv->ppio) + return -EPERM; + for (i = 0; i < dev->data->nb_rx_queues; i++) { struct mrvl_rxq *rxq = dev->data->rx_queues[i]; struct pp2_ppio_inq_statistics rx_stats; @@ -948,6 +984,9 @@ mrvl_stats_reset(struct rte_eth_dev *dev) struct mrvl_priv *priv = dev->data->dev_private; int i; + if (!priv->ppio) + return; + for (i = 0; i < dev->data->nb_rx_queues; i++) { struct mrvl_rxq *rxq = dev->data->rx_queues[i]; @@ -1104,6 +1143,9 @@ mrvl_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) { struct mrvl_priv *priv = dev->data->dev_private; + if (!priv->ppio) + return -EPERM; + return on ? pp2_ppio_add_vlan(priv->ppio, vlan_id) : pp2_ppio_remove_vlan(priv->ppio, vlan_id); }