Thread (96 messages) 96 messages, 4 authors, 2012-07-22

Re: [PATCH v5 2/4] kvm: KVM_EOIFD, an eventfd for EOIs

From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2012-07-17 14:09:39
Also in: lkml

On Tue, Jul 17, 2012 at 07:59:16AM -0600, Alex Williamson wrote:
On Tue, 2012-07-17 at 13:21 +0300, Michael S. Tsirkin wrote:
quoted
On Mon, Jul 16, 2012 at 02:33:55PM -0600, Alex Williamson wrote:
quoted
+	if (args->flags & KVM_EOIFD_FLAG_LEVEL_IRQFD) {
+		struct _irqfd *irqfd = _irqfd_fdget_lock(kvm, args->irqfd);
+		if (IS_ERR(irqfd)) {
+			ret = PTR_ERR(irqfd);
+			goto fail;
+		}
+
+		gsi = irqfd->gsi;
+		level_irqfd = eventfd_ctx_get(irqfd->eventfd);
+		source = _irq_source_get(irqfd->source);
+		_irqfd_put_unlock(irqfd);
+		if (!source) {
+			ret = -EINVAL;
+			goto fail;
+		}
+	} else {
+		ret = -EINVAL;
+		goto fail;
+	}
+
+	INIT_LIST_HEAD(&eoifd->list);
+	eoifd->kvm = kvm;
+	eoifd->eventfd = eventfd;
+	eoifd->source = source;
+	eoifd->level_irqfd = level_irqfd;
+	eoifd->notifier.gsi = gsi;
+	eoifd->notifier.irq_acked = eoifd_event;
OK so this means eoifd keeps a reference to the irqfd.
And since this is the case, can't we drop the reference counting
around source ids now? Everything is referenced through irqfd.
Holding a reference and using it as a reference count are not the same
thing.  What if another module holds a reference to this eventfd?  How
do we do anything on release?
We don't as there is no release, and using kref on source id does not
help: it just never gets invoked.

-- 
MST
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help