Re: [PATCH] genirq/irqaction: Move dev_id and percpu_dev_id in a union

2021-04-20 Thread Marc Zyngier
On Mon, 19 Apr 2021 00:44:14 +0100,
Thomas Gleixner  wrote:
> 
> On Sat, Apr 10 2021 at 13:00, Marc Zyngier wrote:
> > dev_id and percpu_dev_id are mutually exclusive in struct irqaction,
> > as they conceptually represent the same thing, only in a per-cpu
> > fashion.
> >
> > Move them into an anonymous union, saving a few bytes on the way.
> 
> The reason why they are not in an anomymous union is that any misuse of
> interfaces will result in an instantaneous explosion while with your
> variant it will cause hard to diagnose side effects.
> 
> I rather waste the extra 4/8 bytes unless there is a compelling reason
> not to do so.

Fair enough. I just happened to spot it while doing some vaguely
related rework (turning the irqaction.irq field into an irqdesc).

Happy to leave it as is.

Thanks,

M.

-- 
Without deviation from the norm, progress is not possible.


Re: [PATCH] genirq/irqaction: Move dev_id and percpu_dev_id in a union

2021-04-18 Thread Thomas Gleixner
On Sat, Apr 10 2021 at 13:00, Marc Zyngier wrote:
> dev_id and percpu_dev_id are mutually exclusive in struct irqaction,
> as they conceptually represent the same thing, only in a per-cpu
> fashion.
>
> Move them into an anonymous union, saving a few bytes on the way.

The reason why they are not in an anomymous union is that any misuse of
interfaces will result in an instantaneous explosion while with your
variant it will cause hard to diagnose side effects.

I rather waste the extra 4/8 bytes unless there is a compelling reason
not to do so.

Thanks,

tglx


[PATCH] genirq/irqaction: Move dev_id and percpu_dev_id in a union

2021-04-10 Thread Marc Zyngier
dev_id and percpu_dev_id are mutually exclusive in struct irqaction,
as they conceptually represent the same thing, only in a per-cpu
fashion.

Move them into an anonymous union, saving a few bytes on the way.

Signed-off-by: Marc Zyngier 
---
 include/linux/interrupt.h | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 967e25767153..4383ee033acf 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -109,8 +109,10 @@ typedef irqreturn_t (*irq_handler_t)(int, void *);
  */
 struct irqaction {
irq_handler_t   handler;
-   void*dev_id;
-   void __percpu   *percpu_dev_id;
+   union {
+   void*dev_id;
+   void __percpu   *percpu_dev_id;
+   };
struct irqaction*next;
irq_handler_t   thread_fn;
struct task_struct  *thread;
-- 
2.30.2