Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp661055yba; Wed, 24 Apr 2019 07:37:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqzaNWNKLTPXqdj2/t6zZ+y+gXF27tfD7VixeYaNrPphUs0yuDev6wEOA1ZeeL2jWQjeKVAU X-Received: by 2002:a63:d84a:: with SMTP id k10mr30678458pgj.441.1556116656915; Wed, 24 Apr 2019 07:37:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556116656; cv=none; d=google.com; s=arc-20160816; b=EsSin0MTG/IIYILh3ZVLyUN3HFz7N8x63qnRh7nAdYApM1KciD2bpCOp6ZHpOFPAp9 hkiqWjXS+Q1ZHC+RhAlupZwfLBwGevtBA58kIK6r3umUSKkAAb53L/sWi9G0RJPmH9EM y2qrqwx106foTYSGT6LdHAc+/WqAKBfh5AYaD3am/wiLG2iDkHzOxSl5x4+r0cpmw6TD uCPsgT1kOCilhZwsjkuZisyi7aVwwSQ79fKr2h6Gexi5Dp9iQtNbmMuAuC/n/p8ehTAN GqPvJT44jkXGY9vbYYVV7zGApQkmVOgv2SMLPMnu/AfDtS3kM689kusVzy0aKkpYGeG3 mkQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=a3yLVh/dDasJFIaEAVPd/67SEnv3Dg40Tcx6fiTJrV4=; b=A12x8E9t7MHh87DR9ftZjAuOE/mSXGOQXHlUxNlG5ugw2CciVLrB8tpvSzINx6Exte lO0MdQu8hB8wLj6zPAm3w+PmW7ZjEO1QbHMAD9re2ZT95rtuMdPT0WJK1KYMy7nbpXLe /o+2STCOd9D4xlpsGzc2wTHvBOqzFdpFRC2DM2WbpniBL6E3ozx5RwBo6yeP0z7O/h2f 7Vbiirbe9q1s0cvNgs2JxNmjhLWp9v3Pp4zSaCU6g2FCFAd2gzuEKuIKg8i9ob4yv3zL 4PkCLHjOnuEl/+08/CHy2ZUYu7343gH6FIb0vGdynf2Relp92T8kDLTXLL4ACIujNW6v 0E2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=muvTr9WU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-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. [209.132.180.67]) by mx.google.com with ESMTP id m86si19187670pfi.235.2019.04.24.07.37.21; Wed, 24 Apr 2019 07:37:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=muvTr9WU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-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 S1731471AbfDXOfu (ORCPT + 99 others); Wed, 24 Apr 2019 10:35:50 -0400 Received: from mail.kernel.org ([198.145.29.99]:39516 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731457AbfDXOft (ORCPT ); Wed, 24 Apr 2019 10:35:49 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0AE3A21900; Wed, 24 Apr 2019 14:35:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556116548; bh=I8ME4sMb2MLvHQUYSA28xKtIAeeuJLe5LNC68ZX3Zp8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=muvTr9WU0lXn3sl51M7iuCjfgTyTf8fT1AO/eir8z+kfmi50n5pxkT63nWMNGys97 /BCzYuirph5yMDFec1Qgvk3phXjeoDdfR2TnFL1qX/z4fMxZHY4lGgBfytIkVQ+c0o +qe5xA+f3ZWYTzs+/6c3+XXnt4V1esg/TxEdlgk8= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Yonglong Liu , "David S . Miller" , Sasha Levin , netdev@vger.kernel.org Subject: [PATCH AUTOSEL 5.0 49/66] net: hns: fix ICMP6 neighbor solicitation messages discard problem Date: Wed, 24 Apr 2019 10:33:23 -0400 Message-Id: <20190424143341.27665-49-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190424143341.27665-1-sashal@kernel.org> References: <20190424143341.27665-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yonglong Liu [ Upstream commit f058e46855dcbc28edb2ed4736f38a71fd19cadb ] ICMP6 neighbor solicitation messages will be discard by the Hip06 chips, because of not setting forwarding pool. Enable promisc mode has the same problem. This patch fix the wrong forwarding table configs for the multicast vague matching when enable promisc mode, and add forwarding pool for the forwarding table. Signed-off-by: Yonglong Liu Signed-off-by: David S. Miller Signed-off-by: Sasha Levin (Microsoft) --- .../ethernet/hisilicon/hns/hns_dsaf_main.c | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c index ac55db065f16..f5ff07cb2b72 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c @@ -2750,6 +2750,17 @@ int hns_dsaf_get_regs_count(void) return DSAF_DUMP_REGS_NUM; } +static int hns_dsaf_get_port_id(u8 port) +{ + if (port < DSAF_SERVICE_NW_NUM) + return port; + + if (port >= DSAF_BASE_INNER_PORT_NUM) + return port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM; + + return -EINVAL; +} + static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port) { struct dsaf_tbl_tcam_ucast_cfg tbl_tcam_ucast = {0, 1, 0, 0, 0x80}; @@ -2815,23 +2826,33 @@ static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port) memset(&temp_key, 0x0, sizeof(temp_key)); mask_entry.addr[0] = 0x01; hns_dsaf_set_mac_key(dsaf_dev, &mask_key, mask_entry.in_vlan_id, - port, mask_entry.addr); + 0xf, mask_entry.addr); tbl_tcam_mcast.tbl_mcast_item_vld = 1; tbl_tcam_mcast.tbl_mcast_old_en = 0; - if (port < DSAF_SERVICE_NW_NUM) { - mskid = port; - } else if (port >= DSAF_BASE_INNER_PORT_NUM) { - mskid = port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM; - } else { + /* set MAC port to handle multicast */ + mskid = hns_dsaf_get_port_id(port); + if (mskid == -EINVAL) { dev_err(dsaf_dev->dev, "%s,pnum(%d)error,key(%#x:%#x)\n", dsaf_dev->ae_dev.name, port, mask_key.high.val, mask_key.low.val); return; } + dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32], + mskid % 32, 1); + /* set pool bit map to handle multicast */ + mskid = hns_dsaf_get_port_id(port_num); + if (mskid == -EINVAL) { + dev_err(dsaf_dev->dev, + "%s, pool bit map pnum(%d)error,key(%#x:%#x)\n", + dsaf_dev->ae_dev.name, port_num, + mask_key.high.val, mask_key.low.val); + return; + } dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32], mskid % 32, 1); + memcpy(&temp_key, &mask_key, sizeof(mask_key)); hns_dsaf_tcam_mc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_mc, (struct dsaf_tbl_tcam_data *)(&mask_key), -- 2.19.1