Received: by 10.192.165.148 with SMTP id m20csp3427005imm; Mon, 7 May 2018 12:05:24 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqx1QVC/eS+p2y2YRHUVX3AiOLnzmz4vE2ACniQ5h5RJayhB3X8NmDFvQz2UvxBER3HbhX0 X-Received: by 2002:a9d:2221:: with SMTP id o30-v6mr15568556ota.327.1525719924743; Mon, 07 May 2018 12:05:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525719924; cv=none; d=google.com; s=arc-20160816; b=FW9LzWNn8o0QpTN9F0sXnAGYLpBbzhCr7WTXD8N5v8EKiJSXInfwNKWHhBCnxZjIIa /mCjh9OZ9sZrVXyj/g5wPrg9C+MMIMmxzDR5qYNBoLQACH3nE1vhd4sggTxsAwrr7Dej pz+wdZVLYH5/pl4P+eciBHlfBOWjNenMGjpaV8mAoa6t5ZFZZNl0sj3mJ3oA9W8FZDYX 22w3vC1vaAIZDT/l45OUizm8EFO+UReXulZ5C5QbNXlL0/RC2V4WjrRrfdcoB5bGwbRS ObYHNdIB3sg7XADtvo1mNAeBvxUaPrlQ+ZFN8hgcxckA12GzmUimQYgd1CfUMcVv/s9n i8MA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=brGlNS7w998M6XE7Klb/TTgHLmWa4IrnVQi+VweP5uI=; b=Of4ZiYfSBLFHy++l/4C/34M81vdIh14Ur1R56VtRzbCoI8ZStuzfkUVOax+UwQ3Bjv xjwglXsuGSEZ2erQv24hAfCtn9PtLSKWCBpthklCWy7tmT07uCsln8+8V1MfHH64+dC/ tB2IfGzbeXrZSq2ZFxwyGQvyBINzIioyiq9GLON1DhsP51ntgyhZa3tRclq6nOVr20+d Olk7nqGcUwHfJnzWCpumvDRD6QBfCopoSp3401HrJ9ESFRVLnQvGFBeCiEJU63s8thh6 hipNID4Istn3nRmH1eEqm1VqaCe9YuVvM6fX1su9ZApF+X6vhAxTPETw2uvoDaMq1RCg TS8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=kC+gvcCh; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z6-v6si5024950oiz.167.2018.05.07.12.05.08; Mon, 07 May 2018 12:05:24 -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=@gmail.com header.s=20161025 header.b=kC+gvcCh; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752772AbeEGTCz (ORCPT + 99 others); Mon, 7 May 2018 15:02:55 -0400 Received: from mail-ua0-f193.google.com ([209.85.217.193]:33752 "EHLO mail-ua0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752335AbeEGTCx (ORCPT ); Mon, 7 May 2018 15:02:53 -0400 Received: by mail-ua0-f193.google.com with SMTP id i2so19104037uah.0; Mon, 07 May 2018 12:02:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=brGlNS7w998M6XE7Klb/TTgHLmWa4IrnVQi+VweP5uI=; b=kC+gvcChdmwmk9wxIly/XnksT9aAsGytyWMnAK+rlGAeXLPZPiQrwIQ9vKa2PHuQ1y keNwtUhldLEPFvXx9NF8OR7rXENEuqtAV676UZrMuMavhA5/a9n7ZW1adk1jrMOIed92 Z8kvO07w3gdwnXdYjzoMdO+jmC6kn4AaKvHWzq6+sCXewTxFAMwV4XA9BdkGoVD/yGl5 Z/q9zNrKmKOWL4Dw3WbcUdDpA2/K9IGH6ww+kGrxbZdlsNxcIsmrxwaHeC5F0qSSYkxH DmrhWZAiRB3LQ7L43d2Hqz1FCAQieS/91wtneuJDkn2XJV9RPVn474vKifYdbj3tL3Zz vEQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=brGlNS7w998M6XE7Klb/TTgHLmWa4IrnVQi+VweP5uI=; b=eqD3Hd7aE1eiQJtpSAUi5HvNhvN7LHaVtvlLfHv5REUFiqM2vIv1WRFSoNz9NuuvGh SNZFAPFp1s2AJthzRNoM7gcAnJdb+vGIEFPmRH2NqXO3sbpYNx5rsZD+yxJ+bxRLN8nu Ef6MriDuogpL2eWPc9GRcvLF4Vttw8LCZR2/mbr0g9PXsezjJPxj4zmesKzjUP0k2XXN UbGzL2hMqbKPSD5vZe07mxEA2V9I86H4FUI86Fl8zxHxP+te9tVNh4TNfbnJknVROUaA nuSQmAR+d3gwaH4ZVotFyxX/v61Aet2mysB/zMDG+ntWSpigsbJbqrBXEm4eHFN1Rzc4 MtyQ== X-Gm-Message-State: ALQs6tBtdHbshnsXj3rtUbfZLo5lt90USi1jXNXtkRCEhPHjCVZ5Qr4r y7Vl6LyYXABOu1U/azMEqVGbZfTUZvaciaJARdI= X-Received: by 10.176.79.145 with SMTP id m17mr33297744uah.77.1525719772510; Mon, 07 May 2018 12:02:52 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.3.129 with HTTP; Mon, 7 May 2018 12:02:32 -0700 (PDT) In-Reply-To: References: <1525706596-13601-1-git-send-email-s.mesoraca16@gmail.com> From: Salvatore Mesoraca Date: Mon, 7 May 2018 21:02:32 +0200 Message-ID: Subject: Re: [PATCH v2] net: dsa: drop some VLAs in switch.c To: Florian Fainelli Cc: Andrew Lunn , linux-kernel@vger.kernel.org, Kernel Hardening , netdev@vger.kernel.org, "David S. Miller" , Kees Cook , Vivien Didelot , David Laight Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-05-07 20:14 GMT+02:00 Florian Fainelli : > On 05/07/2018 08:23 AM, Salvatore Mesoraca wrote: >> We avoid 2 VLAs by using a pre-allocated field in dsa_switch. >> We also try to avoid dynamic allocation whenever possible. >> >> Link: http://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com >> Link: http://lkml.kernel.org/r/20180505185145.GB32630@lunn.ch >> >> Signed-off-by: Salvatore Mesoraca >> --- >> include/net/dsa.h | 3 +++ >> net/dsa/dsa2.c | 14 ++++++++++++++ >> net/dsa/switch.c | 22 ++++++++++------------ >> 3 files changed, 27 insertions(+), 12 deletions(-) >> >> diff --git a/include/net/dsa.h b/include/net/dsa.h >> index 60fb4ec..576791d 100644 >> --- a/include/net/dsa.h >> +++ b/include/net/dsa.h >> @@ -256,6 +256,9 @@ struct dsa_switch { >> /* Number of switch port queues */ >> unsigned int num_tx_queues; >> >> + unsigned long *bitmap; >> + unsigned long _bitmap; >> + >> /* Dynamically allocated ports, keep last */ >> size_t num_ports; >> struct dsa_port ports[]; >> diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c >> index adf50fb..cebf35f0 100644 >> --- a/net/dsa/dsa2.c >> +++ b/net/dsa/dsa2.c >> @@ -748,6 +748,20 @@ struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n) >> if (!ds) >> return NULL; >> >> + /* We avoid allocating memory outside dsa_switch >> + * if it is not needed. >> + */ >> + if (n <= sizeof(ds->_bitmap) * 8) { >> + ds->bitmap = &ds->_bitmap; > > Should not this be / BITS_PER_BYTE? If the sizeof(unsigned long) is <= > 8, then you don't need to allocate it, otherwise, you have to. No. We need one 1 bit per port, of course sizeof() returns size in bytes, hence the multiplication to get the number of bits. I might multiply per BITS_PER_BYTE instead of 8, but I doubt that Linux supports implementations where a byte is not an octet. > I would actually just always dynamically allocate the bitmap, optimizing > for the case where we have fewer than or 8 ports is not worth IMHO. This optimization will save us an allocation when number of ports is less than 32 or 64 (depending on arch). IMHO it's useful, if you consider that, right now, DSA works only with 12-ports switches. Thank you for your time, Salvatore