All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: linux-s390@vger.kernel.org, kvm@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	Paolo Bonzini <pbonzini@redhat.com>,
	Amit Shah <amit.shah@redhat.com>,
	v9fs-developer@lists.sourceforge.net,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH v4 04/25] virtio: defer config changed notifications
Date: Tue, 14 Oct 2014 11:59:08 +0300	[thread overview]
Message-ID: <20141014085908.GA6016@redhat.com> (raw)
In-Reply-To: <87lhojcx0v.fsf@rustcorp.com.au>

On Tue, Oct 14, 2014 at 11:01:12AM +1030, Rusty Russell wrote:
> "Michael S. Tsirkin" <mst@redhat.com> writes:
> > Defer config changed notifications that arrive during
> > probe/scan/freeze/restore.
> >
> > This will allow drivers to set DRIVER_OK earlier, without worrying about
> > racing with config change interrupts.
> >
> > This change will also benefit old hypervisors (before 2009)
> > that send interrupts without checking DRIVER_OK: previously,
> > the callback could race with driver-specific initialization.
> >
> > This will also help simplify drivers.
> 
> But AFAICT you never *read* dev->config_changed.
> 
> You unconditionally trigger a config_changed event in
> virtio_config_enable().  That's a bit weird, but probably OK.
> 
> How about the following change (on top of your patch).  I
> think the renaming is clearer, and note the added if() test in
> virtio_config_enable().
> 
> If you approve, I'll fold it in.
> 
> Cheers,
> Rusty.

Hi Rusty,
I'm okay with both changes.
You can fold it in if you prefer, or just make it a patch on top.

> diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
> index 2536701b098b..df598dd8c5c8 100644
> --- a/drivers/virtio/virtio.c
> +++ b/drivers/virtio/virtio.c
> @@ -122,7 +122,7 @@ static void __virtio_config_changed(struct virtio_device *dev)
>  	struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
>  
>  	if (!dev->config_enabled)
> -		dev->config_changed = true;
> +		dev->config_change_pending = true;
>  	else if (drv && drv->config_changed)
>  		drv->config_changed(dev);
>  }
> @@ -148,8 +148,9 @@ static void virtio_config_enable(struct virtio_device *dev)
>  {
>  	spin_lock_irq(&dev->config_lock);
>  	dev->config_enabled = true;
> -	__virtio_config_changed(dev);
> -	dev->config_changed = false;
> +	if (dev->config_change_pending)
> +		__virtio_config_changed(dev);
> +	dev->config_change_pending = false;
>  	spin_unlock_irq(&dev->config_lock);
>  }
>  
> @@ -253,7 +254,7 @@ int register_virtio_device(struct virtio_device *dev)
>  
>  	spin_lock_init(&dev->config_lock);
>  	dev->config_enabled = false;
> -	dev->config_changed = false;
> +	dev->config_change_pending = false;
>  
>  	/* We always start by resetting the device, in case a previous
>  	 * driver messed it up.  This also tests that code path a little. */
> diff --git a/include/linux/virtio.h b/include/linux/virtio.h
> index 5636b119dc25..65261a7244fc 100644
> --- a/include/linux/virtio.h
> +++ b/include/linux/virtio.h
> @@ -80,7 +80,7 @@ bool virtqueue_is_broken(struct virtqueue *vq);
>   * @index: unique position on the virtio bus
>   * @failed: saved value for CONFIG_S_FAILED bit (for restore)
>   * @config_enabled: configuration change reporting enabled
> - * @config_changed: configuration change reported while disabled
> + * @config_change_pending: configuration change reported while disabled
>   * @config_lock: protects configuration change reporting
>   * @dev: underlying device.
>   * @id: the device type identification (used to match it with a driver).
> @@ -94,7 +94,7 @@ struct virtio_device {
>  	int index;
>  	bool failed;
>  	bool config_enabled;
> -	bool config_changed;
> +	bool config_change_pending;
>  	spinlock_t config_lock;
>  	struct device dev;
>  	struct virtio_device_id id;

WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	linux-scsi@vger.kernel.org, linux-s390@vger.kernel.org,
	v9fs-developer@lists.sourceforge.net, netdev@vger.kernel.org,
	kvm@vger.kernel.org, Amit Shah <amit.shah@redhat.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	"David S. Miller" <davem@davemloft.net>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Heinz Graalfs <graalfs@linux.vnet.ibm.com>
Subject: Re: [PATCH v4 04/25] virtio: defer config changed notifications
Date: Tue, 14 Oct 2014 11:59:08 +0300	[thread overview]
Message-ID: <20141014085908.GA6016@redhat.com> (raw)
In-Reply-To: <87lhojcx0v.fsf@rustcorp.com.au>

On Tue, Oct 14, 2014 at 11:01:12AM +1030, Rusty Russell wrote:
> "Michael S. Tsirkin" <mst@redhat.com> writes:
> > Defer config changed notifications that arrive during
> > probe/scan/freeze/restore.
> >
> > This will allow drivers to set DRIVER_OK earlier, without worrying about
> > racing with config change interrupts.
> >
> > This change will also benefit old hypervisors (before 2009)
> > that send interrupts without checking DRIVER_OK: previously,
> > the callback could race with driver-specific initialization.
> >
> > This will also help simplify drivers.
> 
> But AFAICT you never *read* dev->config_changed.
> 
> You unconditionally trigger a config_changed event in
> virtio_config_enable().  That's a bit weird, but probably OK.
> 
> How about the following change (on top of your patch).  I
> think the renaming is clearer, and note the added if() test in
> virtio_config_enable().
> 
> If you approve, I'll fold it in.
> 
> Cheers,
> Rusty.

Hi Rusty,
I'm okay with both changes.
You can fold it in if you prefer, or just make it a patch on top.

> diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
> index 2536701b098b..df598dd8c5c8 100644
> --- a/drivers/virtio/virtio.c
> +++ b/drivers/virtio/virtio.c
> @@ -122,7 +122,7 @@ static void __virtio_config_changed(struct virtio_device *dev)
>  	struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
>  
>  	if (!dev->config_enabled)
> -		dev->config_changed = true;
> +		dev->config_change_pending = true;
>  	else if (drv && drv->config_changed)
>  		drv->config_changed(dev);
>  }
> @@ -148,8 +148,9 @@ static void virtio_config_enable(struct virtio_device *dev)
>  {
>  	spin_lock_irq(&dev->config_lock);
>  	dev->config_enabled = true;
> -	__virtio_config_changed(dev);
> -	dev->config_changed = false;
> +	if (dev->config_change_pending)
> +		__virtio_config_changed(dev);
> +	dev->config_change_pending = false;
>  	spin_unlock_irq(&dev->config_lock);
>  }
>  
> @@ -253,7 +254,7 @@ int register_virtio_device(struct virtio_device *dev)
>  
>  	spin_lock_init(&dev->config_lock);
>  	dev->config_enabled = false;
> -	dev->config_changed = false;
> +	dev->config_change_pending = false;
>  
>  	/* We always start by resetting the device, in case a previous
>  	 * driver messed it up.  This also tests that code path a little. */
> diff --git a/include/linux/virtio.h b/include/linux/virtio.h
> index 5636b119dc25..65261a7244fc 100644
> --- a/include/linux/virtio.h
> +++ b/include/linux/virtio.h
> @@ -80,7 +80,7 @@ bool virtqueue_is_broken(struct virtqueue *vq);
>   * @index: unique position on the virtio bus
>   * @failed: saved value for CONFIG_S_FAILED bit (for restore)
>   * @config_enabled: configuration change reporting enabled
> - * @config_changed: configuration change reported while disabled
> + * @config_change_pending: configuration change reported while disabled
>   * @config_lock: protects configuration change reporting
>   * @dev: underlying device.
>   * @id: the device type identification (used to match it with a driver).
> @@ -94,7 +94,7 @@ struct virtio_device {
>  	int index;
>  	bool failed;
>  	bool config_enabled;
> -	bool config_changed;
> +	bool config_change_pending;
>  	spinlock_t config_lock;
>  	struct device dev;
>  	struct virtio_device_id id;

  reply	other threads:[~2014-10-14  8:59 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-13  7:48 [PATCH v4 00/25] virtio: fix spec compliance issues Michael S. Tsirkin
2014-10-13  7:48 ` Michael S. Tsirkin
2014-10-13  7:48 ` [PATCH v4 01/25] virtio_pci: fix virtio spec compliance on restore Michael S. Tsirkin
2014-10-13  7:48   ` Michael S. Tsirkin
2014-10-13  7:48 ` [PATCH v4 02/25] virtio: unify config_changed handling Michael S. Tsirkin
2014-10-13  7:48   ` Michael S. Tsirkin
2014-10-13  7:48 ` [PATCH v4 03/25] virtio-pci: move freeze/restore to virtio core Michael S. Tsirkin
2014-10-13  7:48   ` Michael S. Tsirkin
2014-10-15  7:05   ` Paul Bolle
2014-10-15  7:05   ` Paul Bolle
2014-10-13  7:50 ` [PATCH v4 04/25] virtio: defer config changed notifications Michael S. Tsirkin
2014-10-13  7:50   ` Michael S. Tsirkin
2014-10-14  0:31   ` Rusty Russell
2014-10-14  0:31     ` Rusty Russell
2014-10-14  8:59     ` Michael S. Tsirkin [this message]
2014-10-14  8:59       ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 05/25] virtio_blk: drop config_enable Michael S. Tsirkin
2014-10-13  7:50   ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 06/25] virtio-blk: drop config_mutex Michael S. Tsirkin
2014-10-13  7:50   ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 07/25] virtio_net: drop config_enable Michael S. Tsirkin
2014-10-13  7:50   ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 08/25] virtio-net: drop config_mutex Michael S. Tsirkin
2014-10-13  7:50 ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 09/25] virtio_net: minor cleanup Michael S. Tsirkin
2014-10-13  7:50   ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 10/25] virtio: add API to enable VQs early Michael S. Tsirkin
2014-10-13  7:50 ` Michael S. Tsirkin
2014-11-11  0:45   ` Andy Grover
2014-11-11  0:45   ` Andy Grover
2014-11-11  6:15     ` Michael S. Tsirkin
2014-11-11  6:15       ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 11/25] virtio_net: " Michael S. Tsirkin
2014-10-13  7:50   ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 12/25] virtio_blk: " Michael S. Tsirkin
2014-10-13  7:50 ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 13/25] virtio_console: " Michael S. Tsirkin
2014-10-20 12:07   ` Thomas Graf
2014-10-20 12:42     ` Cornelia Huck
2014-10-20 12:42       ` Cornelia Huck
2014-10-20 13:10       ` Thomas Graf
2014-10-20 13:10       ` Thomas Graf
2014-10-20 13:35       ` Michael S. Tsirkin
2014-10-20 13:35         ` Michael S. Tsirkin
2014-10-20 13:58         ` [PATCH] virtio_console: move early VQ enablement Cornelia Huck
2014-10-20 13:58           ` Cornelia Huck
2014-10-20 14:05           ` Michael S. Tsirkin
2014-10-20 14:05             ` Michael S. Tsirkin
2014-10-20 17:09             ` Josh Boyer
2014-10-20 17:09               ` Josh Boyer
2014-11-11  2:24               ` Dave Airlie
2014-11-11  2:24                 ` Dave Airlie
2014-10-20 14:04         ` [PATCH v4 13/25] virtio_console: enable VQs early Michael S. Tsirkin
2014-10-20 14:04           ` Michael S. Tsirkin
2014-10-20 14:44           ` Thomas Graf
2014-10-20 14:44           ` Thomas Graf
2014-10-20 13:10     ` Michael S. Tsirkin
2014-10-20 13:10       ` Michael S. Tsirkin
2014-10-20 13:12       ` Thomas Graf
2014-10-20 13:12       ` Thomas Graf
2014-10-20 13:14       ` Michael S. Tsirkin
2014-10-20 13:14         ` Michael S. Tsirkin
2014-10-20 12:07   ` Thomas Graf
2014-10-13  7:50 ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 14/25] 9p/trans_virtio: " Michael S. Tsirkin
2014-10-13  7:50   ` Michael S. Tsirkin
2014-10-13  7:50 ` [PATCH v4 15/25] virtio_net: fix use after free on allocation failure Michael S. Tsirkin
2014-10-13  7:50   ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 16/25] virtio_scsi: move kick event out from virtscsi_init Michael S. Tsirkin
2014-10-13  7:51 ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 17/25] virtio_blk: enable VQs early on restore Michael S. Tsirkin
2014-10-13  7:51 ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 18/25] virtio_scsi: " Michael S. Tsirkin
2014-10-13  7:51 ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 19/25] virtio_console: " Michael S. Tsirkin
2014-10-13  7:51   ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 20/25] virtio_net: " Michael S. Tsirkin
2014-10-13  7:51 ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 21/25] virito_scsi: use freezable WQ for events Michael S. Tsirkin
2014-10-13  7:51 ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 22/25] virtio_scsi: fix race on device removal Michael S. Tsirkin
2014-10-13  7:51   ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 23/25] virtio_balloon: enable VQs early on restore Michael S. Tsirkin
2014-10-13  7:51 ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 24/25] virtio_scsi: drop scan callback Michael S. Tsirkin
2014-10-13  7:51 ` Michael S. Tsirkin
2014-10-13  7:51 ` [PATCH v4 25/25] virtio-rng: refactor probe error handling Michael S. Tsirkin
2014-10-13  7:51 ` Michael S. Tsirkin

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=20141014085908.GA6016@redhat.com \
    --to=mst@redhat.com \
    --cc=amit.shah@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=davem@davemloft.net \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=rusty@rustcorp.com.au \
    --cc=v9fs-developer@lists.sourceforge.net \
    --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.