All of lore.kernel.org
 help / color / mirror / Atom feed
From: weiping zhang <zwp10758@gmail.com>
To: Cornelia Huck <cohuck@redhat.com>
Cc: virtualization@lists.linux-foundation.org, mst@redhat.com
Subject: Re: [PATCH] virtio: release virtio index when fail to device_register
Date: Sat, 2 Dec 2017 00:55:39 +0800	[thread overview]
Message-ID: <20171201165539.GA11865@localhost.didichuxing.com> (raw)
In-Reply-To: <20171129105044.3a4b0ab3.cohuck@redhat.com>

On Wed, Nov 29, 2017 at 10:50:44AM +0100, Cornelia Huck wrote:
> On Wed, 29 Nov 2017 09:23:01 +0800
> weiping zhang <zwp10758@gmail.com> wrote:
> 
> > index can be reused by other virtio device.
> > 
> > Signed-off-by: weiping zhang <zhangweiping@didichuxing.com>
> 
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> 
> > ---
> >  drivers/virtio/virtio.c | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
> > index 48230a5..bf7ff39 100644
> > --- a/drivers/virtio/virtio.c
> > +++ b/drivers/virtio/virtio.c
> > @@ -333,6 +333,8 @@ int register_virtio_device(struct virtio_device *dev)
> >  	/* device_register() causes the bus infrastructure to look for a
> >  	 * matching driver. */
> >  	err = device_register(&dev->dev);
> > +	if (err)
> > +		ida_simple_remove(&virtio_index_ida, dev->index);
> >  out:
> >  	if (err)
> >  		virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED);
> 
> I think your patch is correct (giving up the index if we failed to
> register), but this made me look at our error handling if a virtio
> device failed to register.
> 
> We hold an extra reference to the struct device, even after a failed
> register, and it is the responsibility of the caller to give up that
> reference once no longer needed. As callers toregister_virtio_device()
> embed the struct virtio_device, it needs to be their responsibility.
> Looking at the existing callers,
> 
> - ccw does a put_device
> - pci, mmio and remoteproc do nothing, causing a leak
> - vop does a free on the embedding structure, which is a big no-no
> 
> Thoughts?
Sorry to relay late and thanks for your review.
Do you mean the "extra reference to the struct device" caused by the
following code?
 
err = device_register(&dev->dev);
	device_add(dev)
		get_device(dev)
If I'm understand right, I think there is no extra reference if we fail
virtio_register_device, because if device_register we don't get a
reference.

--
Thanks
weiping

  reply	other threads:[~2017-12-01 16:55 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-29  1:23 [PATCH] virtio: release virtio index when fail to device_register weiping zhang
2017-11-29  9:50 ` Cornelia Huck
2017-12-01 16:55   ` weiping zhang [this message]
2017-12-01 17:30     ` weiping zhang
2017-12-04  9:38     ` Cornelia Huck
2017-12-05  1:30       ` weiping zhang
2017-11-29 13:55 ` Michael S. Tsirkin
2017-11-29 13:55 ` Michael S. Tsirkin
  -- strict thread matches above, loose matches on Subject: below --
2017-11-28 15:43 weiping zhang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171201165539.GA11865@localhost.didichuxing.com \
    --to=zwp10758@gmail.com \
    --cc=cohuck@redhat.com \
    --cc=mst@redhat.com \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.