From: KY Srinivasan <kys@microsoft.com>
To: KY Srinivasan <kys@microsoft.com>, Greg KH <gregkh@linuxfoundation.org>
Cc: "olaf@aepfle.de" <olaf@aepfle.de>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"virtualization@lists.osdl.org" <virtualization@lists.osdl.org>,
"apw@canonical.com" <apw@canonical.com>,
"devel@linuxdriverproject.org" <devel@linuxdriverproject.org>,
"ben@decadent.org.uk" <ben@decadent.org.uk>
Subject: RE: [PATCH V2 02/18] Drivers: hv: Add KVP definitions for IP address injection
Date: Wed, 15 Aug 2012 12:39:55 +0000 [thread overview]
Message-ID: <426367E2313C2449837CD2DE46E7EAF9236C0FA1@SN2PRD0310MB382.namprd03.prod.outlook.com> (raw)
In-Reply-To: <426367E2313C2449837CD2DE46E7EAF9236BF8D0@SN2PRD0310MB382.namprd03.prod.outlook.com>
> -----Original Message-----
> From: devel-bounces@linuxdriverproject.org [mailto:devel-
> bounces@linuxdriverproject.org] On Behalf Of KY Srinivasan
> Sent: Monday, August 13, 2012 10:57 PM
> To: Greg KH
> Cc: olaf@aepfle.de; linux-kernel@vger.kernel.org; virtualization@lists.osdl.org;
> apw@canonical.com; devel@linuxdriverproject.org; ben@decadent.org.uk
> Subject: RE: [PATCH V2 02/18] Drivers: hv: Add KVP definitions for IP address
> injection
>
>
>
> > -----Original Message-----
> > From: Greg KH [mailto:gregkh@linuxfoundation.org]
> > Sent: Monday, August 13, 2012 9:38 PM
> > To: KY Srinivasan
> > Cc: linux-kernel@vger.kernel.org; devel@linuxdriverproject.org;
> > virtualization@lists.osdl.org; olaf@aepfle.de; apw@canonical.com;
> > ben@decadent.org.uk
> > Subject: Re: [PATCH V2 02/18] Drivers: hv: Add KVP definitions for IP address
> > injection
> >
> > On Mon, Aug 13, 2012 at 10:06:51AM -0700, K. Y. Srinivasan wrote:
> > > Add the necessary definitions for supporting the IP injection functionality.
> > >
> > > Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
> > > Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
> > > Reviewed-by: Olaf Hering <olaf@aepfle.de>
> > > Reviewed-by: Ben Hutchings <ben@decadent.org.uk>
> > > ---
> > > drivers/hv/hv_util.c | 4 +-
> > > include/linux/hyperv.h | 76
> > ++++++++++++++++++++++++++++++++++++++++++++-
> > > tools/hv/hv_kvp_daemon.c | 2 +-
> > > 3 files changed, 77 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c
> > > index d3ac6a4..a0667de 100644
> > > --- a/drivers/hv/hv_util.c
> > > +++ b/drivers/hv/hv_util.c
> > > @@ -263,7 +263,7 @@ static int util_probe(struct hv_device *dev,
> > > (struct hv_util_service *)dev_id->driver_data;
> > > int ret;
> > >
> > > - srv->recv_buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
> > > + srv->recv_buffer = kmalloc(PAGE_SIZE * 2, GFP_KERNEL);
> > > if (!srv->recv_buffer)
> > > return -ENOMEM;
> > > if (srv->util_init) {
> > > @@ -274,7 +274,7 @@ static int util_probe(struct hv_device *dev,
> > > }
> > > }
> > >
> > > - ret = vmbus_open(dev->channel, 2 * PAGE_SIZE, 2 * PAGE_SIZE, NULL,
> > 0,
> > > + ret = vmbus_open(dev->channel, 4 * PAGE_SIZE, 4 * PAGE_SIZE, NULL,
> > 0,
> > > srv->util_cb, dev->channel);
> > > if (ret)
> > > goto error;
> > > diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
> > > index 68ed7f7..11afc4e 100644
> > > --- a/include/linux/hyperv.h
> > > +++ b/include/linux/hyperv.h
> > > @@ -122,12 +122,53 @@
> > > #define REG_U32 4
> > > #define REG_U64 8
> > >
> > > +/*
> > > + * As we look at expanding the KVP functionality to include
> > > + * IP injection functionality, we need to maintain binary
> > > + * compatibility with older daemons.
> > > + *
> > > + * The KVP opcodes are defined by the host and it was unfortunate
> > > + * that I chose to treat the registration operation as part of the
> > > + * KVP operations defined by the host.
> > > + * Here is the level of compatibility
> > > + * (between the user level daemon and the kernel KVP driver) that we
> > > + * will implement:
> > > + *
> > > + * An older daemon will always be supported on a newer driver.
> > > + * A given user level daemon will require a minimal version of the
> > > + * kernel driver.
> > > + * If we cannot handle the version differences, we will fail gracefully
> > > + * (this can happen when we have a user level daemon that is more
> > > + * advanced than the KVP driver.
> > > + *
> > > + * We will use values used in this handshake for determining if we have
> > > + * workable user level daemon and the kernel driver. We begin by taking the
> > > + * registration opcode out of the KVP opcode namespace. We will however,
> > > + * maintain compatibility with the existing user-level daemon code.
> > > + */
> > > +
> > > +/*
> > > + * Daemon code not supporting IP injection (legacy daemon).
> > > + */
> > > +
> > > +#define KVP_OP_REGISTER 4
> >
> > Huh?
> >
> > > +/*
> > > + * Daemon code supporting IP injection.
> > > + * The KVP opcode field is used to communicate the
> > > + * registration information; so define a namespace that
> > > + * will be distinct from the host defined KVP opcode.
> > > + */
> > > +
> > > +#define KVP_OP_REGISTER1 100
> > > +
> > > enum hv_kvp_exchg_op {
> > > KVP_OP_GET = 0,
> > > KVP_OP_SET,
> > > KVP_OP_DELETE,
> > > KVP_OP_ENUMERATE,
> > > - KVP_OP_REGISTER,
> > > + KVP_OP_GET_IP_INFO,
> > > + KVP_OP_SET_IP_INFO,
> >
> > So you overloaded the command and somehow think that is ok? How is that
> > supposed to work? Why not just always keep it there, but fail if it is
> > called as you know you have a mismatch?
> >
> > Otherwise, again, you just broke older tools on a newer kernel.
> >
> > Or am I missing something here?
>
> Greg,
>
> The registration operation occurs when the daemon first starts up. I should have
> established
> a distinct namespace for the daemon versions that would not overlap with the
> host
> defined KVP operations initially. Unfortunately when I first implemented KVP, I
> did not know
> about the new KVP verbs and so selected a value that ended up colliding with the
> new KVP
> operations. To maintain compatibility with older daemons, I have to support this
> old registration
> value, which is what you are seeing here. Since the initial driver/daemon
> handshake phase does
> not overlap with the normal functioning of the KVP stack, we can use the old
> daemon
> registration value to distinguish that the daemon does not support IP injection.
> The current
> implementation does support a compatible environment for older daemons.
>
Greg,
I hope this explanation is satisfactory. If there are other issues that you would
want me to address before this patch set can be accepted, let me know and I will
address them right away.
Regards,
K. Y
next prev parent reply other threads:[~2012-08-15 12:40 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-13 17:06 [PATCH V2 00/18] drivers: hv: kvp K. Y. Srinivasan
2012-08-13 17:06 ` [PATCH V2 01/18] Drivers: hv: vmbus: Use the standard format string to format GUIDs K. Y. Srinivasan
2012-08-13 17:06 ` [PATCH V2 02/18] Drivers: hv: Add KVP definitions for IP address injection K. Y. Srinivasan
2012-08-14 1:38 ` Greg KH
2012-08-14 1:56 ` Ben Hutchings
2012-08-14 2:56 ` KY Srinivasan
2012-08-15 12:39 ` KY Srinivasan [this message]
2012-08-13 17:06 ` [PATCH V2 03/18] Drivers: hv: kvp: Cleanup error handling in KVP K. Y. Srinivasan
2012-08-13 17:06 ` [PATCH V2 04/18] Drivers: hv: kvp: Support the new IP injection messages K. Y. Srinivasan
2012-08-16 20:50 ` Greg KH
2012-08-13 17:06 ` [PATCH V2 05/18] Tools: hv: Prepare to expand kvp_get_ip_address() functionality K. Y. Srinivasan
2012-08-13 17:06 ` [PATCH V2 06/18] Tools: hv: Further refactor kvp_get_ip_address() K. Y. Srinivasan
2012-08-14 1:46 ` Ben Hutchings
2012-08-14 3:01 ` KY Srinivasan
2012-08-13 17:06 ` [PATCH V2 07/18] Tools: hv: Gather address family information K. Y. Srinivasan
2012-08-13 17:06 ` [PATCH V2 08/18] Tools: hv: Gather subnet information K. Y. Srinivasan
2012-08-13 17:06 ` [PATCH V2 09/18] Tools: hv: Represent the ipv6 mask using CIDR notation K. Y. Srinivasan
2012-08-13 17:06 ` [PATCH V2 10/18] Tools: hv: Gather ipv[4,6] gateway information K. Y. Srinivasan
2012-08-13 17:07 ` [PATCH V2 11/18] Tools: hv: Gather DNS information K. Y. Srinivasan
2012-08-13 17:07 ` [PATCH V2 12/18] Tools: hv: Gather DHCP information K. Y. Srinivasan
2012-08-13 17:07 ` [PATCH V2 13/18] Tools: hv: Implement the KVP verb - KVP_OP_SET_IP_INFO K. Y. Srinivasan
2012-08-13 17:07 ` [PATCH V2 14/18] Tools: hv: Rename the function kvp_get_ip_address() K. Y. Srinivasan
2012-08-13 17:07 ` [PATCH V2 15/18] Tools: hv: Implement the KVP verb - KVP_OP_GET_IP_INFO K. Y. Srinivasan
2012-08-13 17:07 ` [PATCH V2 16/18] Tools: hv: Get rid of some unused variables K. Y. Srinivasan
2012-08-13 17:07 ` [PATCH V2 17/18] Tools: hv: Correctly type string variables K. Y. Srinivasan
2012-08-13 17:07 ` [PATCH V2 18/18] Tools: hv: Properly manage open streams K. Y. Srinivasan
2012-08-14 1:57 ` Ben Hutchings
2012-08-14 3:17 ` KY Srinivasan
2012-08-16 20:55 ` [PATCH V2 00/18] drivers: hv: kvp Greg KH
2012-08-16 22:40 ` KY Srinivasan
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=426367E2313C2449837CD2DE46E7EAF9236C0FA1@SN2PRD0310MB382.namprd03.prod.outlook.com \
--to=kys@microsoft.com \
--cc=apw@canonical.com \
--cc=ben@decadent.org.uk \
--cc=devel@linuxdriverproject.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=olaf@aepfle.de \
--cc=virtualization@lists.osdl.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).