From patchwork Tue Jul 8 09:32:27 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Weinberger X-Patchwork-Id: 367843 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 1B9BC140081 for ; Tue, 8 Jul 2014 19:41:11 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753050AbaGHJlF (ORCPT ); Tue, 8 Jul 2014 05:41:05 -0400 Received: from mail.sigma-star.at ([95.130.255.111]:14385 "EHLO mail.sigma-star.at" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752526AbaGHJlE (ORCPT ); Tue, 8 Jul 2014 05:41:04 -0400 X-Greylist: delayed 503 seconds by postgrey-1.27 at vger.kernel.org; Tue, 08 Jul 2014 05:41:04 EDT Received: from localhost (localhost.localdomain [127.0.0.1]) by mail.sigma-star.at (Postfix) with ESMTP id 7382416B428A; Tue, 8 Jul 2014 11:32:38 +0200 (CEST) X-Virus-Scanned: amavisd-new at mail.sigma-star.at Received: from linux.site (richard.vpn.sigmapriv.at [10.3.0.5]) by mail.sigma-star.at (Postfix) with ESMTPSA id 2740516B4010; Tue, 8 Jul 2014 11:32:37 +0200 (CEST) From: Richard Weinberger To: kys@microsoft.com, haiyangz@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Richard Weinberger Subject: [PATCH] hyperv: Add netpoll support Date: Tue, 8 Jul 2014 11:32:27 +0200 Message-Id: <1404811947-5174-1-git-send-email-richard@nod.at> X-Mailer: git-send-email 2.0.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org In order to have at least a netconsole to debug kernel issues on Windows Azure this patch implements netpoll support. Sending packets is easy, netvsc_start_xmit() does already everything needed. To receive we need to trigger the channel callback which is usally called via tasklet_schedule(). Signed-off-by: Richard Weinberger --- drivers/net/hyperv/netvsc_drv.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 4fd71b7..367b71e 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -736,6 +736,17 @@ static int netvsc_set_mac_addr(struct net_device *ndev, void *p) return err; } +#ifdef CONFIG_NET_POLL_CONTROLLER +static void netvsc_poll_controller(struct net_device *net) +{ + struct net_device_context *net_device_ctx = netdev_priv(net); + struct hv_device *dev = net_device_ctx->device_ctx; + + local_bh_disable(); + netvsc_channel_cb(dev->channel); + local_bh_enable(); +} +#endif static const struct ethtool_ops ethtool_ops = { .get_drvinfo = netvsc_get_drvinfo, @@ -751,6 +762,9 @@ static const struct net_device_ops device_ops = { .ndo_validate_addr = eth_validate_addr, .ndo_set_mac_address = netvsc_set_mac_addr, .ndo_select_queue = netvsc_select_queue, +#ifdef CONFIG_NET_POLL_CONTROLLER + .ndo_poll_controller = netvsc_poll_controller, +#endif }; /*