From patchwork Tue Feb 20 06:07:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 13563424 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 456C4C48BC3 for ; Tue, 20 Feb 2024 06:08:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=DRVKmNXQtuttePU/d6O8DS+1ywrf2lndXa2QIQd5Roc=; b=OfLNH8DKG+gutP lBmz+jlqn9QuzuTeyeQkEbsGCG6x8LhWW6zFmnqyeM+W3KSX6nl4DVM1Dg3NtVYPWCBHDBiEc5Eue r7J8/VM2lv1IywO6P/nZ0OoVH4ThBhSq/7wuwWgJI5h3Spw/YJ3QqGZlXWoX2XGrInljVzmfUTNKb OsMT2G+SHfXnxueZ/ltjC3zhglY199zPEyhW+j+6Bl5wB2LdVzQ2SK498Et85aLhsedA8G6DMNmek QhVYMMZrbzJVx5bwdHMj1D59g5N2sThKHK1j3Z9525iKpVeAEr3HRhy8eR11/lWKvNd55XlTTgRsS q5zIpE/ff8PHY+G/8Yfw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rcJJ6-0000000DIC6-2UpS; Tue, 20 Feb 2024 06:08:44 +0000 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rcJIg-0000000DHov-2xS4 for linux-riscv@lists.infradead.org; Tue, 20 Feb 2024 06:08:25 +0000 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-1dc0e5b223eso7332195ad.1 for ; Mon, 19 Feb 2024 22:08:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1708409296; x=1709014096; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=104PBPP87dGRJ1dWRj3TJVt38h0tClUYGYzJ0Qy5+KM=; b=j54iTf9UFyzn8rSUefx5TkMHa/4Tf+/BxCRz3OkqmEkOxRCxsaSYW2IPTz0zpNrtWd qUKvBPTQs777mQUEVfMqzbY2360oAEhXTMpPVvTdWefX2Dk7LQKKIJcpw+M5Q9QtZ1DB nzwDNAsKxKPNqiTNIYjhmluhVSRA/KIQMryHAIOQQEwZhd+hH6fGuY13fUitmK1Jvbt7 KInJxKemmFnbil4/+yi1EXdNqZTJ/69JxtNX0xge1dGHOEdin5pYPVZ6/uZdV6GEJJ4R 6k0spS1prH46M8T6eVWhxR06eSQ1mKpuDFBGeacG0JkYbwnli0vcNlX8EB4gUqikU6aY y7WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708409296; x=1709014096; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=104PBPP87dGRJ1dWRj3TJVt38h0tClUYGYzJ0Qy5+KM=; b=GDD3VFs6SBi4pnb4gsnHkYDtxsgkzABRWcUG26qwPXIllWAK04VtcRqgP6YuVoff2p aIv1NyARctk2vAg9KkFUXbiZAyBsXtlq/jaSBkMzClsq5zDLl4A54pqZmKm3A2DxrWAq j91STI0VpNLdWRJYIhTA28sUTw2RQjNKxmebG6g+n5XcrtV2Ur2M/E6YOJ/bDosCaMUv +UJeZqYl1P2ZiaDmMpkqkZV5LgLOiYflEY+kBVL7RxEUmYPSns15x9JZsN/u1qcsnfPx tTIdz3M71DEFbkiulwMUto3IoHNHU2gO716mZJNNJUveUZePgCmL/B3+Xw5AnJIsIJmF MfYw== X-Forwarded-Encrypted: i=1; AJvYcCX/bGgMtY7PV83OIj92p+7PL6R7mZEl4oi+yneSuJbHvn3IM0amtvfE0mW/Hnl6N/DUyjvjPMzq+YdxFCWSc8fgNMXgpuRt0cNYG2/2AKnM X-Gm-Message-State: AOJu0YzybZxLyEiRCC2BKvjRWY46wRStpZI863zeL/xqjwXxfeVwWUI0 vpy5sUGbb6eqgrjMuzfqOlQk3z6FQv5zXWeA2s/B+NSZHj0aExUtqblqoj/6Q/4= X-Google-Smtp-Source: AGHT+IFY/JcHrI+xAG094ZcXNaFl0GQyv1RbkAVoM5o1aUQFAbhKoPaBFMazisxA1YDdZaveAQB90g== X-Received: by 2002:a17:902:cf0e:b0:1db:a164:3e50 with SMTP id i14-20020a170902cf0e00b001dba1643e50mr13726229plg.40.1708409296360; Mon, 19 Feb 2024 22:08:16 -0800 (PST) Received: from anup-ubuntu-vm.localdomain ([171.76.80.86]) by smtp.gmail.com with ESMTPSA id j6-20020a17090276c600b001db4c89aea5sm5368114plt.158.2024.02.19.22.08.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 22:08:15 -0800 (PST) From: Anup Patel To: Palmer Dabbelt , Paul Walmsley , Thomas Gleixner , Rob Herring , Krzysztof Kozlowski , Frank Rowand , Conor Dooley Subject: [PATCH v13 05/13] genirq/matrix: Dynamic bitmap allocation Date: Tue, 20 Feb 2024 11:37:10 +0530 Message-Id: <20240220060718.823229-6-apatel@ventanamicro.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240220060718.823229-1-apatel@ventanamicro.com> References: <20240220060718.823229-1-apatel@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240219_220819_229855_C9ABB421 X-CRM114-Status: GOOD ( 13.95 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anup Patel , devicetree@vger.kernel.org, Saravana Kannan , Marc Zyngier , Anup Patel , linux-kernel@vger.kernel.org, =?utf-8?b?QmrDtnJuIFTDtnBlbA==?= , =?utf-8?b?QmrDtnJu?= =?utf-8?b?IFTDtnBlbA==?= , Atish Patra , linux-riscv@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Andrew Jones Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Björn Töpel Some (future) users of the irq matrix allocator, do not know the size of the matrix bitmaps at compile time. To avoid wasting memory on unnecessary large bitmaps, size the bitmap at matrix allocation time. Signed-off-by: Björn Töpel Signed-off-by: Anup Patel --- arch/x86/include/asm/hw_irq.h | 2 -- kernel/irq/matrix.c | 28 +++++++++++++++++----------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h index b02c3cd3c0f6..edebf1020e04 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -16,8 +16,6 @@ #include -#define IRQ_MATRIX_BITS NR_VECTORS - #ifndef __ASSEMBLY__ #include diff --git a/kernel/irq/matrix.c b/kernel/irq/matrix.c index 75d0ae490e29..8f222d1cccec 100644 --- a/kernel/irq/matrix.c +++ b/kernel/irq/matrix.c @@ -8,8 +8,6 @@ #include #include -#define IRQ_MATRIX_SIZE (BITS_TO_LONGS(IRQ_MATRIX_BITS)) - struct cpumap { unsigned int available; unsigned int allocated; @@ -17,8 +15,8 @@ struct cpumap { unsigned int managed_allocated; bool initialized; bool online; - unsigned long alloc_map[IRQ_MATRIX_SIZE]; - unsigned long managed_map[IRQ_MATRIX_SIZE]; + unsigned long *managed_map; + unsigned long alloc_map[]; }; struct irq_matrix { @@ -32,8 +30,8 @@ struct irq_matrix { unsigned int total_allocated; unsigned int online_maps; struct cpumap __percpu *maps; - unsigned long scratch_map[IRQ_MATRIX_SIZE]; - unsigned long system_map[IRQ_MATRIX_SIZE]; + unsigned long *system_map; + unsigned long scratch_map[]; }; #define CREATE_TRACE_POINTS @@ -50,24 +48,32 @@ __init struct irq_matrix *irq_alloc_matrix(unsigned int matrix_bits, unsigned int alloc_start, unsigned int alloc_end) { + unsigned int cpu, matrix_size = BITS_TO_LONGS(matrix_bits); struct irq_matrix *m; - if (matrix_bits > IRQ_MATRIX_BITS) - return NULL; - - m = kzalloc(sizeof(*m), GFP_KERNEL); + m = kzalloc(struct_size(m, scratch_map, matrix_size * 2), GFP_KERNEL); if (!m) return NULL; + m->system_map = &m->scratch_map[matrix_size]; + m->matrix_bits = matrix_bits; m->alloc_start = alloc_start; m->alloc_end = alloc_end; m->alloc_size = alloc_end - alloc_start; - m->maps = alloc_percpu(*m->maps); + m->maps = __alloc_percpu(struct_size(m->maps, alloc_map, matrix_size * 2), + __alignof__(*m->maps)); if (!m->maps) { kfree(m); return NULL; } + + for_each_possible_cpu(cpu) { + struct cpumap *cm = per_cpu_ptr(m->maps, cpu); + + cm->managed_map = &cm->alloc_map[matrix_size]; + } + return m; }