From: "Michael S. Tsirkin" <mst@redhat.com>
To: Alexander Duyck <alexander.duyck@gmail.com>
Cc: Nitesh Narayan Lal <nitesh@redhat.com>,
kvm list <kvm@vger.kernel.org>,
David Hildenbrand <david@redhat.com>,
Dave Hansen <dave.hansen@intel.com>,
LKML <linux-kernel@vger.kernel.org>,
Matthew Wilcox <willy@infradead.org>,
Michal Hocko <mhocko@kernel.org>, linux-mm <linux-mm@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>,
virtio-dev@lists.oasis-open.org,
Oscar Salvador <osalvador@suse.de>,
Yang Zhang <yang.zhang.wz@gmail.com>,
Pankaj Gupta <pagupta@redhat.com>,
Rik van Riel <riel@surriel.com>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
lcapitulino@redhat.com, "Wang, Wei W" <wei.w.wang@intel.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Dan Williams <dan.j.williams@intel.com>,
Alexander Duyck <alexander.h.duyck@linux.intel.com>
Subject: [virtio-dev] Re: [PATCH v5 6/6] virtio-balloon: Add support for providing unused page reports to host
Date: Wed, 4 Sep 2019 06:44:41 -0400 [thread overview]
Message-ID: <20190904064226-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <CAKgT0UfFU3oT5kKZk999XfrM6oducTizcUL5xpDWmMG=oP04ow@mail.gmail.com>
On Tue, Sep 03, 2019 at 07:13:32AM -0700, Alexander Duyck wrote:
> On Tue, Sep 3, 2019 at 12:32 AM Michael S. Tsirkin <mst@redhat.com> wrote:
> >
> > On Mon, Aug 12, 2019 at 02:33:56PM -0700, Alexander Duyck wrote:
> > > From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
> > >
> > > Add support for the page reporting feature provided by virtio-balloon.
> > > Reporting differs from the regular balloon functionality in that is is
> > > much less durable than a standard memory balloon. Instead of creating a
> > > list of pages that cannot be accessed the pages are only inaccessible
> > > while they are being indicated to the virtio interface. Once the
> > > interface has acknowledged them they are placed back into their respective
> > > free lists and are once again accessible by the guest system.
> > >
> > > Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
> > > ---
> > > drivers/virtio/Kconfig | 1 +
> > > drivers/virtio/virtio_balloon.c | 65 +++++++++++++++++++++++++++++++++++
> > > include/uapi/linux/virtio_balloon.h | 1 +
> > > 3 files changed, 67 insertions(+)
> > >
> > > diff --git a/drivers/virtio/Kconfig b/drivers/virtio/Kconfig
> > > index 078615cf2afc..4b2dd8259ff5 100644
> > > --- a/drivers/virtio/Kconfig
> > > +++ b/drivers/virtio/Kconfig
> > > @@ -58,6 +58,7 @@ config VIRTIO_BALLOON
> > > tristate "Virtio balloon driver"
> > > depends on VIRTIO
> > > select MEMORY_BALLOON
> > > + select PAGE_REPORTING
> > > ---help---
> > > This driver supports increasing and decreasing the amount
> > > of memory within a KVM guest.
> > > diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> > > index 2c19457ab573..52f9eeda1877 100644
> > > --- a/drivers/virtio/virtio_balloon.c
> > > +++ b/drivers/virtio/virtio_balloon.c
> > > @@ -19,6 +19,7 @@
> > > #include <linux/mount.h>
> > > #include <linux/magic.h>
> > > #include <linux/pseudo_fs.h>
> > > +#include <linux/page_reporting.h>
> > >
> > > /*
> > > * Balloon device works in 4K page units. So each page is pointed to by
> > > @@ -37,6 +38,9 @@
> > > #define VIRTIO_BALLOON_FREE_PAGE_SIZE \
> > > (1 << (VIRTIO_BALLOON_FREE_PAGE_ORDER + PAGE_SHIFT))
> > >
> > > +/* limit on the number of pages that can be on the reporting vq */
> > > +#define VIRTIO_BALLOON_VRING_HINTS_MAX 16
> > > +
> > > #ifdef CONFIG_BALLOON_COMPACTION
> > > static struct vfsmount *balloon_mnt;
> > > #endif
> > > @@ -46,6 +50,7 @@ enum virtio_balloon_vq {
> > > VIRTIO_BALLOON_VQ_DEFLATE,
> > > VIRTIO_BALLOON_VQ_STATS,
> > > VIRTIO_BALLOON_VQ_FREE_PAGE,
> > > + VIRTIO_BALLOON_VQ_REPORTING,
> > > VIRTIO_BALLOON_VQ_MAX
> > > };
> > >
> > > @@ -113,6 +118,10 @@ struct virtio_balloon {
> > >
> > > /* To register a shrinker to shrink memory upon memory pressure */
> > > struct shrinker shrinker;
> > > +
> > > + /* Unused page reporting device */
> > > + struct virtqueue *reporting_vq;
> > > + struct page_reporting_dev_info ph_dev_info;
> > > };
> > >
> > > static struct virtio_device_id id_table[] = {
> > > @@ -152,6 +161,32 @@ static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
> > >
> > > }
> > >
> > > +void virtballoon_unused_page_report(struct page_reporting_dev_info *ph_dev_info,
> > > + unsigned int nents)
> > > +{
> > > + struct virtio_balloon *vb =
> > > + container_of(ph_dev_info, struct virtio_balloon, ph_dev_info);
> > > + struct virtqueue *vq = vb->reporting_vq;
> > > + unsigned int unused, err;
> > > +
> > > + /* We should always be able to add these buffers to an empty queue. */
> > > + err = virtqueue_add_inbuf(vq, ph_dev_info->sg, nents, vb,
> > > + GFP_NOWAIT | __GFP_NOWARN);
> > > +
> > > + /*
> > > + * In the extremely unlikely case that something has changed and we
> > > + * are able to trigger an error we will simply display a warning
> > > + * and exit without actually processing the pages.
> > > + */
> > > + if (WARN_ON(err))
> > > + return;
> > > +
> > > + virtqueue_kick(vq);
> > > +
> > > + /* When host has read buffer, this completes via balloon_ack */
> > > + wait_event(vb->acked, virtqueue_get_buf(vq, &unused));
> > > +}
> > > +
> > > static void set_page_pfns(struct virtio_balloon *vb,
> > > __virtio32 pfns[], struct page *page)
> > > {
> > > @@ -476,6 +511,7 @@ static int init_vqs(struct virtio_balloon *vb)
> > > names[VIRTIO_BALLOON_VQ_DEFLATE] = "deflate";
> > > names[VIRTIO_BALLOON_VQ_STATS] = NULL;
> > > names[VIRTIO_BALLOON_VQ_FREE_PAGE] = NULL;
> > > + names[VIRTIO_BALLOON_VQ_REPORTING] = NULL;
> > >
> > > if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ)) {
> > > names[VIRTIO_BALLOON_VQ_STATS] = "stats";
> > > @@ -487,11 +523,19 @@ static int init_vqs(struct virtio_balloon *vb)
> > > callbacks[VIRTIO_BALLOON_VQ_FREE_PAGE] = NULL;
> > > }
> > >
> > > + if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) {
> > > + names[VIRTIO_BALLOON_VQ_REPORTING] = "reporting_vq";
> > > + callbacks[VIRTIO_BALLOON_VQ_REPORTING] = balloon_ack;
> > > + }
> > > +
> > > err = vb->vdev->config->find_vqs(vb->vdev, VIRTIO_BALLOON_VQ_MAX,
> > > vqs, callbacks, names, NULL, NULL);
> > > if (err)
> > > return err;
> > >
> > > + if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING))
> > > + vb->reporting_vq = vqs[VIRTIO_BALLOON_VQ_REPORTING];
> > > +
> > > vb->inflate_vq = vqs[VIRTIO_BALLOON_VQ_INFLATE];
> > > vb->deflate_vq = vqs[VIRTIO_BALLOON_VQ_DEFLATE];
> > > if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ)) {
> > > @@ -931,12 +975,30 @@ static int virtballoon_probe(struct virtio_device *vdev)
> > > if (err)
> > > goto out_del_balloon_wq;
> > > }
> > > +
> > > + vb->ph_dev_info.report = virtballoon_unused_page_report;
> > > + if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) {
> > > + unsigned int capacity;
> > > +
> > > + capacity = min_t(unsigned int,
> > > + virtqueue_get_vring_size(vb->reporting_vq) - 1,
> > > + VIRTIO_BALLOON_VRING_HINTS_MAX);
> >
> > Hmm why - 1 exactly?
> > This might end up being 0 in the unusual configuration of vq size 1.
> > Also, VIRTIO_BALLOON_VRING_HINTS_MAX is a power of 2 but
> > virtqueue_get_vring_size(vb->reporting_vq) - 1 won't
> > be if we are using split rings - donnu if that matters.
>
> Is a vq size of 1 valid?
> Does that mean you can use that 1 descriptor?
It seems to be according to the spec, and linux seems to accept that
without issues, and only put 1 descriptor there.
> Odds are I probably misunderstood the ring config in the other hinting
> implementation. Looking it over now I guess it was adding one
> additional entry for a command header and that was why it was
> reserving one additional slot. I can update the code to drop the "- 1"
> if the ring is capable of being fully utilized.
>
> Thanks.
>
> - Alex
It should be. I just hacked qemu to have 1 descriptor sized ring
and everything seems to work.
--
MST
---------------------------------------------------------------------
To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org
For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Alexander Duyck <alexander.duyck@gmail.com>
Cc: Nitesh Narayan Lal <nitesh@redhat.com>,
kvm list <kvm@vger.kernel.org>,
David Hildenbrand <david@redhat.com>,
Dave Hansen <dave.hansen@intel.com>,
LKML <linux-kernel@vger.kernel.org>,
Matthew Wilcox <willy@infradead.org>,
Michal Hocko <mhocko@kernel.org>, linux-mm <linux-mm@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>,
virtio-dev@lists.oasis-open.org,
Oscar Salvador <osalvador@suse.de>,
Yang Zhang <yang.zhang.wz@gmail.com>,
Pankaj Gupta <pagupta@redhat.com>,
Rik van Riel <riel@surriel.com>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
lcapitulino@redhat.com, "Wang, Wei W" <wei.w.wang@intel.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Dan Williams <dan.j.williams@intel.com>,
Alexander Duyck <alexander.h.duyck@linux.intel.com>
Subject: Re: [PATCH v5 6/6] virtio-balloon: Add support for providing unused page reports to host
Date: Wed, 4 Sep 2019 06:44:41 -0400 [thread overview]
Message-ID: <20190904064226-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <CAKgT0UfFU3oT5kKZk999XfrM6oducTizcUL5xpDWmMG=oP04ow@mail.gmail.com>
On Tue, Sep 03, 2019 at 07:13:32AM -0700, Alexander Duyck wrote:
> On Tue, Sep 3, 2019 at 12:32 AM Michael S. Tsirkin <mst@redhat.com> wrote:
> >
> > On Mon, Aug 12, 2019 at 02:33:56PM -0700, Alexander Duyck wrote:
> > > From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
> > >
> > > Add support for the page reporting feature provided by virtio-balloon.
> > > Reporting differs from the regular balloon functionality in that is is
> > > much less durable than a standard memory balloon. Instead of creating a
> > > list of pages that cannot be accessed the pages are only inaccessible
> > > while they are being indicated to the virtio interface. Once the
> > > interface has acknowledged them they are placed back into their respective
> > > free lists and are once again accessible by the guest system.
> > >
> > > Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
> > > ---
> > > drivers/virtio/Kconfig | 1 +
> > > drivers/virtio/virtio_balloon.c | 65 +++++++++++++++++++++++++++++++++++
> > > include/uapi/linux/virtio_balloon.h | 1 +
> > > 3 files changed, 67 insertions(+)
> > >
> > > diff --git a/drivers/virtio/Kconfig b/drivers/virtio/Kconfig
> > > index 078615cf2afc..4b2dd8259ff5 100644
> > > --- a/drivers/virtio/Kconfig
> > > +++ b/drivers/virtio/Kconfig
> > > @@ -58,6 +58,7 @@ config VIRTIO_BALLOON
> > > tristate "Virtio balloon driver"
> > > depends on VIRTIO
> > > select MEMORY_BALLOON
> > > + select PAGE_REPORTING
> > > ---help---
> > > This driver supports increasing and decreasing the amount
> > > of memory within a KVM guest.
> > > diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> > > index 2c19457ab573..52f9eeda1877 100644
> > > --- a/drivers/virtio/virtio_balloon.c
> > > +++ b/drivers/virtio/virtio_balloon.c
> > > @@ -19,6 +19,7 @@
> > > #include <linux/mount.h>
> > > #include <linux/magic.h>
> > > #include <linux/pseudo_fs.h>
> > > +#include <linux/page_reporting.h>
> > >
> > > /*
> > > * Balloon device works in 4K page units. So each page is pointed to by
> > > @@ -37,6 +38,9 @@
> > > #define VIRTIO_BALLOON_FREE_PAGE_SIZE \
> > > (1 << (VIRTIO_BALLOON_FREE_PAGE_ORDER + PAGE_SHIFT))
> > >
> > > +/* limit on the number of pages that can be on the reporting vq */
> > > +#define VIRTIO_BALLOON_VRING_HINTS_MAX 16
> > > +
> > > #ifdef CONFIG_BALLOON_COMPACTION
> > > static struct vfsmount *balloon_mnt;
> > > #endif
> > > @@ -46,6 +50,7 @@ enum virtio_balloon_vq {
> > > VIRTIO_BALLOON_VQ_DEFLATE,
> > > VIRTIO_BALLOON_VQ_STATS,
> > > VIRTIO_BALLOON_VQ_FREE_PAGE,
> > > + VIRTIO_BALLOON_VQ_REPORTING,
> > > VIRTIO_BALLOON_VQ_MAX
> > > };
> > >
> > > @@ -113,6 +118,10 @@ struct virtio_balloon {
> > >
> > > /* To register a shrinker to shrink memory upon memory pressure */
> > > struct shrinker shrinker;
> > > +
> > > + /* Unused page reporting device */
> > > + struct virtqueue *reporting_vq;
> > > + struct page_reporting_dev_info ph_dev_info;
> > > };
> > >
> > > static struct virtio_device_id id_table[] = {
> > > @@ -152,6 +161,32 @@ static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
> > >
> > > }
> > >
> > > +void virtballoon_unused_page_report(struct page_reporting_dev_info *ph_dev_info,
> > > + unsigned int nents)
> > > +{
> > > + struct virtio_balloon *vb =
> > > + container_of(ph_dev_info, struct virtio_balloon, ph_dev_info);
> > > + struct virtqueue *vq = vb->reporting_vq;
> > > + unsigned int unused, err;
> > > +
> > > + /* We should always be able to add these buffers to an empty queue. */
> > > + err = virtqueue_add_inbuf(vq, ph_dev_info->sg, nents, vb,
> > > + GFP_NOWAIT | __GFP_NOWARN);
> > > +
> > > + /*
> > > + * In the extremely unlikely case that something has changed and we
> > > + * are able to trigger an error we will simply display a warning
> > > + * and exit without actually processing the pages.
> > > + */
> > > + if (WARN_ON(err))
> > > + return;
> > > +
> > > + virtqueue_kick(vq);
> > > +
> > > + /* When host has read buffer, this completes via balloon_ack */
> > > + wait_event(vb->acked, virtqueue_get_buf(vq, &unused));
> > > +}
> > > +
> > > static void set_page_pfns(struct virtio_balloon *vb,
> > > __virtio32 pfns[], struct page *page)
> > > {
> > > @@ -476,6 +511,7 @@ static int init_vqs(struct virtio_balloon *vb)
> > > names[VIRTIO_BALLOON_VQ_DEFLATE] = "deflate";
> > > names[VIRTIO_BALLOON_VQ_STATS] = NULL;
> > > names[VIRTIO_BALLOON_VQ_FREE_PAGE] = NULL;
> > > + names[VIRTIO_BALLOON_VQ_REPORTING] = NULL;
> > >
> > > if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ)) {
> > > names[VIRTIO_BALLOON_VQ_STATS] = "stats";
> > > @@ -487,11 +523,19 @@ static int init_vqs(struct virtio_balloon *vb)
> > > callbacks[VIRTIO_BALLOON_VQ_FREE_PAGE] = NULL;
> > > }
> > >
> > > + if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) {
> > > + names[VIRTIO_BALLOON_VQ_REPORTING] = "reporting_vq";
> > > + callbacks[VIRTIO_BALLOON_VQ_REPORTING] = balloon_ack;
> > > + }
> > > +
> > > err = vb->vdev->config->find_vqs(vb->vdev, VIRTIO_BALLOON_VQ_MAX,
> > > vqs, callbacks, names, NULL, NULL);
> > > if (err)
> > > return err;
> > >
> > > + if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING))
> > > + vb->reporting_vq = vqs[VIRTIO_BALLOON_VQ_REPORTING];
> > > +
> > > vb->inflate_vq = vqs[VIRTIO_BALLOON_VQ_INFLATE];
> > > vb->deflate_vq = vqs[VIRTIO_BALLOON_VQ_DEFLATE];
> > > if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ)) {
> > > @@ -931,12 +975,30 @@ static int virtballoon_probe(struct virtio_device *vdev)
> > > if (err)
> > > goto out_del_balloon_wq;
> > > }
> > > +
> > > + vb->ph_dev_info.report = virtballoon_unused_page_report;
> > > + if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) {
> > > + unsigned int capacity;
> > > +
> > > + capacity = min_t(unsigned int,
> > > + virtqueue_get_vring_size(vb->reporting_vq) - 1,
> > > + VIRTIO_BALLOON_VRING_HINTS_MAX);
> >
> > Hmm why - 1 exactly?
> > This might end up being 0 in the unusual configuration of vq size 1.
> > Also, VIRTIO_BALLOON_VRING_HINTS_MAX is a power of 2 but
> > virtqueue_get_vring_size(vb->reporting_vq) - 1 won't
> > be if we are using split rings - donnu if that matters.
>
> Is a vq size of 1 valid?
> Does that mean you can use that 1 descriptor?
It seems to be according to the spec, and linux seems to accept that
without issues, and only put 1 descriptor there.
> Odds are I probably misunderstood the ring config in the other hinting
> implementation. Looking it over now I guess it was adding one
> additional entry for a command header and that was why it was
> reserving one additional slot. I can update the code to drop the "- 1"
> if the ring is capable of being fully utilized.
>
> Thanks.
>
> - Alex
It should be. I just hacked qemu to have 1 descriptor sized ring
and everything seems to work.
--
MST
next prev parent reply other threads:[~2019-09-04 10:44 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-12 21:33 [virtio-dev] [PATCH v5 0/6] mm / virtio: Provide support for unused page reporting Alexander Duyck
2019-08-12 21:33 ` Alexander Duyck
2019-08-12 21:33 ` [virtio-dev] [PATCH v5 1/6] mm: Adjust shuffle code to allow for future coalescing Alexander Duyck
2019-08-12 21:33 ` Alexander Duyck
2019-08-12 22:24 ` Dan Williams
2019-08-12 22:49 ` [virtio-dev] " Alexander Duyck
2019-08-12 22:49 ` Alexander Duyck
2019-08-12 21:33 ` [virtio-dev] [PATCH v5 2/6] mm: Move set/get_pcppage_migratetype to mmzone.h Alexander Duyck
2019-08-12 21:33 ` Alexander Duyck
2019-08-12 21:33 ` [virtio-dev] [PATCH v5 3/6] mm: Use zone and order instead of free area in free_list manipulators Alexander Duyck
2019-08-12 21:33 ` Alexander Duyck
2019-08-12 22:39 ` Dan Williams
2019-08-12 21:33 ` [virtio-dev] [PATCH v5 4/6] mm: Introduce Reported pages Alexander Duyck
2019-08-12 21:33 ` Alexander Duyck
2019-08-13 8:07 ` [virtio-dev] " David Hildenbrand
2019-08-13 8:07 ` David Hildenbrand
2019-08-13 17:35 ` Alexander Duyck
2019-08-14 12:57 ` [virtio-dev] " David Hildenbrand
2019-08-14 12:57 ` David Hildenbrand
2019-08-13 8:34 ` kbuild test robot
2019-08-13 8:39 ` kbuild test robot
2019-08-12 21:33 ` [virtio-dev] [PATCH v5 5/6] virtio-balloon: Pull page poisoning config out of free page hinting Alexander Duyck
2019-08-12 21:33 ` Alexander Duyck
2019-08-12 21:33 ` [virtio-dev] [PATCH v5 6/6] virtio-balloon: Add support for providing unused page reports to host Alexander Duyck
2019-08-12 21:33 ` Alexander Duyck
2019-09-03 7:32 ` [virtio-dev] " Michael S. Tsirkin
2019-09-03 7:32 ` Michael S. Tsirkin
2019-09-03 14:13 ` [virtio-dev] " Alexander Duyck
2019-09-03 14:13 ` Alexander Duyck
2019-09-04 10:44 ` Michael S. Tsirkin [this message]
2019-09-04 10:44 ` Michael S. Tsirkin
2019-09-04 14:23 ` [virtio-dev] " Alexander Duyck
2019-09-04 14:23 ` Alexander Duyck
2019-08-12 21:34 ` [virtio-dev] [PATCH v5 QEMU 1/3] virtio-ballon: Implement support for page poison tracking feature Alexander Duyck
2019-08-12 21:34 ` Alexander Duyck
2019-08-12 21:34 ` [virtio-dev] [PATCH v5 QEMU 2/3] virtio-balloon: Add bit to notify guest of unused page reporting Alexander Duyck
2019-08-12 21:34 ` Alexander Duyck
2019-08-12 21:34 ` [virtio-dev] [PATCH v5 QEMU 3/3] virtio-balloon: Provide a interface for " Alexander Duyck
2019-08-12 21:34 ` Alexander Duyck
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=20190904064226-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=alexander.duyck@gmail.com \
--cc=alexander.h.duyck@linux.intel.com \
--cc=dan.j.williams@intel.com \
--cc=dave.hansen@intel.com \
--cc=david@redhat.com \
--cc=konrad.wilk@oracle.com \
--cc=kvm@vger.kernel.org \
--cc=lcapitulino@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=nitesh@redhat.com \
--cc=osalvador@suse.de \
--cc=pagupta@redhat.com \
--cc=pbonzini@redhat.com \
--cc=riel@surriel.com \
--cc=virtio-dev@lists.oasis-open.org \
--cc=wei.w.wang@intel.com \
--cc=willy@infradead.org \
--cc=yang.zhang.wz@gmail.com \
/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.