Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Kirill Smelkov
linux
Commits
9eb35914
Commit
9eb35914
authored
6 years ago
by
David S. Miller
Browse files
Options
Download
Plain Diff
Merge
git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
parents
cf29576f
07f12b26
Changes
51
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
131 additions
and
19 deletions
+131
-19
arch/mips/net/ebpf_jit.c
arch/mips/net/ebpf_jit.c
+1
-1
drivers/net/dsa/lantiq_gswip.c
drivers/net/dsa/lantiq_gswip.c
+6
-0
drivers/net/dsa/mv88e6xxx/chip.c
drivers/net/dsa/mv88e6xxx/chip.c
+12
-2
drivers/net/dsa/mv88e6xxx/port.c
drivers/net/dsa/mv88e6xxx/port.c
+6
-2
drivers/net/dsa/mv88e6xxx/port.h
drivers/net/dsa/mv88e6xxx/port.h
+1
-0
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
+3
-0
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
+9
-0
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h
+4
-0
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
...t/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
+13
-0
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.c
+6
-0
drivers/net/ethernet/microchip/enc28j60.c
drivers/net/ethernet/microchip/enc28j60.c
+1
-1
drivers/net/ethernet/microchip/lan743x_main.c
drivers/net/ethernet/microchip/lan743x_main.c
+12
-4
drivers/net/geneve.c
drivers/net/geneve.c
+8
-3
drivers/net/hyperv/netvsc_drv.c
drivers/net/hyperv/netvsc_drv.c
+19
-3
drivers/net/phy/dp83867.c
drivers/net/phy/dp83867.c
+3
-0
drivers/net/phy/micrel.c
drivers/net/phy/micrel.c
+12
-1
drivers/net/phy/phylink.c
drivers/net/phy/phylink.c
+4
-0
drivers/net/tun.c
drivers/net/tun.c
+2
-2
drivers/net/xen-netback/hash.c
drivers/net/xen-netback/hash.c
+2
-0
drivers/net/xen-netback/interface.c
drivers/net/xen-netback/interface.c
+7
-0
No files found.
arch/mips/net/ebpf_jit.c
View file @
9eb35914
...
...
@@ -1819,7 +1819,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
/* Update the icache */
flush_icache_range
((
unsigned
long
)
ctx
.
target
,
(
unsigned
long
)
(
ctx
.
target
+
ctx
.
idx
*
sizeof
(
u32
))
);
(
unsigned
long
)
&
ctx
.
target
[
ctx
.
idx
]
);
if
(
bpf_jit_enable
>
1
)
/* Dump JIT code */
...
...
This diff is collapsed.
Click to expand it.
drivers/net/dsa/lantiq_gswip.c
View file @
9eb35914
...
...
@@ -1163,6 +1163,12 @@ static struct platform_driver gswip_driver = {
module_platform_driver
(
gswip_driver
);
MODULE_FIRMWARE
(
"lantiq/xrx300_phy11g_a21.bin"
);
MODULE_FIRMWARE
(
"lantiq/xrx300_phy22f_a21.bin"
);
MODULE_FIRMWARE
(
"lantiq/xrx200_phy11g_a14.bin"
);
MODULE_FIRMWARE
(
"lantiq/xrx200_phy11g_a22.bin"
);
MODULE_FIRMWARE
(
"lantiq/xrx200_phy22f_a14.bin"
);
MODULE_FIRMWARE
(
"lantiq/xrx200_phy22f_a22.bin"
);
MODULE_AUTHOR
(
"Hauke Mehrtens <hauke@hauke-m.de>"
);
MODULE_DESCRIPTION
(
"Lantiq / Intel GSWIP driver"
);
MODULE_LICENSE
(
"GPL v2"
);
This diff is collapsed.
Click to expand it.
drivers/net/dsa/mv88e6xxx/chip.c
View file @
9eb35914
...
...
@@ -922,7 +922,7 @@ static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip,
default:
return
U64_MAX
;
}
value
=
(((
u64
)
high
)
<<
16
)
|
low
;
value
=
(((
u64
)
high
)
<<
32
)
|
low
;
return
value
;
}
...
...
@@ -3118,7 +3118,7 @@ static const struct mv88e6xxx_ops mv88e6161_ops = {
.
port_disable_pri_override
=
mv88e6xxx_port_disable_pri_override
,
.
port_link_state
=
mv88e6352_port_link_state
,
.
port_get_cmode
=
mv88e6185_port_get_cmode
,
.
stats_snapshot
=
mv88e6
320
_g1_stats_snapshot
,
.
stats_snapshot
=
mv88e6
xxx
_g1_stats_snapshot
,
.
stats_set_histogram
=
mv88e6095_g1_stats_set_histogram
,
.
stats_get_sset_count
=
mv88e6095_stats_get_sset_count
,
.
stats_get_strings
=
mv88e6095_stats_get_strings
,
...
...
@@ -4620,6 +4620,14 @@ static int mv88e6xxx_smi_init(struct mv88e6xxx_chip *chip,
return
0
;
}
static
void
mv88e6xxx_ports_cmode_init
(
struct
mv88e6xxx_chip
*
chip
)
{
int
i
;
for
(
i
=
0
;
i
<
mv88e6xxx_num_ports
(
chip
);
i
++
)
chip
->
ports
[
i
].
cmode
=
MV88E6XXX_PORT_STS_CMODE_INVALID
;
}
static
enum
dsa_tag_protocol
mv88e6xxx_get_tag_protocol
(
struct
dsa_switch
*
ds
,
int
port
)
{
...
...
@@ -4656,6 +4664,8 @@ static const char *mv88e6xxx_drv_probe(struct device *dsa_dev,
if
(
err
)
goto
free
;
mv88e6xxx_ports_cmode_init
(
chip
);
mutex_lock
(
&
chip
->
reg_lock
);
err
=
mv88e6xxx_switch_reset
(
chip
);
mutex_unlock
(
&
chip
->
reg_lock
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/dsa/mv88e6xxx/port.c
View file @
9eb35914
...
...
@@ -398,6 +398,10 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
cmode
=
0
;
}
/* cmode doesn't change, nothing to do for us */
if
(
cmode
==
chip
->
ports
[
port
].
cmode
)
return
0
;
lane
=
mv88e6390x_serdes_get_lane
(
chip
,
port
);
if
(
lane
<
0
)
return
lane
;
...
...
@@ -408,7 +412,7 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
return
err
;
}
err
=
mv88e6390_serdes_power
(
chip
,
port
,
false
);
err
=
mv88e6390
x
_serdes_power
(
chip
,
port
,
false
);
if
(
err
)
return
err
;
...
...
@@ -424,7 +428,7 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
if
(
err
)
return
err
;
err
=
mv88e6390_serdes_power
(
chip
,
port
,
true
);
err
=
mv88e6390
x
_serdes_power
(
chip
,
port
,
true
);
if
(
err
)
return
err
;
...
...
This diff is collapsed.
Click to expand it.
drivers/net/dsa/mv88e6xxx/port.h
View file @
9eb35914
...
...
@@ -52,6 +52,7 @@
#define MV88E6185_PORT_STS_CMODE_1000BASE_X 0x0005
#define MV88E6185_PORT_STS_CMODE_PHY 0x0006
#define MV88E6185_PORT_STS_CMODE_DISABLED 0x0007
#define MV88E6XXX_PORT_STS_CMODE_INVALID 0xff
/* Offset 0x01: MAC (or PCS or Physical) Control Register */
#define MV88E6XXX_PORT_MAC_CTL 0x01
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
View file @
9eb35914
...
...
@@ -279,6 +279,9 @@ static int hw_atl_b0_hw_offload_set(struct aq_hw_s *self,
static
int
hw_atl_b0_hw_init_tx_path
(
struct
aq_hw_s
*
self
)
{
/* Tx TC/Queue number config */
hw_atl_rpb_tps_tx_tc_mode_set
(
self
,
1U
);
hw_atl_thm_lso_tcp_flag_of_first_pkt_set
(
self
,
0x0FF6U
);
hw_atl_thm_lso_tcp_flag_of_middle_pkt_set
(
self
,
0x0FF6U
);
hw_atl_thm_lso_tcp_flag_of_last_pkt_set
(
self
,
0x0F7FU
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
View file @
9eb35914
...
...
@@ -1274,6 +1274,15 @@ void hw_atl_tpb_tx_buff_en_set(struct aq_hw_s *aq_hw, u32 tx_buff_en)
HW_ATL_TPB_TX_BUF_EN_SHIFT
,
tx_buff_en
);
}
void
hw_atl_rpb_tps_tx_tc_mode_set
(
struct
aq_hw_s
*
aq_hw
,
u32
tx_traf_class_mode
)
{
aq_hw_write_reg_bit
(
aq_hw
,
HW_ATL_TPB_TX_TC_MODE_ADDR
,
HW_ATL_TPB_TX_TC_MODE_MSK
,
HW_ATL_TPB_TX_TC_MODE_SHIFT
,
tx_traf_class_mode
);
}
void
hw_atl_tpb_tx_buff_hi_threshold_per_tc_set
(
struct
aq_hw_s
*
aq_hw
,
u32
tx_buff_hi_threshold_per_tc
,
u32
buffer
)
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h
View file @
9eb35914
...
...
@@ -605,6 +605,10 @@ void hw_atl_thm_lso_tcp_flag_of_middle_pkt_set(struct aq_hw_s *aq_hw,
/* tpb */
/* set TX Traffic Class Mode */
void
hw_atl_rpb_tps_tx_tc_mode_set
(
struct
aq_hw_s
*
aq_hw
,
u32
tx_traf_class_mode
);
/* set tx buffer enable */
void
hw_atl_tpb_tx_buff_en_set
(
struct
aq_hw_s
*
aq_hw
,
u32
tx_buff_en
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
View file @
9eb35914
...
...
@@ -1948,6 +1948,19 @@
/* default value of bitfield tx_buf_en */
#define HW_ATL_TPB_TX_BUF_EN_DEFAULT 0x0
/* register address for bitfield tx_tc_mode */
#define HW_ATL_TPB_TX_TC_MODE_ADDR 0x00007900
/* bitmask for bitfield tx_tc_mode */
#define HW_ATL_TPB_TX_TC_MODE_MSK 0x00000100
/* inverted bitmask for bitfield tx_tc_mode */
#define HW_ATL_TPB_TX_TC_MODE_MSKN 0xFFFFFEFF
/* lower bit position of bitfield tx_tc_mode */
#define HW_ATL_TPB_TX_TC_MODE_SHIFT 8
/* width of bitfield tx_tc_mode */
#define HW_ATL_TPB_TX_TC_MODE_WIDTH 1
/* default value of bitfield tx_tc_mode */
#define HW_ATL_TPB_TX_TC_MODE_DEFAULT 0x0
/* tx tx{b}_hi_thresh[c:0] bitfield definitions
* preprocessor definitions for the bitfield "tx{b}_hi_thresh[c:0]".
* parameter: buffer {b} | stride size 0x10 | range [0, 7]
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/broadcom/bnxt/bnxt.c
View file @
9eb35914
...
...
@@ -504,6 +504,12 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
}
length
>>=
9
;
if
(
unlikely
(
length
>=
ARRAY_SIZE
(
bnxt_lhint_arr
)))
{
dev_warn_ratelimited
(
&
pdev
->
dev
,
"Dropped oversize %d bytes TX packet.
\n
"
,
skb
->
len
);
i
=
0
;
goto
tx_dma_error
;
}
flags
|=
bnxt_lhint_arr
[
length
];
txbd
->
tx_bd_len_flags_type
=
cpu_to_le32
(
flags
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/microchip/enc28j60.c
View file @
9eb35914
...
...
@@ -1681,5 +1681,5 @@ MODULE_DESCRIPTION(DRV_NAME " ethernet driver");
MODULE_AUTHOR
(
"Claudio Lanconelli <lanconelli.claudio@eptar.com>"
);
MODULE_LICENSE
(
"GPL"
);
module_param_named
(
debug
,
debug
.
msg_enable
,
int
,
0
);
MODULE_PARM_DESC
(
debug
,
"Debug verbosity level (0=none, ...,
ffff
=all)"
);
MODULE_PARM_DESC
(
debug
,
"Debug verbosity level
in amount of bits set
(0=none, ...,
31
=all)"
);
MODULE_ALIAS
(
"spi:"
DRV_NAME
);
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/microchip/lan743x_main.c
View file @
9eb35914
...
...
@@ -1400,7 +1400,8 @@ static int lan743x_tx_frame_start(struct lan743x_tx *tx,
}
static
void
lan743x_tx_frame_add_lso
(
struct
lan743x_tx
*
tx
,
unsigned
int
frame_length
)
unsigned
int
frame_length
,
int
nr_frags
)
{
/* called only from within lan743x_tx_xmit_frame.
* assuming tx->ring_lock has already been acquired.
...
...
@@ -1410,6 +1411,10 @@ static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx,
/* wrap up previous descriptor */
tx
->
frame_data0
|=
TX_DESC_DATA0_EXT_
;
if
(
nr_frags
<=
0
)
{
tx
->
frame_data0
|=
TX_DESC_DATA0_LS_
;
tx
->
frame_data0
|=
TX_DESC_DATA0_IOC_
;
}
tx_descriptor
=
&
tx
->
ring_cpu_ptr
[
tx
->
frame_tail
];
tx_descriptor
->
data0
=
tx
->
frame_data0
;
...
...
@@ -1514,8 +1519,11 @@ static void lan743x_tx_frame_end(struct lan743x_tx *tx,
u32
tx_tail_flags
=
0
;
/* wrap up previous descriptor */
tx
->
frame_data0
|=
TX_DESC_DATA0_LS_
;
tx
->
frame_data0
|=
TX_DESC_DATA0_IOC_
;
if
((
tx
->
frame_data0
&
TX_DESC_DATA0_DTYPE_MASK_
)
==
TX_DESC_DATA0_DTYPE_DATA_
)
{
tx
->
frame_data0
|=
TX_DESC_DATA0_LS_
;
tx
->
frame_data0
|=
TX_DESC_DATA0_IOC_
;
}
tx_descriptor
=
&
tx
->
ring_cpu_ptr
[
tx
->
frame_tail
];
buffer_info
=
&
tx
->
buffer_info
[
tx
->
frame_tail
];
...
...
@@ -1600,7 +1608,7 @@ static netdev_tx_t lan743x_tx_xmit_frame(struct lan743x_tx *tx,
}
if
(
gso
)
lan743x_tx_frame_add_lso
(
tx
,
frame_length
);
lan743x_tx_frame_add_lso
(
tx
,
frame_length
,
nr_frags
);
if
(
nr_frags
<=
0
)
goto
finish
;
...
...
This diff is collapsed.
Click to expand it.
drivers/net/geneve.c
View file @
9eb35914
...
...
@@ -692,15 +692,20 @@ static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6)
static
int
geneve_open
(
struct
net_device
*
dev
)
{
struct
geneve_dev
*
geneve
=
netdev_priv
(
dev
);
bool
ipv6
=
!!
(
geneve
->
info
.
mode
&
IP_TUNNEL_INFO_IPV6
);
bool
metadata
=
geneve
->
collect_md
;
bool
ipv4
,
ipv6
;
int
ret
=
0
;
ipv6
=
geneve
->
info
.
mode
&
IP_TUNNEL_INFO_IPV6
||
metadata
;
ipv4
=
!
ipv6
||
metadata
;
#if IS_ENABLED(CONFIG_IPV6)
if
(
ipv6
||
metadata
)
if
(
ipv6
)
{
ret
=
geneve_sock_add
(
geneve
,
true
);
if
(
ret
<
0
&&
ret
!=
-
EAFNOSUPPORT
)
ipv4
=
false
;
}
#endif
if
(
!
ret
&&
(
!
ipv6
||
metadata
)
)
if
(
ipv4
)
ret
=
geneve_sock_add
(
geneve
,
false
);
if
(
ret
<
0
)
geneve_sock_release
(
geneve
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/hyperv/netvsc_drv.c
View file @
9eb35914
...
...
@@ -744,6 +744,14 @@ void netvsc_linkstatus_callback(struct net_device *net,
schedule_delayed_work
(
&
ndev_ctx
->
dwork
,
0
);
}
static
void
netvsc_comp_ipcsum
(
struct
sk_buff
*
skb
)
{
struct
iphdr
*
iph
=
(
struct
iphdr
*
)
skb
->
data
;
iph
->
check
=
0
;
iph
->
check
=
ip_fast_csum
(
iph
,
iph
->
ihl
);
}
static
struct
sk_buff
*
netvsc_alloc_recv_skb
(
struct
net_device
*
net
,
struct
netvsc_channel
*
nvchan
)
{
...
...
@@ -770,9 +778,17 @@ static struct sk_buff *netvsc_alloc_recv_skb(struct net_device *net,
/* skb is already created with CHECKSUM_NONE */
skb_checksum_none_assert
(
skb
);
/*
* In Linux, the IP checksum is always checked.
* Do L4 checksum offload if enabled and present.
/* Incoming packets may have IP header checksum verified by the host.
* They may not have IP header checksum computed after coalescing.
* We compute it here if the flags are set, because on Linux, the IP
* checksum is always checked.
*/
if
(
csum_info
&&
csum_info
->
receive
.
ip_checksum_value_invalid
&&
csum_info
->
receive
.
ip_checksum_succeeded
&&
skb
->
protocol
==
htons
(
ETH_P_IP
))
netvsc_comp_ipcsum
(
skb
);
/* Do L4 checksum offload if enabled and present.
*/
if
(
csum_info
&&
(
net
->
features
&
NETIF_F_RXCSUM
))
{
if
(
csum_info
->
receive
.
tcp_checksum_succeeded
||
...
...
This diff is collapsed.
Click to expand it.
drivers/net/phy/dp83867.c
View file @
9eb35914
...
...
@@ -11,6 +11,7 @@
#include <linux/module.h>
#include <linux/of.h>
#include <linux/phy.h>
#include <linux/delay.h>
#include <dt-bindings/net/ti-dp83867.h>
...
...
@@ -304,6 +305,8 @@ static int dp83867_phy_reset(struct phy_device *phydev)
if
(
err
<
0
)
return
err
;
usleep_range
(
10
,
20
);
return
dp83867_config_init
(
phydev
);
}
...
...
This diff is collapsed.
Click to expand it.
drivers/net/phy/micrel.c
View file @
9eb35914
...
...
@@ -340,6 +340,17 @@ static int ksz8041_config_aneg(struct phy_device *phydev)
return
genphy_config_aneg
(
phydev
);
}
static
int
ksz8061_config_init
(
struct
phy_device
*
phydev
)
{
int
ret
;
ret
=
phy_write_mmd
(
phydev
,
MDIO_MMD_PMAPMD
,
MDIO_DEVID1
,
0xB61A
);
if
(
ret
)
return
ret
;
return
kszphy_config_init
(
phydev
);
}
static
int
ksz9021_load_values_from_of
(
struct
phy_device
*
phydev
,
const
struct
device_node
*
of_node
,
u16
reg
,
...
...
@@ -1015,7 +1026,7 @@ static struct phy_driver ksphy_driver[] = {
.
name
=
"Micrel KSZ8061"
,
.
phy_id_mask
=
MICREL_PHY_ID_MASK
,
.
features
=
PHY_BASIC_FEATURES
,
.
config_init
=
ksz
phy
_config_init
,
.
config_init
=
ksz
8061
_config_init
,
.
ack_interrupt
=
kszphy_ack_interrupt
,
.
config_intr
=
kszphy_config_intr
,
.
suspend
=
genphy_suspend
,
...
...
This diff is collapsed.
Click to expand it.
drivers/net/phy/phylink.c
View file @
9eb35914
...
...
@@ -324,6 +324,10 @@ static int phylink_get_mac_state(struct phylink *pl, struct phylink_link_state *
linkmode_zero
(
state
->
lp_advertising
);
state
->
interface
=
pl
->
link_config
.
interface
;
state
->
an_enabled
=
pl
->
link_config
.
an_enabled
;
state
->
speed
=
SPEED_UNKNOWN
;
state
->
duplex
=
DUPLEX_UNKNOWN
;
state
->
pause
=
MLO_PAUSE_NONE
;
state
->
an_complete
=
0
;
state
->
link
=
1
;
return
pl
->
ops
->
mac_link_state
(
ndev
,
state
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/tun.c
View file @
9eb35914
...
...
@@ -2167,9 +2167,9 @@ static void *tun_ring_recv(struct tun_file *tfile, int noblock, int *err)
}
add_wait_queue
(
&
tfile
->
wq
.
wait
,
&
wait
);
current
->
state
=
TASK_INTERRUPTIBLE
;
while
(
1
)
{
set_current_state
(
TASK_INTERRUPTIBLE
);
ptr
=
ptr_ring_consume
(
&
tfile
->
tx_ring
);
if
(
ptr
)
break
;
...
...
@@ -2185,7 +2185,7 @@ static void *tun_ring_recv(struct tun_file *tfile, int noblock, int *err)
schedule
();
}
current
->
state
=
TASK_RUNNING
;
__set_
current
_
state
(
TASK_RUNNING
)
;
remove_wait_queue
(
&
tfile
->
wq
.
wait
,
&
wait
);
out:
...
...
This diff is collapsed.
Click to expand it.
drivers/net/xen-netback/hash.c
View file @
9eb35914
...
...
@@ -454,6 +454,8 @@ void xenvif_init_hash(struct xenvif *vif)
if
(
xenvif_hash_cache_size
==
0
)
return
;
BUG_ON
(
vif
->
hash
.
cache
.
count
);
spin_lock_init
(
&
vif
->
hash
.
cache
.
lock
);
INIT_LIST_HEAD
(
&
vif
->
hash
.
cache
.
list
);
}
...
...
This diff is collapsed.
Click to expand it.
drivers/net/xen-netback/interface.c
View file @
9eb35914
...
...
@@ -153,6 +153,13 @@ static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb,
{
struct
xenvif
*
vif
=
netdev_priv
(
dev
);
unsigned
int
size
=
vif
->
hash
.
size
;
unsigned
int
num_queues
;
/* If queues are not set up internally - always return 0
* as the packet going to be dropped anyway */
num_queues
=
READ_ONCE
(
vif
->
num_queues
);
if
(
num_queues
<
1
)
return
0
;
if
(
vif
->
hash
.
alg
==
XEN_NETIF_CTRL_HASH_ALGORITHM_NONE
)
return
fallback
(
dev
,
skb
,
NULL
)
%
dev
->
real_num_tx_queues
;
...
...
This diff is collapsed.
Click to expand it.
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment