* [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c @ 2011-11-30 15:19 Haiyang Zhang 2011-11-30 15:19 ` [PATCH 2/2] net/hyperv: Add support for promiscuous mode setting Haiyang Zhang 2011-11-30 17:36 ` [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c David Miller 0 siblings, 2 replies; 5+ messages in thread From: Haiyang Zhang @ 2011-11-30 15:19 UTC (permalink / raw) To: haiyangz, kys, davem, gregkh, linux-kernel, netdev, devel Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> --- drivers/net/hyperv/netvsc.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index 28e69a6..4a807e4 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -230,9 +230,11 @@ static int netvsc_init_recv_buf(struct hv_device *device) net_device->recv_section_cnt = init_packet->msg. v1_msg.send_recv_buf_complete.num_sections; - net_device->recv_section = kmemdup(init_packet->msg.v1_msg.send_recv_buf_complete.sections, - net_device->recv_section_cnt * sizeof(struct nvsp_1_receive_buffer_section), - GFP_KERNEL); + net_device->recv_section = kmemdup( + init_packet->msg.v1_msg.send_recv_buf_complete.sections, + net_device->recv_section_cnt * + sizeof(struct nvsp_1_receive_buffer_section), + GFP_KERNEL); if (net_device->recv_section == NULL) { ret = -EINVAL; goto cleanup; -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] net/hyperv: Add support for promiscuous mode setting 2011-11-30 15:19 [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c Haiyang Zhang @ 2011-11-30 15:19 ` Haiyang Zhang 2011-11-30 17:36 ` [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c David Miller 1 sibling, 0 replies; 5+ messages in thread From: Haiyang Zhang @ 2011-11-30 15:19 UTC (permalink / raw) To: haiyangz, kys, davem, gregkh, linux-kernel, netdev, devel Add code to accept promiscuous mode setting, and pass it to RNDIS filter. Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> --- drivers/net/hyperv/hyperv_net.h | 24 +++++++++++++++++++ drivers/net/hyperv/netvsc_drv.c | 46 ++++++++++++++++++++++++++++++++++-- drivers/net/hyperv/rndis_filter.c | 23 +----------------- 3 files changed, 68 insertions(+), 25 deletions(-) diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h index ac1ec84..49b131f 100644 --- a/drivers/net/hyperv/hyperv_net.h +++ b/drivers/net/hyperv/hyperv_net.h @@ -87,6 +87,27 @@ struct netvsc_device_info { int ring_size; }; +enum rndis_device_state { + RNDIS_DEV_UNINITIALIZED = 0, + RNDIS_DEV_INITIALIZING, + RNDIS_DEV_INITIALIZED, + RNDIS_DEV_DATAINITIALIZED, +}; + +struct rndis_device { + struct netvsc_device *net_dev; + + enum rndis_device_state state; + bool link_state; + atomic_t new_req_id; + + spinlock_t request_lock; + struct list_head req_list; + + unsigned char hw_mac_adr[ETH_ALEN]; +}; + + /* Interface */ int netvsc_device_add(struct hv_device *device, void *additional_info); int netvsc_device_remove(struct hv_device *device); @@ -109,6 +130,9 @@ int rndis_filter_receive(struct hv_device *dev, int rndis_filter_send(struct hv_device *dev, struct hv_netvsc_packet *pkt); +int rndis_filter_set_packet_filter(struct rndis_device *dev, u32 new_filter); + + #define NVSP_INVALID_PROTOCOL_VERSION ((u32)0xFFFFFFFF) #define NVSP_PROTOCOL_VERSION_1 2 diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 93b0e91..b69c3a4 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -56,11 +56,51 @@ static int ring_size = 128; module_param(ring_size, int, S_IRUGO); MODULE_PARM_DESC(ring_size, "Ring buffer size (# of pages)"); -/* no-op so the netdev core doesn't return -EINVAL when modifying the the - * multicast address list in SIOCADDMULTI. hv is setup to get all multicast - * when it calls RndisFilterOnOpen() */ +struct set_multicast_work { + struct work_struct work; + struct net_device *net; +}; + +static void do_set_multicast(struct work_struct *w) +{ + struct set_multicast_work *swk = + container_of(w, struct set_multicast_work, work); + struct net_device *net = swk->net; + + struct net_device_context *ndevctx = netdev_priv(net); + struct netvsc_device *nvdev; + struct rndis_device *rdev; + + nvdev = hv_get_drvdata(ndevctx->device_ctx); + if (nvdev == NULL) + return; + + rdev = nvdev->extension; + if (rdev == NULL) + return; + + if (net->flags & IFF_PROMISC) + rndis_filter_set_packet_filter(rdev, + NDIS_PACKET_TYPE_PROMISCUOUS); + else + rndis_filter_set_packet_filter(rdev, + NDIS_PACKET_TYPE_BROADCAST | + NDIS_PACKET_TYPE_ALL_MULTICAST | + NDIS_PACKET_TYPE_DIRECTED); + + kfree(w); +} + static void netvsc_set_multicast_list(struct net_device *net) { + struct set_multicast_work *swk = + kmalloc(sizeof(struct set_multicast_work), GFP_ATOMIC); + if (swk == NULL) + return; + + swk->net = net; + INIT_WORK(&swk->work, do_set_multicast); + schedule_work(&swk->work); } static int netvsc_open(struct net_device *net) diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c index bafccb3..418e7aa 100644 --- a/drivers/net/hyperv/rndis_filter.c +++ b/drivers/net/hyperv/rndis_filter.c @@ -30,26 +30,6 @@ #include "hyperv_net.h" -enum rndis_device_state { - RNDIS_DEV_UNINITIALIZED = 0, - RNDIS_DEV_INITIALIZING, - RNDIS_DEV_INITIALIZED, - RNDIS_DEV_DATAINITIALIZED, -}; - -struct rndis_device { - struct netvsc_device *net_dev; - - enum rndis_device_state state; - bool link_state; - atomic_t new_req_id; - - spinlock_t request_lock; - struct list_head req_list; - - unsigned char hw_mac_adr[ETH_ALEN]; -}; - struct rndis_request { struct list_head list_ent; struct completion wait_event; @@ -522,8 +502,7 @@ static int rndis_filter_query_device_link_status(struct rndis_device *dev) return ret; } -static int rndis_filter_set_packet_filter(struct rndis_device *dev, - u32 new_filter) +int rndis_filter_set_packet_filter(struct rndis_device *dev, u32 new_filter) { struct rndis_request *request; struct rndis_set_request *set; -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c 2011-11-30 15:19 [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c Haiyang Zhang 2011-11-30 15:19 ` [PATCH 2/2] net/hyperv: Add support for promiscuous mode setting Haiyang Zhang @ 2011-11-30 17:36 ` David Miller 2011-11-30 19:13 ` Haiyang Zhang 1 sibling, 1 reply; 5+ messages in thread From: David Miller @ 2011-11-30 17:36 UTC (permalink / raw) To: haiyangz; +Cc: kys, gregkh, linux-kernel, netdev, devel Well, since Greg's tree is where the staging move happened, he'll have to take any patches to this driver that happen now, rather than me. ^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c 2011-11-30 17:36 ` [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c David Miller @ 2011-11-30 19:13 ` Haiyang Zhang 2011-11-30 21:57 ` Greg KH 0 siblings, 1 reply; 5+ messages in thread From: Haiyang Zhang @ 2011-11-30 19:13 UTC (permalink / raw) To: David Miller Cc: KY Srinivasan, gregkh@suse.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, devel@linuxdriverproject.org > -----Original Message----- > From: David Miller [mailto:davem@davemloft.net] > Sent: Wednesday, November 30, 2011 12:36 PM > To: Haiyang Zhang > Cc: KY Srinivasan; gregkh@suse.de; linux-kernel@vger.kernel.org; > netdev@vger.kernel.org; devel@linuxdriverproject.org > Subject: Re: [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c > > > Well, since Greg's tree is where the staging move happened, he'll have > to take any patches to this driver that happen now, rather than me. Sounds good. And, these patches were sent to devel@linuxdriverproject.org too. Greg, could you consider these patches for your tree? Thanks, - Haiyang ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c 2011-11-30 19:13 ` Haiyang Zhang @ 2011-11-30 21:57 ` Greg KH 0 siblings, 0 replies; 5+ messages in thread From: Greg KH @ 2011-11-30 21:57 UTC (permalink / raw) To: Haiyang Zhang Cc: David Miller, KY Srinivasan, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, devel@linuxdriverproject.org On Wed, Nov 30, 2011 at 07:13:49PM +0000, Haiyang Zhang wrote: > > -----Original Message----- > > From: David Miller [mailto:davem@davemloft.net] > > Sent: Wednesday, November 30, 2011 12:36 PM > > To: Haiyang Zhang > > Cc: KY Srinivasan; gregkh@suse.de; linux-kernel@vger.kernel.org; > > netdev@vger.kernel.org; devel@linuxdriverproject.org > > Subject: Re: [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c > > > > > > Well, since Greg's tree is where the staging move happened, he'll have > > to take any patches to this driver that happen now, rather than me. > > Sounds good. And, these patches were sent to devel@linuxdriverproject.org > too. > > Greg, could you consider these patches for your tree? Yes, I'll queue them up, thanks. greg k-h ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-11-30 21:57 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-11-30 15:19 [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c Haiyang Zhang 2011-11-30 15:19 ` [PATCH 2/2] net/hyperv: Add support for promiscuous mode setting Haiyang Zhang 2011-11-30 17:36 ` [PATCH 1/2] net/hyperv: Fix long lines in netvsc.c David Miller 2011-11-30 19:13 ` Haiyang Zhang 2011-11-30 21:57 ` Greg KH
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).