projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'for-linus-4.3-rc0b-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git]
/
drivers
/
net
/
xen-netfront.c
diff --git
a/drivers/net/xen-netfront.c
b/drivers/net/xen-netfront.c
index
f948c46
..
f821a97
100644
(file)
--- a/
drivers/net/xen-netfront.c
+++ b/
drivers/net/xen-netfront.c
@@
-291,7
+291,7
@@
static void xennet_alloc_rx_buffers(struct netfront_queue *queue)
struct sk_buff *skb;
unsigned short id;
grant_ref_t ref;
struct sk_buff *skb;
unsigned short id;
grant_ref_t ref;
- unsigned long
p
fn;
+ unsigned long
g
fn;
struct xen_netif_rx_request *req;
skb = xennet_alloc_one_rx_buffer(queue);
struct xen_netif_rx_request *req;
skb = xennet_alloc_one_rx_buffer(queue);
@@
-307,12
+307,12
@@
static void xennet_alloc_rx_buffers(struct netfront_queue *queue)
BUG_ON((signed short)ref < 0);
queue->grant_rx_ref[id] = ref;
BUG_ON((signed short)ref < 0);
queue->grant_rx_ref[id] = ref;
-
pfn = page_to_p
fn(skb_frag_page(&skb_shinfo(skb)->frags[0]));
+
gfn = xen_page_to_g
fn(skb_frag_page(&skb_shinfo(skb)->frags[0]));
req = RING_GET_REQUEST(&queue->rx, req_prod);
gnttab_grant_foreign_access_ref(ref,
queue->info->xbdev->otherend_id,
req = RING_GET_REQUEST(&queue->rx, req_prod);
gnttab_grant_foreign_access_ref(ref,
queue->info->xbdev->otherend_id,
-
pfn_to_mfn(pfn)
,
+
gfn
,
0);
req->id = id;
0);
req->id = id;
@@
-430,8
+430,10
@@
static struct xen_netif_tx_request *xennet_make_one_txreq(
ref = gnttab_claim_grant_reference(&queue->gref_tx_head);
BUG_ON((signed short)ref < 0);
ref = gnttab_claim_grant_reference(&queue->gref_tx_head);
BUG_ON((signed short)ref < 0);
- gnttab_grant_foreign_access_ref(ref, queue->info->xbdev->otherend_id,
- page_to_mfn(page), GNTMAP_readonly);
+ gnttab_grant_foreign_access_ref(ref,
+ queue->info->xbdev->otherend_id,
+ xen_page_to_gfn(page),
+ GNTMAP_readonly);
queue->tx_skbs[id].skb = skb;
queue->grant_tx_page[id] = page;
queue->tx_skbs[id].skb = skb;
queue->grant_tx_page[id] = page;
@@
-1336,7
+1338,7
@@
static void xennet_disconnect_backend(struct netfront_info *info)
netif_carrier_off(info->netdev);
netif_carrier_off(info->netdev);
- for (i = 0; i < num_queues; ++i) {
+ for (i = 0; i < num_queues
&& info->queues
; ++i) {
struct netfront_queue *queue = &info->queues[i];
if (queue->tx_irq && (queue->tx_irq == queue->rx_irq))
struct netfront_queue *queue = &info->queues[i];
if (queue->tx_irq && (queue->tx_irq == queue->rx_irq))
@@
-1348,7
+1350,8
@@
static void xennet_disconnect_backend(struct netfront_info *info)
queue->tx_evtchn = queue->rx_evtchn = 0;
queue->tx_irq = queue->rx_irq = 0;
queue->tx_evtchn = queue->rx_evtchn = 0;
queue->tx_irq = queue->rx_irq = 0;
- napi_synchronize(&queue->napi);
+ if (netif_running(info->netdev))
+ napi_synchronize(&queue->napi);
xennet_release_tx_bufs(queue);
xennet_release_rx_bufs(queue);
xennet_release_tx_bufs(queue);
xennet_release_rx_bufs(queue);
@@
-2101,7
+2104,8
@@
static int xennet_remove(struct xenbus_device *dev)
unregister_netdev(info->netdev);
unregister_netdev(info->netdev);
- xennet_destroy_queues(info);
+ if (info->queues)
+ xennet_destroy_queues(info);
xennet_free_netdev(info->netdev);
return 0;
xennet_free_netdev(info->netdev);
return 0;
@@
-2130,8
+2134,11
@@
static int __init netif_init(void)
pr_info("Initialising Xen virtual ethernet driver\n");
pr_info("Initialising Xen virtual ethernet driver\n");
- /* Allow as many queues as there are CPUs, by default */
- xennet_max_queues = num_online_cpus();
+ /* Allow as many queues as there are CPUs if user has not
+ * specified a value.
+ */
+ if (xennet_max_queues == 0)
+ xennet_max_queues = num_online_cpus();
return xenbus_register_frontend(&netfront_driver);
}
return xenbus_register_frontend(&netfront_driver);
}