linux/drivers/net/ethernet
Aaron Young 67d0719f06 ldmvsw: Make sunvnet_common compatible with ldmvsw
Modify sunvnet common code and data structures to be compatible
  with both sunvnet and ldmvsw drivers.

  Details:

  Sunvnet operates on "vnet-port" nodes which appear in the Machine
  Description (MD) in a guest domain. Ldmvsw operates on "vsw-port"
  nodes which appear in the MD of a service domain.

  A difference between the sunvnet driver and the ldmvsw driver is
  the sunvnet driver creates a network interface (i.e. a struct net_device)
  for every vnet-port *parent* "network" node. Several vnet-ports may appear
  under this common parent network node - each corresponding to a common parent
  network interface.  Conversely, since bridge/vswitch software will need
  to interface with every vsw-port in a system, the ldmvsw driver creates
  a network interface (i.e. a struct net_device) for every vsw-port - not
  every parent node as with sunvnet.  This difference required some special
  handling in the common code as explained below.

  There are 2 key data structures used by the sunvnet and ldmvsw drivers
  (which are now found in sunvnet_common.h):

  1. struct vnet_port
     This structure represents a vnet-port node in sunvnet and a vsw-port
     in the ldmvsw driver.

  2. struct vnet
     This structure represents a parent "network" node in sunvnet and a parent
     "virtual-network-switch" node in ldmvsw.

  Since the sunvnet driver allocates a net_device for every parent "network"
  node, a net_device member appears in the struct vnet. Since the ldmvsw
  driver allocates a net_device for every port, a net_device member was
  added to the vnet_port. The common code distinguishes which structure
  net_device member to use by checking a 'vsw' bit that was added to the
  vnet_port structure. See the VNET_PORT_TO_NET_DEVICE() marco in
  sunvnet_common.h.

  The netdev_priv() in sunvnet is allocated as a vnet. The netdev_priv()
  in ldmvsw is a vnet_port. Therefore, any place in the common code
  where a netdev_priv() call was made, a wrapper function was implemented
  in each driver to first get the vnet and/or vnet_port (in a driver
  specific way) and pass them as newly added parameters to the common
  functions (see wrapper funcs: vnet_set_rx_mode() and vnet_poll_controller()).
  Since these wrapper functions call __tx_port_find(), __tx_port_find() was
  moved from the common code back into sunvnet.c. Note - ldmvsw.c does not
  require this function.

  These changes also required that port_is_up() be made
  into a common function and thus it was given a _common suffix and
  exported like the other common functions.

  A wrapper function was also added for vnet_start_xmit_common() to pass a
  driver-specific function arg to return the port associated with a given
  struct sk_buff and struct net_device. This was required because
  vnet_start_xmit_common() grabs a lock prior to getting the associated
  port. Using a function pointer arg allowed the code to work unchanged
  without risking changes to the non-trivial locking logic in
  vnet_start_xmit_common().

  Signed-off-by: Aaron Young <aaron.young@oracle.com>
  Signed-off-by: Rashmi Narasimhan <rashmi.narasimhan@oracle.com>
  Reviewed-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
  Reviewed-by: Alexandre Chartre <Alexandre.Chartre@oracle.com>

Signed-off-by: David S. Miller <davem@davemloft.net>
2016-03-18 19:33:00 -04:00
..
3com Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-03-08 12:34:12 -05:00
8390 pcnet_cs: add new id 2016-02-16 16:06:13 -05:00
adaptec
adi net: bfin_mac: Use phy_find_first() instead of open-coding it 2016-01-11 00:00:34 -05:00
aeroflex mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
agere et131x: check return value of dma_alloc_coherent 2016-02-17 23:32:05 -05:00
allwinner
alteon
altera net: eth: altera: do not free array priv->mdio->irq 2016-03-06 22:59:18 -05:00
amd net: relax setup_tc ndo op handle restriction 2016-03-03 16:25:15 -05:00
apm drivers: net: xgene: Add support for multiple queues 2016-02-17 22:08:34 -05:00
apple
arc net: arc: trivial: cleanup the emac driver 2016-03-16 19:28:01 -04:00
atheros ethernet/atl1c: remove left over dead code 2016-03-02 15:00:55 -05:00
aurora net: ethernet: nb8800: support fixed-link DT node 2016-02-24 11:32:11 -05:00
broadcom bnx2x: Prevent false warning for lack of FC NPIV 2016-03-18 19:17:16 -04:00
brocade bna: fix list corruption 2016-03-01 15:19:43 -05:00
cadence net: macb: fix default configuration for GMAC on AT91 2016-03-13 22:16:22 -04:00
calxeda
cavium netdev: Move octeon/octeon_mgmt driver to cavium directory. 2016-03-18 18:25:30 -04:00
chelsio cxgb4vf: Set number of queues in pci probe only 2016-03-10 16:12:25 -05:00
cirrus
cisco cisco: enic: Update logging macros and uses 2016-03-11 15:07:48 -05:00
davicom net: ethernet: davicom: fix devicetree irq resource 2016-02-21 22:40:49 -05:00
dec net: tulip: Use setup_timer() 2016-02-25 16:51:04 -05:00
dlink
emulex Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-03-08 12:34:12 -05:00
ezchip net: ezchip: adapt driver to little endian architecture 2016-03-03 17:20:08 -05:00
faraday net: ethernet: faraday: Use phy_find_first() instead of open coding it 2016-01-10 22:05:30 -05:00
freescale fsl/fman: fix dtsec_set_tx_pause_frames 2016-03-14 15:03:10 -04:00
fujitsu fmvj18x_cs: fix incorrect indexing of dev->dev_addr[] when copying the MAC address 2016-02-21 22:08:43 -05:00
hisilicon net: hns: fix the bug about loopback 2016-03-07 15:44:51 -05:00
hp net: hp100: remove unnecessary #ifdefs 2016-01-29 20:33:38 -08:00
i825xx
ibm ibmveth: check return of skb_linearize in ibmveth_start_xmit 2016-03-07 14:38:52 -05:00
intel net: relax setup_tc ndo op handle restriction 2016-03-03 16:25:15 -05:00
marvell net: mvneta: replace magic numbers by existing macros 2016-03-14 15:48:52 -04:00
mediatek mediatek: unlock on error in mtk_tx_map() 2016-03-18 18:28:11 -04:00
mellanox mlx4: add missing braces in verify_qp_parameters 2016-03-14 13:09:49 -04:00
micrel
microchip
moxa net: moxa: fix an error code 2016-03-03 17:17:14 -05:00
myricom
natsemi
neterion net: vxge: avoid unused function warnings 2016-01-29 20:33:39 -08:00
netronome
nuvoton
nvidia forcedeth: Use setup_timer() 2016-02-25 16:51:05 -05:00
nxp net: lpc_eth: Remove unused variables 2016-01-10 22:50:14 -05:00
oki-semi
packetengines
pasemi pasemi_mac: Replace LRO with GRO 2016-02-17 16:15:45 -05:00
qlogic qlge: Fix receive packets drop. 2016-03-18 19:15:50 -04:00
qualcomm net: qca_spi: clear IFF_TX_SKB_SHARING 2016-02-25 16:12:15 -05:00
rdc mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
realtek r8169:Remove unnecessary phy reset for pcie nic when setting link spped. 2016-03-13 22:32:44 -04:00
renesas ravb: fix result value overwrite 2016-03-18 19:16:33 -04:00
rocker rocker: move ageing_time from struct rocker to struct ofdpa 2016-03-12 20:11:13 -05:00
samsung sxgbe: remove unused code 2016-02-10 06:10:17 -05:00
seeq
sfc net: relax setup_tc ndo op handle restriction 2016-03-03 16:25:15 -05:00
sgi
silan
sis
smsc smc91x: avoid self-comparison warning 2016-03-14 19:37:03 -04:00
stmicro net: stmmac: Don't search for phys if mdio node is defined. 2016-03-18 18:29:23 -04:00
sun ldmvsw: Make sunvnet_common compatible with ldmvsw 2016-03-18 19:33:00 -04:00
synopsys dwc_eth_qos: do phy_start before resetting hardware 2016-03-02 14:57:15 -05:00
tehuti
ti net: relax setup_tc ndo op handle restriction 2016-03-03 16:25:15 -05:00
tile tilepro: use to_delayed_work 2016-01-04 16:07:16 -05:00
toshiba net: tc35815: Drop unused variable 2016-01-10 23:31:25 -05:00
tundra
via
wiznet
xilinx phy: Add an mdio_device structure 2016-01-07 14:31:26 -05:00
xircom
xscale
dnet.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
dnet.h
ec_bhf.c
ethoc.c net/ethoc: do not free array priv->mdio->irq 2016-03-06 22:58:51 -05:00
fealnx.c
jme.c jme: Fix device PM wakeup API usage 2016-03-07 15:39:45 -05:00
jme.h
Kconfig netdev: Move octeon/octeon_mgmt driver to cavium directory. 2016-03-18 18:25:30 -04:00
korina.c
lantiq_etop.c net: lantiq_etop.c: Use helper to find first phy 2016-01-10 18:03:47 -05:00
Makefile netdev: Move octeon/octeon_mgmt driver to cavium directory. 2016-03-18 18:25:30 -04:00
netx-eth.c