From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0EDC01A9F8D for ; Mon, 11 May 2026 03:22:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778469725; cv=none; b=YpVgiPQoLVNkCoYSEXZ96zGL8sbKB4UERHxvbn9eRikz7S5yj3L9XK0OhUKnMfVQ30zT9imIJuvjC7kXw1K3NVC8L1eaIt7RyXEvOmKZB5IpqoowdB/sfs3WWgbE2z7uVZSXCekJrkOeujePieYIB8DBZRybtDbmCpeznNFQbwo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778469725; c=relaxed/simple; bh=VDqZJnwf2GmCanjTjVfbgnaJYQJazv4Jy+C4YIq1Wjo=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=iNW4KZ1+E8Tnzla0r73rKcu3maiXNWkOzciONst//9Pe4xuicWe5zDe8AC32FIqTBTXkc3FGyP9orcNc43NPwjpnuymwr9ygBHH5fq+r1gtOV9N8JlMT0noeNL+PKwHjQzKd6lpoSYneshguRa6ODxoKqT7sUhrX08RtdUhzsVU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SPmj/02O; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SPmj/02O" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2ba4efedbeaso27231805ad.1 for ; Sun, 10 May 2026 20:22:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778469722; x=1779074522; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=LE/4+F+CsUsIVKFjtrPVESM23HnQEEdghZta/8JF8Ek=; b=SPmj/02OPIWDPmm8VNtr/MqVhYAnDPIN+OILRiEmAg+w62/Es66m6dr9euefJlayjo s4NjIJN2mKX5X9nfWSfbCL02tKTUC7bDSaQYGwat/OfmrwoCi1KAg8R4AdovCI+lT/rY Fj3ZDLqRfgVS3oNUdvL52OrsuXwedGm1mVaqmEquW8qiOsWy3T0wIv9ZiavBo5fUNH8Z oL+wiqCqxZ1QB/nczTkq+TsKqVpyW2oLtXxmu91477SSghJCMSzbxSPxcLTdzDiQAiIF QT85P1Ppx0caiVs/jw/i7O3Yh7BNEf9VQ5Uld+TBSS3ASvlVPBgerhzit2Dt0QebcbWl YBqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778469722; x=1779074522; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=LE/4+F+CsUsIVKFjtrPVESM23HnQEEdghZta/8JF8Ek=; b=VWGz/JUyLWfuadQfZHLEvqhHIeqLPsA4Vil4J6/2WnQh9b2Z9mJPhrYADvQK4Y9Bpu 0S5hnF6mq9dK0X0bpmxEYxDIxqbuv6mVee1sHzYnhKUrj5h3dJK8HOf3/fb27Q/q5nBM AXOBKou2vWZS8wlrlwmYslFLSTh4WZn+amWgGzzr92Jepo2DGlXm8P1Zmjxx36DUHrIU LbfN4RZ8KXjysWE1FJC2ZYnd07ckSVfs65O27fWQIMRSl6P16/B95pWVWqQ63yUQfTb9 dKD1gMNnQwUtb8dvP6MXvXbsCtB/M9J0GQ96AZZ35SNC9LiDFu/x3kRiT9cCUBOM3tRM C0dA== X-Forwarded-Encrypted: i=1; AFNElJ/XRrP1IJ9AZQF5r9ozQZJv8sDUtdSP3anPyxctcMOXJXNANRLKiTAYJN4SDn1HxXMI21ldivWNQlSJJtk=@vger.kernel.org X-Gm-Message-State: AOJu0Yz8E2IwHCyxRyO1aohfH+FCli08YGMttj4orcglmRxSWeE2szhL aR2bDQzq2ybtaiLd8hYu+KQAJpey/JcXJIAtjsNxAddOST9ovMYzLhLS X-Gm-Gg: Acq92OEix91UB/DpQ7Ane0JHXVIjYqffhj8W/G50eF02OxiNsSPmOlif23Vy+6yi+BZ mMgDCRF//RaHuigJXss07HtlND/j6Z+/sfldqOvTNFcYu45Sfi0m5zMyXJpaW5cYIV5XfukcQ4H CbowMW2c4shuti3IiMuI0FqhLxp13rhunzvgCJhRwVLSCTzbk1D/y27CW6fPoD9Ja9CG8WHNE8U gWq1Ka7ds24PQi5RnRRSuk1x3tW+HVH4NI0EBKNtghfdIU24PINA1dcKd0ZMEhIKsl3w0cbvRLB EkfJD8JX22MSji5veINGFfu5cT7lsXRvwEYDanP/bXa7MA3fUTZ5DGZ9E8Ls3P7Gi3uWjZiKZ5p H8Befx4+WS7L87ZmLUj2rfJiQJP3ytBiszJleCKzN4G8E1t5XWZfJQISYOswwAFDjbAAiw/VfuZ 2n8tGjy57LFHlZyE0LvDCXAFfuBQK9EMMePTIYTf1K/72aXcyZxYDwObsYazw7+q+EKZ1U5MNrN MdM9xN8/4zqxPos0IN41vn1UsbnoT6ZN7pLFVATU0r7sg== X-Received: by 2002:a17:903:1ab0:b0:2b2:4bf9:1766 with SMTP id d9443c01a7336-2ba7a34b378mr246513525ad.33.1778469722390; Sun, 10 May 2026 20:22:02 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d:7285:c2ff:fe45:8a32]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1d269fcsm89856955ad.15.2026.05.10.20.22.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 May 2026 20:22:01 -0700 (PDT) From: Rosen Penev To: linux-riscv@lists.infradead.org Cc: Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Kees Cook , "Gustavo A. R. Silva" , kvm@vger.kernel.org (open list:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv)), kvm-riscv@lists.infradead.org (open list:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv)), linux-kernel@vger.kernel.org (open list), linux-hardening@vger.kernel.org (open list:KERNEL HARDENING (not covered by other areas):Keyword:\b__counted_by(_le|_be)?\b) Subject: [PATCH] RISC-V: KVM: Use flexible array for APLIC IRQ state Date: Sun, 10 May 2026 20:21:44 -0700 Message-ID: <20260511032144.361520-1-rosenp@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Store the per-source APLIC IRQ state in the APLIC allocation instead of allocating it separately. This ties the IRQ state lifetime directly to the APLIC state, removes a separate allocation failure path, and lets __counted_by() describe the array bounds. Assisted-by: Codex:GPT-5.5 Signed-off-by: Rosen Penev --- arch/riscv/kvm/aia_aplic.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/arch/riscv/kvm/aia_aplic.c b/arch/riscv/kvm/aia_aplic.c index 3464f3351df7..748107c347d9 100644 --- a/arch/riscv/kvm/aia_aplic.c +++ b/arch/riscv/kvm/aia_aplic.c @@ -35,7 +35,7 @@ struct aplic { u32 nr_irqs; u32 nr_words; - struct aplic_irq *irqs; + struct aplic_irq irqs[] __counted_by(nr_irqs); }; static u32 aplic_read_sourcecfg(struct aplic *aplic, u32 irq) @@ -581,7 +581,7 @@ int kvm_riscv_aia_aplic_init(struct kvm *kvm) return 0; /* Allocate APLIC global state */ - aplic = kzalloc_obj(*aplic); + aplic = kzalloc_flex(*aplic, irqs, kvm->arch.aia.nr_sources + 1); if (!aplic) return -ENOMEM; kvm->arch.aia.aplic_state = aplic; @@ -589,11 +589,6 @@ int kvm_riscv_aia_aplic_init(struct kvm *kvm) /* Setup APLIC IRQs */ aplic->nr_irqs = kvm->arch.aia.nr_sources + 1; aplic->nr_words = DIV_ROUND_UP(aplic->nr_irqs, 32); - aplic->irqs = kzalloc_objs(*aplic->irqs, aplic->nr_irqs); - if (!aplic->irqs) { - ret = -ENOMEM; - goto fail_free_aplic; - } for (i = 0; i < aplic->nr_irqs; i++) raw_spin_lock_init(&aplic->irqs[i].lock); @@ -606,7 +601,7 @@ int kvm_riscv_aia_aplic_init(struct kvm *kvm) &aplic->iodev); mutex_unlock(&kvm->slots_lock); if (ret) - goto fail_free_aplic_irqs; + goto fail_free_aplic; /* Setup default IRQ routing */ ret = kvm_riscv_setup_default_irq_routing(kvm, aplic->nr_irqs); @@ -619,8 +614,6 @@ int kvm_riscv_aia_aplic_init(struct kvm *kvm) mutex_lock(&kvm->slots_lock); kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &aplic->iodev); mutex_unlock(&kvm->slots_lock); -fail_free_aplic_irqs: - kfree(aplic->irqs); fail_free_aplic: kvm->arch.aia.aplic_state = NULL; kfree(aplic); @@ -638,8 +631,6 @@ void kvm_riscv_aia_aplic_cleanup(struct kvm *kvm) kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &aplic->iodev); mutex_unlock(&kvm->slots_lock); - kfree(aplic->irqs); - kvm->arch.aia.aplic_state = NULL; kfree(aplic); } -- 2.54.0