Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F163365164
D3886.id9372.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
16 KB
Referenced Files
None
Subscribers
None
D3886.id9372.diff
View Options
Index: sys/dev/xen/netfront/netfront.c
===================================================================
--- sys/dev/xen/netfront/netfront.c
+++ sys/dev/xen/netfront/netfront.c
@@ -230,7 +230,7 @@
u_long tx_fifo_errors;
u_long tx_heartbeat_errors;
u_long tx_window_errors;
-
+
/* for cslip etc */
u_long rx_compressed;
u_long tx_compressed;
@@ -256,7 +256,7 @@
u_int copying_receiver;
u_int carrier;
u_int maxfrags;
-
+
/* Receive-ring batched refills. */
#define RX_MIN_TARGET 32
#define RX_MAX_TARGET NET_RX_RING_SIZE
@@ -265,9 +265,9 @@
int rx_target;
grant_ref_t gref_tx_head;
- grant_ref_t grant_tx_ref[NET_TX_RING_SIZE + 1];
+ grant_ref_t grant_tx_ref[NET_TX_RING_SIZE + 1];
grant_ref_t gref_rx_head;
- grant_ref_t grant_rx_ref[NET_TX_RING_SIZE + 1];
+ grant_ref_t grant_rx_ref[NET_TX_RING_SIZE + 1];
device_t xbdev;
int tx_ring_ref;
@@ -299,12 +299,12 @@
#define XN_TX_LOCK(_sc) mtx_lock(&(_sc)->tx_lock)
#define XN_TX_UNLOCK(_sc) mtx_unlock(&(_sc)->tx_lock)
-#define XN_LOCK(_sc) mtx_lock(&(_sc)->sc_lock);
-#define XN_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_lock);
+#define XN_LOCK(_sc) mtx_lock(&(_sc)->sc_lock);
+#define XN_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_lock);
-#define XN_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_lock, MA_OWNED);
-#define XN_RX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->rx_lock, MA_OWNED);
-#define XN_TX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->tx_lock, MA_OWNED);
+#define XN_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_lock, MA_OWNED);
+#define XN_RX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->rx_lock, MA_OWNED);
+#define XN_TX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->tx_lock, MA_OWNED);
#define XN_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->rx_lock); \
mtx_destroy(&(_sc)->tx_lock); \
mtx_destroy(&(_sc)->sc_lock);
@@ -389,7 +389,7 @@
* a preallocated array of length ETH_ALEN (as declared in linux/if_ether.h).
* Return 0 on success, or errno on error.
*/
-static int
+static int
xen_net_read_mac(device_t dev, uint8_t mac[])
{
int error, i;
@@ -441,7 +441,7 @@
* inform the backend of the appropriate details for those. Switch to
* Connected state.
*/
-static int
+static int
netfront_probe(device_t dev)
{
@@ -458,7 +458,7 @@
static int
netfront_attach(device_t dev)
-{
+{
int err;
err = create_netdev(dev);
@@ -507,7 +507,7 @@
}
/* Common code used when first setting up, and when resuming. */
-static int
+static int
talk_to_backend(device_t dev, struct netfront_info *info)
{
const char *message;
@@ -525,7 +525,7 @@
err = setup_device(dev, info);
if (err)
goto out;
-
+
again:
err = xs_transaction_start(&xst);
if (err) {
@@ -582,9 +582,9 @@
xenbus_dev_fatal(dev, err, "completing transaction");
goto destroy_ring;
}
-
+
return 0;
-
+
abort_transaction:
xs_transaction_end(xst, 1);
xenbus_dev_fatal(dev, err, "%s", message);
@@ -594,7 +594,7 @@
return err;
}
-static int
+static int
setup_device(device_t dev, struct netfront_info *info)
{
netif_tx_sring_t *txs;
@@ -642,7 +642,7 @@
}
return (0);
-
+
fail:
netif_free(info);
return (error);
@@ -658,7 +658,7 @@
{
struct ifnet *ifp;
struct ifaddr *ifa;
-
+
ifp = info->xn_ifp;
TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
if (ifa->ifa_addr->sa_family == AF_INET) {
@@ -675,7 +675,7 @@
netfront_backend_changed(device_t dev, XenbusState newstate)
{
struct netfront_info *sc = device_get_softc(dev);
-
+
DPRINTK("newstate=%d\n", newstate);
switch (newstate) {
@@ -709,14 +709,14 @@
{
#if 0
int i;
-
+
for (i = 0; i < NET_RX_RING_SIZE; i++) {
if (sc->xn_cdata.rx_mbufs[i] != NULL) {
m_freem(sc->rx_mbufs[i]);
sc->rx_mbufs[i] = NULL;
}
}
-
+
sc->rx.rsp_cons = 0;
sc->xn_rx_if->req_prod = 0;
sc->xn_rx_if->event = sc->rx.rsp_cons ;
@@ -728,14 +728,14 @@
{
#if 0
int i;
-
+
for (i = 0; i < NET_TX_RING_SIZE; i++) {
if (sc->tx_mbufs[i] != NULL) {
m_freem(sc->tx_mbufs[i]);
sc->xn_cdata.xn_tx_chain[i] = NULL;
}
}
-
+
return;
#endif
}
@@ -798,12 +798,12 @@
netif_rx_request_t *req;
vm_offset_t vaddr;
u_long pfn;
-
+
req_prod = sc->rx.req_prod_pvt;
if (__predict_false(sc->carrier == 0))
return;
-
+
/*
* Allocate mbufs greedily, even though we batch updates to the
* receive ring. This creates a less bursty demand on the memory
@@ -825,11 +825,11 @@
break;
}
m_new->m_len = m_new->m_pkthdr.len = MJUMPAGESIZE;
-
+
/* queue the mbufs allocated */
(void )mbufq_enqueue(&sc->xn_rx_batch, m_new);
}
-
+
/*
* If we've allocated at least half of our target number of entries,
* submit them to the backend - we have enough to make the overhead
@@ -846,7 +846,7 @@
* Double floating fill target if we risked having the backend
* run out of empty buffers for receive traffic. We define "running
* low" as having less than a fourth of our target buffers free
- * at the time we refilled the queue.
+ * at the time we refilled the queue.
*/
if ((req_prod - sc->rx.sring->rsp_prod) < (sc->rx_target / 4)) {
sc->rx_target *= 2;
@@ -888,11 +888,11 @@
}
req->id = id;
req->gref = ref;
-
+
sc->rx_pfn_array[i] =
vtophys(mtod(m_new,vm_offset_t)) >> PAGE_SHIFT;
- }
-
+ }
+
KASSERT(i, ("no mbufs processed")); /* should have returned earlier */
KASSERT(mbufq_len(&sc->xn_rx_batch) == 0, ("not all mbufs processed"));
/*
@@ -912,7 +912,7 @@
} else {
wmb();
}
-
+
/* Above is a suitable barrier to ensure backend will see requests. */
sc->rx.req_prod_pvt = req_prod + i;
push:
@@ -947,7 +947,7 @@
mbufq_init(&rxq, INT_MAX);
ifp = np->xn_ifp;
-
+
rp = np->rx.sring->rsp_prod;
rmb(); /* Ensure we see queued responses up to 'rp'. */
@@ -974,7 +974,7 @@
* XXX this isn't necessarily the case - need to add
* check
*/
-
+
m->m_pkthdr.csum_flags |=
(CSUM_IP_CHECKED | CSUM_IP_VALID | CSUM_DATA_VALID
| CSUM_PSEUDO_HDR);
@@ -994,16 +994,16 @@
balloon_update_driver_allowance(-pages_flipped);
#endif
}
-
+
mbufq_drain(&errq);
- /*
+ /*
* Process all the mbufs after the remapping is complete.
* Break the mbuf chain first though.
*/
while ((m = mbufq_dequeue(&rxq)) != NULL) {
if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
-
+
/*
* Do we really need to drop the rx lock?
*/
@@ -1023,7 +1023,7 @@
#endif
XN_RX_LOCK(np);
}
-
+
np->rx.rsp_cons = i;
#if __FreeBSD_version >= 700000 && (defined(INET) || defined(INET6))
@@ -1040,18 +1040,18 @@
#if 0
/* If we get a callback with very few responses, reduce fill target. */
/* NB. Note exponential increase, linear decrease. */
- if (((np->rx.req_prod_pvt - np->rx.sring->rsp_prod) >
+ if (((np->rx.req_prod_pvt - np->rx.sring->rsp_prod) >
((3*np->rx_target) / 4)) && (--np->rx_target < np->rx_min_target))
np->rx_target = np->rx_min_target;
#endif
-
+
network_alloc_rx_buffers(np);
RING_FINAL_CHECK_FOR_RESPONSES(&np->rx, work_to_do);
} while (work_to_do);
}
-static void
+static void
xn_txeof(struct netfront_info *np)
{
RING_IDX i, prod;
@@ -1059,18 +1059,18 @@
struct ifnet *ifp;
netif_tx_response_t *txr;
struct mbuf *m;
-
+
XN_TX_LOCK_ASSERT(np);
-
+
if (!netfront_carrier_ok(np))
return;
-
+
ifp = np->xn_ifp;
-
+
do {
prod = np->tx.sring->rsp_prod;
rmb(); /* Ensure we see responses up to 'rp'. */
-
+
for (i = np->tx.rsp_cons; i != prod; i++) {
txr = RING_GET_RESPONSE(&np->tx, i);
if (txr->status == NETIF_RSP_NULL)
@@ -1081,13 +1081,13 @@
__func__, txr->status);
}
id = txr->id;
- m = np->tx_mbufs[id];
+ m = np->tx_mbufs[id];
KASSERT(m != NULL, ("mbuf not found in xn_tx_chain"));
KASSERT((uintptr_t)m > NET_TX_RING_SIZE,
("mbuf already on the free list, but we're "
"trying to free it again!"));
M_ASSERTVALID(m);
-
+
/*
* Increment packet count if this is the last
* mbuf of the chain.
@@ -1104,7 +1104,7 @@
gnttab_release_grant_reference(
&np->gref_tx_head, np->grant_tx_ref[id]);
np->grant_tx_ref[id] = GRANT_REF_INVALID;
-
+
np->tx_mbufs[id] = NULL;
add_id_to_freelist(np->tx_mbufs, id);
np->xn_cdata.xn_tx_chain_cnt--;
@@ -1113,7 +1113,7 @@
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
}
np->tx.rsp_cons = prod;
-
+
/*
* Set a new event, then check for race with update of
* tx_cons. Note that it is essential to schedule a
@@ -1128,7 +1128,7 @@
mb();
} while (prod != np->tx.sring->rsp_prod);
-
+
if (np->tx_full &&
((np->tx.sring->req_prod - prod) < NET_TX_RING_SIZE)) {
np->tx_full = 0;
@@ -1154,8 +1154,8 @@
if (RING_HAS_UNCONSUMED_RESPONSES(&np->tx)) {
XN_TX_LOCK(np);
xn_txeof(np);
- XN_TX_UNLOCK(np);
- }
+ XN_TX_UNLOCK(np);
+ }
XN_RX_LOCK(np);
xn_rxeof(np);
@@ -1193,10 +1193,10 @@
grant_ref_t ref;
if (__predict_false(*cons + 1 == rp)) {
-#if 0
+#if 0
if (net_ratelimit())
WPRINTK("Missing extra info\n");
-#endif
+#endif
err = EINVAL;
break;
}
@@ -1206,11 +1206,11 @@
if (__predict_false(!extra->type ||
extra->type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
-#if 0
+#if 0
if (net_ratelimit())
WPRINTK("Invalid extra type: %d\n",
extra->type);
-#endif
+#endif
err = EINVAL;
} else {
memcpy(&extras[extra->type - 1], extra, sizeof(*extra));
@@ -1254,18 +1254,18 @@
for (;;) {
u_long mfn;
-#if 0
+#if 0
DPRINTK("rx->status=%hd rx->offset=%hu frags=%u\n",
rx->status, rx->offset, frags);
#endif
if (__predict_false(rx->status < 0 ||
rx->offset + rx->status > PAGE_SIZE)) {
-#if 0
+#if 0
if (net_ratelimit())
WPRINTK("rx->offset: %x, size: %u\n",
rx->offset, rx->status);
-#endif
+#endif
xennet_move_rx_slot(np, m, ref);
if (m0 == m)
m0 = NULL;
@@ -1273,7 +1273,7 @@
err = EINVAL;
goto next_skip_queue;
}
-
+
/*
* This definitely indicates a bug, either in this driver or in
* the backend driver. In future this should flag the bad
@@ -1281,10 +1281,10 @@
*/
if (ref == GRANT_REF_INVALID) {
-#if 0
+#if 0
if (net_ratelimit())
WPRINTK("Bad rx response id %d.\n", rx->id);
-#endif
+#endif
printf("%s: Bad rx response id %d.\n", __func__,rx->id);
err = EINVAL;
goto next;
@@ -1317,7 +1317,7 @@
m->m_len = rx->status;
m->m_data += rx->offset;
m0->m_pkthdr.len += rx->status;
-
+
next_skip_queue:
if (!(rx->flags & NETRXF_more_data))
break;
@@ -1332,23 +1332,23 @@
}
/*
* Note that m can be NULL, if rx->status < 0 or if
- * rx->offset + rx->status > PAGE_SIZE above.
+ * rx->offset + rx->status > PAGE_SIZE above.
*/
m_prev = m;
-
+
rx = RING_GET_RESPONSE(&np->rx, *cons + frags);
m = xennet_get_rx_mbuf(np, *cons + frags);
/*
* m_prev == NULL can happen if rx->status < 0 or if
- * rx->offset + * rx->status > PAGE_SIZE above.
+ * rx->offset + * rx->status > PAGE_SIZE above.
*/
if (m_prev != NULL)
m_prev->m_next = m;
/*
* m0 can be NULL if rx->status < 0 or if * rx->offset +
- * rx->status > PAGE_SIZE above.
+ * rx->status > PAGE_SIZE above.
*/
if (m0 == NULL)
m0 = m;
@@ -1365,7 +1365,7 @@
}
static void
-xn_tick_locked(struct netfront_info *sc)
+xn_tick_locked(struct netfront_info *sc)
{
XN_RX_LOCK_ASSERT(sc);
callout_reset(&sc->xn_stat_ch, hz, xn_tick, sc);
@@ -1374,10 +1374,10 @@
}
static void
-xn_tick(void *xsc)
+xn_tick(void *xsc)
{
struct netfront_info *sc;
-
+
sc = xsc;
XN_RX_LOCK(sc);
xn_tick_locked(sc);
@@ -1573,7 +1573,7 @@
}
static void
-xn_start_locked(struct ifnet *ifp)
+xn_start_locked(struct ifnet *ifp)
{
struct netfront_info *sc;
struct mbuf *m_head;
@@ -1621,35 +1621,35 @@
}
/* equivalent of network_open() in Linux */
-static void
-xn_ifinit_locked(struct netfront_info *sc)
+static void
+xn_ifinit_locked(struct netfront_info *sc)
{
struct ifnet *ifp;
-
+
XN_LOCK_ASSERT(sc);
-
+
ifp = sc->xn_ifp;
-
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+
+ if (ifp->if_drv_flags & IFF_DRV_RUNNING)
return;
-
+
xn_stop(sc);
-
+
network_alloc_rx_buffers(sc);
sc->rx.sring->rsp_event = sc->rx.rsp_cons + 1;
-
+
ifp->if_drv_flags |= IFF_DRV_RUNNING;
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
if_link_state_change(ifp, LINK_STATE_UP);
-
+
callout_reset(&sc->xn_stat_ch, hz, xn_tick, sc);
}
-static void
+static void
xn_ifinit(void *xsc)
{
struct netfront_info *sc = xsc;
-
+
XN_LOCK(sc);
xn_ifinit_locked(sc);
XN_UNLOCK(sc);
@@ -1671,12 +1671,12 @@
XN_LOCK(sc);
if (ifa->ifa_addr->sa_family == AF_INET) {
ifp->if_flags |= IFF_UP;
- if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
+ if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
xn_ifinit_locked(sc);
arp_ifinit(ifp, ifa);
- XN_UNLOCK(sc);
+ XN_UNLOCK(sc);
} else {
- XN_UNLOCK(sc);
+ XN_UNLOCK(sc);
#endif
error = ether_ioctl(ifp, cmd, data);
#ifdef INET
@@ -1688,7 +1688,7 @@
#ifdef notyet
if (ifr->ifr_mtu > XN_JUMBO_MTU)
error = EINVAL;
- else
+ else
#endif
{
ifp->if_mtu = ifr->ifr_mtu;
@@ -1763,7 +1763,7 @@
}
if (mask & IFCAP_LRO) {
ifp->if_capenable ^= IFCAP_LRO;
-
+
}
#endif
error = 0;
@@ -1786,24 +1786,24 @@
default:
error = ether_ioctl(ifp, cmd, data);
}
-
+
return (error);
}
static void
xn_stop(struct netfront_info *sc)
-{
+{
struct ifnet *ifp;
XN_LOCK_ASSERT(sc);
-
+
ifp = sc->xn_ifp;
callout_stop(&sc->xn_stat_ch);
xn_free_rx_ring(sc);
xn_free_tx_ring(sc);
-
+
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
if_link_state_change(ifp, LINK_STATE_DOWN);
}
@@ -1836,9 +1836,9 @@
/* Recovery procedure: */
error = talk_to_backend(np->xbdev, np);
- if (error)
+ if (error)
return (error);
-
+
/* Step 1: Reinitialise variables. */
xn_query_features(np);
xn_configure_features(np);
@@ -1874,7 +1874,7 @@
}
np->rx.req_prod_pvt = requeue_idx;
-
+
/* Step 3: All public and private state should now be sane. Get
* ready to start sending and receiving packets and give the driver
* domain a kick because we've probably just requeued some
@@ -1971,7 +1971,7 @@
* Create a network device.
* @param dev Newbus device representing this virtual NIC.
*/
-int
+int
create_netdev(device_t dev)
{
int i;
@@ -1980,9 +1980,9 @@
struct ifnet *ifp;
np = device_get_softc(dev);
-
+
np->xbdev = dev;
-
+
XN_LOCK_INIT(np, xennetif);
ifmedia_init(&np->sc_media, 0, xn_ifmedia_upd, xn_ifmedia_sts);
@@ -1996,7 +1996,7 @@
/* Initialise {tx,rx}_skbs to be a free chain containing every entry. */
for (i = 0; i <= NET_TX_RING_SIZE; i++) {
np->tx_mbufs[i] = (void *) ((u_long) i+1);
- np->grant_tx_ref[i] = GRANT_REF_INVALID;
+ np->grant_tx_ref[i] = GRANT_REF_INVALID;
}
np->tx_mbufs[NET_TX_RING_SIZE] = (void *)0;
@@ -2023,11 +2023,11 @@
err = ENOMEM;
goto exit;
}
-
+
err = xen_net_read_mac(dev, np->mac);
if (err)
goto out;
-
+
/* Set up ifnet structure */
ifp = np->xn_ifp = if_alloc(IFT_ETHER);
ifp->if_softc = np;
@@ -2041,13 +2041,13 @@
#endif
ifp->if_init = xn_ifinit;
ifp->if_snd.ifq_maxlen = NET_TX_RING_SIZE - 1;
-
+
ifp->if_hwassist = XN_CSUM_FEATURES;
ifp->if_capabilities = IFCAP_HWCSUM;
ifp->if_hw_tsomax = 65536 - (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN);
ifp->if_hw_tsomaxsegcount = MAX_TX_REQ_FRAGS;
ifp->if_hw_tsomaxsegsize = PAGE_SIZE;
-
+
ether_ifattach(ifp, np->mac);
callout_init(&np->xn_stat_ch, 1);
netfront_carrier_off(np);
@@ -2151,27 +2151,27 @@
}
/* ** Driver registration ** */
-static device_method_t netfront_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, netfront_probe),
- DEVMETHOD(device_attach, netfront_attach),
- DEVMETHOD(device_detach, netfront_detach),
- DEVMETHOD(device_shutdown, bus_generic_shutdown),
- DEVMETHOD(device_suspend, netfront_suspend),
- DEVMETHOD(device_resume, netfront_resume),
-
+static device_method_t netfront_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, netfront_probe),
+ DEVMETHOD(device_attach, netfront_attach),
+ DEVMETHOD(device_detach, netfront_detach),
+ DEVMETHOD(device_shutdown, bus_generic_shutdown),
+ DEVMETHOD(device_suspend, netfront_suspend),
+ DEVMETHOD(device_resume, netfront_resume),
+
/* Xenbus interface */
DEVMETHOD(xenbus_otherend_changed, netfront_backend_changed),
DEVMETHOD_END
-};
-
-static driver_t netfront_driver = {
- "xn",
- netfront_methods,
- sizeof(struct netfront_info),
-};
-devclass_t netfront_devclass;
-
+};
+
+static driver_t netfront_driver = {
+ "xn",
+ netfront_methods,
+ sizeof(struct netfront_info),
+};
+devclass_t netfront_devclass;
+
DRIVER_MODULE(xe, xenbusb_front, netfront_driver, netfront_devclass, NULL,
- NULL);
+ NULL);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jul 23, 1:22 PM (11 h, 47 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35403337
Default Alt Text
D3886.id9372.diff (16 KB)
Attached To
Mode
D3886: netfront: delete all trailing white spaces
Attached
Detach File
Event Timeline
Log In to Comment