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: 13563426 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 BB72BC48BC4 for ; Tue, 20 Feb 2024 06:09:16 +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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=N+DK40egpEQgjuj3UyZaeFXSXgxOVWiuMWESPJA6+Vs=; b=JUTdvDeu1i3oS2 J+4BFv3LqgqppPe/IZJX9o4AnC1PJQPtvAtkj9kQSMWk0Xgs1Mjj3m6EFCZ0SrYLjhgLAJnXQ3s3y zwxQCH/zEVnOzrGJm8z5GbALyJtK0uPGwLakccBHIE66lB4eGvbUGjTwX43Iml9RTBtu0ttXe9SIs BbiqLjfGl/8XKrxhXT/UvDGFMR/ViaSnX213bor3pEisDUol1tDgTHdZrycurVsAWdq6IXznMCgZ8 NsAbbxNIxD+0kWtvUeRZ6pjaVjld9/7Lt2i7cT71z/5BTacRhei3qcjxwN5EZhzi8pEvYC1qRwTu5 ejz63tJtRm/OzKWT6RHw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rcJJR-0000000DIS1-3YaF; Tue, 20 Feb 2024 06:09:05 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rcJIg-0000000DHox-2xF3 for linux-arm-kernel@lists.infradead.org; Tue, 20 Feb 2024 06:08:25 +0000 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-1d746856d85so30283385ad.0 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=krwDdlrOXKzaNjt0RVjMAHkqqEYrayLUJAJrhsQj/lBvW5uVCFWqOcpQtDgVTR/n6L S6A5oY13fruqGiM+3e34cinpE2UJuDJx5oKXm6ExlEu8kHq4D5r74RZVXJg34Sk67erd FAk+romDYZSAyid0OiU7wHPCg2j3kI0YDPPKr6jf9BcMCAYSfRJnUKA9u8uV6rd8xXOX 8Z9Tza0HKZZkUqaZ+YcMv2UAAtSlBVrbx1Jg6URhFqUes+O14+lcwKcBXdOzIOPbXNMJ Fr22tCLbh4vLM+JNdph+EFcTpxhUoC1GXXXbuAkXr4fVRDuU2bqATLHRlWT5UTdOn+xk Uysg== X-Forwarded-Encrypted: i=1; AJvYcCUGx6363WI/KSempkOXTrxVgSGgjn70KQf9yLkddAfc9zOHc6oPt1Q9I1qcPrFJ/FO1N5jZmcsdk67XS3hbxI9uCU7LvQ9HFDIi5nP73lCPhS7LznM= X-Gm-Message-State: AOJu0YyPyHexnPm9tm8lkpSxvVOlcTcCxZHWNVynjK+uVFR9kDKIg0UP 7YXeV42cgQecTAP+nIjADZvWqMCctpcxuzCag003/5Og4Gh8e3JOE5KcOIg4kao= 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 Cc: Marc Zyngier , =?utf-8?b?QmrDtnJuIFTDtnBlbA==?= , Atish Patra , Andrew Jones , Sunil V L , Saravana Kannan , Anup Patel , linux-riscv@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, =?utf-8?b?QmrDtnJuIFTDtnBlbA==?= , Anup Patel 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_427559_49844400 X-CRM114-Status: GOOD ( 15.38 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=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; }