> -----Original Message----- > From: Paolo Bonzini [mailto:pbonzini@xxxxxxxxxx] > Sent: Tuesday, July 07, 2015 7:14 PM > To: Wu, Feng; Eric Auger; eric.auger@xxxxxx; > linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; kvmarm@xxxxxxxxxxxxxxxxxxxxx; > kvm@xxxxxxxxxxxxxxx; christoffer.dall@xxxxxxxxxx; marc.zyngier@xxxxxxx; > alex.williamson@xxxxxxxxxx; avi.kivity@xxxxxxxxx; mtosatti@xxxxxxxxxx; > joro@xxxxxxxxxx; b.reynal@xxxxxxxxxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx; patches@xxxxxxxxxx > Subject: Re: [RFC v2 3/6] irq: bypass: Extend skeleton for ARM forwarding > control > > > > On 07/07/2015 13:13, Wu, Feng wrote: > >> > You can use container_of to add it to your own struct, e.g. > >> > > >> > struct irq_bypass_consumer cons; > >> > struct irq_bypass_producer *prod; > > Do you mean this: > > > > struct kvm_kernel_irqfd { > > > > ...... > > > > struct irq_bypass_consumer cons; > > struct irq_bypass_producer *prod; > > }; > > Yes. Then I still need assign prod and de-assign prod in irq_bypass_register_consumer/irq_bypass_unregister_consumer, Right? Would you please share why this is better. My original though is as below: diff --git a/include/linux/irqbypass.h b/include/linux/irqbypass.h index 8f62235..11930c1 100644 --- a/include/linux/irqbypass.h +++ b/include/linux/irqbypass.h @@ -20,6 +20,7 @@ struct irq_bypass_producer { struct irq_bypass_consumer { struct list_head node; void *token; + struct irq_bypass_producer *producer; void (*stop)(struct irq_bypass_consumer *); void (*resume)(struct irq_bypass_consumer *); void (*add_producer)(struct irq_bypass_consumer *, diff --git a/kernel/irq/bypass.c b/kernel/irq/bypass.c index efadbe5..be2da25 100644 --- a/kernel/irq/bypass.c +++ b/kernel/irq/bypass.c @@ -122,6 +122,7 @@ int irq_bypass_register_consumer(struct irq_bypass_consumer *consumer) list_for_each_entry(producer, &producers, node) { if (producer->token == consumer->token) { + consumer->producer = producer; connect(producer, consumer); break; } @@ -140,6 +141,7 @@ void irq_bypass_unregister_consumer(struct irq_bypass_consumer *consumer) list_for_each_entry(producer, &producers, node) { if (producer->token == consumer->token) { + consumer->producer = NULL; disconnect(producer, consumer); break; } Thanks, Feng > > Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html