> -----Original Message----- > From: Paolo Bonzini [mailto:pbonz...@redhat.com] > Sent: Tuesday, July 07, 2015 7:14 PM > To: Wu, Feng; Eric Auger; eric.au...@st.com; > linux-arm-ker...@lists.infradead.org; kvm...@lists.cs.columbia.edu; > k...@vger.kernel.org; christoffer.d...@linaro.org; marc.zyng...@arm.com; > alex.william...@redhat.com; avi.kiv...@gmail.com; mtosa...@redhat.com; > j...@8bytes.org; b.rey...@virtualopensystems.com > Cc: linux-kernel@vger.kernel.org; patc...@linaro.org > 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 linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/