Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751178AbdLXSDQ (ORCPT ); Sun, 24 Dec 2017 13:03:16 -0500 Received: from mail-qt0-f195.google.com ([209.85.216.195]:33563 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750733AbdLXSDO (ORCPT ); Sun, 24 Dec 2017 13:03:14 -0500 X-Google-Smtp-Source: ACJfBosNBmBMHSpw0AwSuK6oIKJLLRW3lVDrErUt2MKFaRxN2+MxUUtGH0yiJeOVik+J9sxsR+vOpw== From: Nick Desaulniers Cc: ghackmann@google.com, mka@google.com, kees@google.com, srhines@google.com, Nick Desaulniers , Boris Ostrovsky , Juergen Gross , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org Subject: [PATCH] x86: xen: remove the use of VLAIS Date: Sun, 24 Dec 2017 13:02:47 -0500 Message-Id: <1514138567-20491-1-git-send-email-nick.desaulniers@gmail.com> X-Mailer: git-send-email 2.7.4 To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1632 Lines: 49 Variable Length Arrays In Structs (VLAIS) is not supported by Clang, and frowned upon by others. https://lkml.org/lkml/2013/9/23/500 Here, the VLAIS was used because the size of the bitmap returned from xen_mc_entry() depended on possibly (based on kernel configuration) runtime sized data. Rather than declaring args as a VLAIS then calling sizeof on *args, we can define the variable length array (mask) to be a pointer, and calculate the appropriate sizeof args manually. Further, we can get rid of the #ifdef's and rely on num_possible_cpus() (thanks to a helpful checkpatch warning from an earlier version of this patch). Signed-off-by: Nick Desaulniers --- arch/x86/xen/mmu_pv.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index 4d62c07..966976c 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -1325,20 +1325,18 @@ static void xen_flush_tlb_others(const struct cpumask *cpus, { struct { struct mmuext_op op; -#ifdef CONFIG_SMP - DECLARE_BITMAP(mask, num_processors); -#else - DECLARE_BITMAP(mask, NR_CPUS); -#endif + unsigned long *mask; } *args; struct multicall_space mcs; + const size_t mc_entry_size = sizeof(args->op) + + sizeof(*args->mask) * BITS_TO_LONGS(num_possible_cpus()); trace_xen_mmu_flush_tlb_others(cpus, info->mm, info->start, info->end); if (cpumask_empty(cpus)) return; /* nothing to do */ - mcs = xen_mc_entry(sizeof(*args)); + mcs = xen_mc_entry(mc_entry_size); args = mcs.args; args->op.arg2.vcpumask = to_cpumask(args->mask); -- 2.7.4