From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) (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 BBBCF2C1593 for ; Tue, 8 Jul 2025 11:49:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.74 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751975391; cv=none; b=IkaGyBf7SWtbmNrzZQ1KkEHjaZ2oXysu/4wg5nue6qO3Pjehr8QoG7fPMA2mgKMPWHc2UVdSqY16W6e5PKgtinkGY20umyAoXKoIqJQrwSkFWnaWO+tAuwokPbAwmjYZLWq70fHUi36vK7vOmG/PHiMqB453OcKItc1weiut1A4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751975391; c=relaxed/simple; bh=Vkvwc6PqUHJYMxuZWBD0Ix8x7TFVjO+QBzrO1/WRmy0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=E6j0GHUkjDv79DEC94/7NSA9NKZTWIOboq6AuRFRRcKe1NkFxzIa44ywwWyVrJjtGUfnqE2ou6pRdduVlXu9nEziXqdb+wlOnCa9VfyHy7ja3k4Lpwglg6avMBh/v5ZG5M4wfs0qFiX/D0gs6EkXz4u8vBU2Dd+0LcE7Z+a02rQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--aliceryhl.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Zw8X+kzY; arc=none smtp.client-ip=209.85.221.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--aliceryhl.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Zw8X+kzY" Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-3a4fabcafecso1867807f8f.0 for ; Tue, 08 Jul 2025 04:49:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1751975388; x=1752580188; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=PY6QNxjg77faTmjRXPTnc6BZ6+1q/R3i4YmrdcTB0oQ=; b=Zw8X+kzYwgwIDM4Ubj9cl5YLy7hlFVDA3N189a1AwVBFFC3kSxjG+x99D4xCOD36ek FqPFz+trOw1RiRiI8l+r0i10ZVUc23OBenvLt6pQMLkyGJmVngVH7yroelY9noYwBhOn H4U7ELKgGZ/zEwX7rbqy6FGjsQOWKqFOeajCGFQlR810rKFkXYMfl1gUVuoLC0obQqP/ 9fiZYdO7m08ivfl2D2n2P1tk5sEAsFsJV/aGStePbud2cWIMQdfGkQVIHTobeJZ6zwWZ puSBYF3uTZOPP3ZKgWCwio20yYbT1eekKsD1uppBOOc7yORnaiWGsiMiDVYsmIPwS4qw sKMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751975388; x=1752580188; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=PY6QNxjg77faTmjRXPTnc6BZ6+1q/R3i4YmrdcTB0oQ=; b=aoAQwPrHV8ThctNYfeJ3D95u99844sCmgpxWmdzlQkLi/s3H6DshQf4SMTaJ17pLoK /L4fEgsVkeKBmqC+eNp5HtND3/GRWMdXrbMBL/DAZ/gDIVaxUcf3TpGDapzDLzafRkaM pVspJZVTUbEuoPGc+L51foGycVebhw1ci8OJ18AScAav3x1/g1v3Z7u1k9iKsubg6XoE p3jDIhNPMsXCH+9Sjy9IWS/g6ufd443cQimttKnoNtohMFlf13O1Om4xYg8QeY/Yrz67 QUaEyG1zhmPc+JY88QWqD9LMgfp16z9zFMnuHScdAmKxeVfdWwjk8Qon2Pe5/9mOuX00 14Xw== X-Forwarded-Encrypted: i=1; AJvYcCWKLgcvbPPWWvO7Up2catXeu94RuNkUl//rNJqNkkBVTcpcAW0FVpLcm6mp4u/TkevDoNzntPN7YtJB3lg=@vger.kernel.org X-Gm-Message-State: AOJu0Yyu2+5frcs7Xz83FcK5pjFe10vc7JtAcl/3mI9/JDvnfbSbFUdG 23nr6Whc6fgTnqmAHfVqY6gxazSAsH74l0be41xc1Tk+iMxCNWtR6IWmOJo1PXWoViHpAnwry1H MBKxq/TuE0Lm9pK8ZEw== X-Google-Smtp-Source: AGHT+IEGVBkp2x/KhrY8Zgqx6AZWD4y2LDNS7/l9boWXtXnyNFOEnp0BDX65Tj4kRBIwgxeQCsYcSUVImsutNIs= X-Received: from wrbfi14.prod.google.com ([2002:a05:6000:440e:b0:3a6:e2a0:595d]) (user=aliceryhl job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:5888:0:b0:3a4:eecf:b8cb with SMTP id ffacd0b85a97d-3b5dde8bc33mr2486256f8f.28.1751975388118; Tue, 08 Jul 2025 04:49:48 -0700 (PDT) Date: Tue, 8 Jul 2025 11:49:46 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250703-topics-tyr-request_irq-v6-0-74103bdc7c52@collabora.com> <20250703-topics-tyr-request_irq-v6-3-74103bdc7c52@collabora.com> Message-ID: Subject: Re: [PATCH v6 3/6] rust: irq: add support for non-threaded IRQs and handlers From: Alice Ryhl To: Benno Lossin Cc: Daniel Almeida , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , "=?utf-8?B?QmrDtnJu?= Roy Baron" , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Greg Kroah-Hartman , "Rafael J. Wysocki" , Thomas Gleixner , Bjorn Helgaas , "Krzysztof =?utf-8?Q?Wilczy=C5=84ski?=" , linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-pci@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable On Mon, Jul 07, 2025 at 10:30:27PM +0200, Benno Lossin wrote: > On Mon Jul 7, 2025 at 6:18 PM CEST, Daniel Almeida wrote: > > Alice, > > > > [=E2=80=A6] > > > >>> +/// The value that can be returned from an IrqHandler or a ThreadedI= rqHandler. > >>> +pub enum IrqReturn { > >>> + /// The interrupt was not from this device or was not handled. > >>> + None, > >>> + > >>> + /// The interrupt was handled by this device. > >>> + Handled, > >>> +} > >>> + > >>> +impl IrqReturn { > >>> + fn into_inner(self) -> u32 { > >>> + match self { > >>> + IrqReturn::None =3D> bindings::irqreturn_IRQ_NONE, > >>> + IrqReturn::Handled =3D> bindings::irqreturn_IRQ_HANDLED, > >>=20 > >> One option is to specify these in the enum: > >>=20 > >> /// The value that can be returned from an IrqHandler or a ThreadedIrq= Handler. > >> pub enum IrqReturn { > >> /// The interrupt was not from this device or was not handled. > >> None =3D bindings::irqreturn_IRQ_NONE, > >>=20 > >> /// The interrupt was handled by this device. > >> Handled =3D bindings::irqreturn_IRQ_HANDLED, > >> } > > > > This requires explicitly setting #[repr(u32)], which is something that = was > > reverted at an earlier iteration of the series on Benno=E2=80=99s reque= st. >=20 > Yeah I requested this, because it increases the size of the enum to 4 > bytes and I think we should try to make rust enums as small as possible. >=20 > @Alice what's the benefit of doing it directly in the enum? Basically all uses of this enum are going to look like this: fn inner() -> IrqReturn { if !should_handle() { return IrqReturn::None; } // .. handle the irq IrqReturn::Handled } =09 fn outer() -> u32 { match inner() { IrqReturn::None =3D> bindings::irqreturn_IRQ_NONE, IrqReturn::Handled =3D> bindings::irqreturn_IRQ_HANDLED, } } Setting the discriminant to the values ensures that the match in outer() is a no-op. The enum is never going to be stored long-term anywhere so its size doesn't matter. Alice