Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934521AbZJNQXd (ORCPT ); Wed, 14 Oct 2009 12:23:33 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1762010AbZJNQXc (ORCPT ); Wed, 14 Oct 2009 12:23:32 -0400 Received: from victor.provo.novell.com ([137.65.250.26]:59739 "EHLO victor.provo.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1762007AbZJNQXb (ORCPT ); Wed, 14 Oct 2009 12:23:31 -0400 From: Gregory Haskins Subject: [ALACRITYVM PATCH 1/2] vbus: allow shmsignals to be named To: alacrityvm-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Date: Wed, 14 Oct 2009 12:22:36 -0400 Message-ID: <20091014162235.19298.99134.stgit@dev.haskins.net> In-Reply-To: <20091014162030.19298.48508.stgit@dev.haskins.net> References: <20091014162030.19298.48508.stgit@dev.haskins.net> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6739 Lines: 205 This will allow the signals to be displayed to the end-user in some meaningful way later in the series, such as for statistics, etc. Signed-off-by: Gregory Haskins --- drivers/net/vbus-enet.c | 43 ++++++++++++++++++++++++++++++++++--------- drivers/vbus/bus-proxy.c | 6 +++--- drivers/vbus/pci-bridge.c | 3 ++- include/linux/vbus_driver.h | 7 ++++--- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/drivers/net/vbus-enet.c b/drivers/net/vbus-enet.c index 6fe2241..9d48674 100644 --- a/drivers/net/vbus-enet.c +++ b/drivers/net/vbus-enet.c @@ -101,14 +101,20 @@ napi_to_priv(struct napi_struct *napi) static int queue_init(struct vbus_enet_priv *priv, struct vbus_enet_queue *q, + const char *name, int qid, size_t ringsize, void (*func)(struct ioq_notifier *)) { struct vbus_device_proxy *dev = priv->vdev; int ret; + char _name[64]; - ret = vbus_driver_ioq_alloc(dev, qid, 0, ringsize, &q->queue); + if (name) + snprintf(_name, sizeof(_name), "%s-%s", priv->dev->name, name); + + ret = vbus_driver_ioq_alloc(dev, name ? _name : NULL, qid, 0, + ringsize, &q->queue); if (ret < 0) panic("ioq_alloc failed: %d\n", ret); @@ -396,7 +402,8 @@ tx_setup(struct vbus_enet_priv *priv) priv->pmtd.pool = pool; - ret = dev->ops->shm(dev, shmid, 0, pool, poollen, 0, NULL, 0); + ret = dev->ops->shm(dev, NULL, shmid, 0, pool, poollen, + 0, NULL, 0); BUG_ON(ret < 0); } @@ -1227,12 +1234,13 @@ vbus_enet_evq_negcap(struct vbus_enet_priv *priv, unsigned long count) priv->evq.pool = pool; - ret = dev->ops->shm(dev, query.dpid, 0, + ret = dev->ops->shm(dev, NULL, query.dpid, 0, pool, poollen, 0, NULL, 0); if (ret < 0) return ret; - queue_init(priv, &priv->evq.veq, query.qid, count, evq_isr); + queue_init(priv, &priv->evq.veq, "evq", + query.qid, count, evq_isr); ret = ioq_iter_init(priv->evq.veq.queue, &iter, ioq_idxtype_valid, 0); @@ -1302,7 +1310,7 @@ vbus_enet_l4ro_negcap(struct vbus_enet_priv *priv, unsigned long count) /* * pre-mapped descriptor pool */ - ret = dev->ops->shm(dev, query.dpid, 0, + ret = dev->ops->shm(dev, NULL, query.dpid, 0, pool, poollen, 0, NULL, 0); if (ret < 0) { printk(KERN_ERR "Error registering L4RO pool: %d\n", @@ -1317,7 +1325,8 @@ vbus_enet_l4ro_negcap(struct vbus_enet_priv *priv, unsigned long count) * one MTU frame. All we need to do is keep it populated * with free pages. */ - queue_init(priv, &priv->l4ro.pageq, query.pqid, count, NULL); + queue_init(priv, &priv->l4ro.pageq, "pageq", query.pqid, + count, NULL); priv->l4ro.pool = pool; priv->l4ro.available = true; @@ -1395,6 +1404,16 @@ vbus_enet_probe(struct vbus_device_proxy *vdev) if (!dev) return -ENOMEM; + /* + * establish our device-name early so we can incorporate it into + * the signal-path names, etc + */ + rtnl_lock(); + + ret = dev_alloc_name(dev, dev->name); + if (ret < 0) + goto out_free; + priv = netdev_priv(dev); spin_lock_init(&priv->lock); @@ -1416,8 +1435,10 @@ vbus_enet_probe(struct vbus_device_proxy *vdev) skb_queue_head_init(&priv->tx.outstanding); - queue_init(priv, &priv->rxq, VENET_QUEUE_RX, rx_ringlen, rx_isr); - queue_init(priv, &priv->tx.veq, VENET_QUEUE_TX, tx_ringlen, tx_isr); + queue_init(priv, &priv->rxq, "rx", VENET_QUEUE_RX, rx_ringlen, + rx_isr); + queue_init(priv, &priv->tx.veq, "tx", VENET_QUEUE_TX, tx_ringlen, + tx_isr); rx_setup(priv); tx_setup(priv); @@ -1453,18 +1474,22 @@ vbus_enet_probe(struct vbus_device_proxy *vdev) dev->features |= NETIF_F_HIGHDMA; - ret = register_netdev(dev); + ret = register_netdevice(dev); if (ret < 0) { printk(KERN_INFO "VENET: error %i registering device \"%s\"\n", ret, dev->name); goto out_free; } + rtnl_unlock(); + vdev->priv = priv; return 0; out_free: + rtnl_unlock(); + free_netdev(dev); return ret; diff --git a/drivers/vbus/bus-proxy.c b/drivers/vbus/bus-proxy.c index 88cd904..5d34942 100644 --- a/drivers/vbus/bus-proxy.c +++ b/drivers/vbus/bus-proxy.c @@ -167,8 +167,8 @@ static struct ioq_ops vbus_driver_ioq_ops = { }; -int vbus_driver_ioq_alloc(struct vbus_device_proxy *dev, int id, int prio, - size_t count, struct ioq **ioq) +int vbus_driver_ioq_alloc(struct vbus_device_proxy *dev, const char *name, + int id, int prio, size_t count, struct ioq **ioq) { struct ioq *_ioq; struct ioq_ring_head *head = NULL; @@ -188,7 +188,7 @@ int vbus_driver_ioq_alloc(struct vbus_device_proxy *dev, int id, int prio, head->ver = IOQ_RING_VER; head->count = count; - ret = dev->ops->shm(dev, id, prio, head, len, + ret = dev->ops->shm(dev, name, id, prio, head, len, &head->signal, &signal, 0); if (ret < 0) goto error; diff --git a/drivers/vbus/pci-bridge.c b/drivers/vbus/pci-bridge.c index 80718e6..fa77318 100644 --- a/drivers/vbus/pci-bridge.c +++ b/drivers/vbus/pci-bridge.c @@ -262,7 +262,8 @@ vbus_pci_device_close(struct vbus_device_proxy *vdev, int flags) } static int -vbus_pci_device_shm(struct vbus_device_proxy *vdev, int id, int prio, +vbus_pci_device_shm(struct vbus_device_proxy *vdev, const char *name, + int id, int prio, void *ptr, size_t len, struct shm_signal_desc *sdesc, struct shm_signal **signal, int flags) diff --git a/include/linux/vbus_driver.h b/include/linux/vbus_driver.h index 9cfbf60..2b1dac4 100644 --- a/include/linux/vbus_driver.h +++ b/include/linux/vbus_driver.h @@ -34,7 +34,8 @@ struct vbus_driver; struct vbus_device_proxy_ops { int (*open)(struct vbus_device_proxy *dev, int version, int flags); int (*close)(struct vbus_device_proxy *dev, int flags); - int (*shm)(struct vbus_device_proxy *dev, int id, int prio, + int (*shm)(struct vbus_device_proxy *dev, const char *name, + int id, int prio, void *ptr, size_t len, struct shm_signal_desc *sigdesc, struct shm_signal **signal, int flags); @@ -74,7 +75,7 @@ void vbus_driver_unregister(struct vbus_driver *drv); /* * driver-side IOQ helper - allocates device-shm and maps an IOQ on it */ -int vbus_driver_ioq_alloc(struct vbus_device_proxy *dev, int id, int prio, - size_t ringsize, struct ioq **ioq); +int vbus_driver_ioq_alloc(struct vbus_device_proxy *dev, const char *name, + int id, int prio, size_t ringsize, struct ioq **ioq); #endif /* _LINUX_VBUS_DRIVER_H */ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/