Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
f24fd89a
Commit
f24fd89a
authored
Mar 19, 2012
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
parents
fb041214
8af3c33f
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1399 additions
and
1219 deletions
+1399
-1219
drivers/net/ethernet/intel/ixgbe/Makefile
drivers/net/ethernet/intel/ixgbe/Makefile
+1
-1
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe.h
+18
-13
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+171
-20
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
+8
-5
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
+929
-0
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+272
-1180
No files found.
drivers/net/ethernet/intel/ixgbe/Makefile
View file @
f24fd89a
...
...
@@ -34,7 +34,7 @@ obj-$(CONFIG_IXGBE) += ixgbe.o
ixgbe-objs
:=
ixgbe_main.o ixgbe_common.o ixgbe_ethtool.o
\
ixgbe_82599.o ixgbe_82598.o ixgbe_phy.o ixgbe_sriov.o
\
ixgbe_mbx.o ixgbe_x540.o
ixgbe_mbx.o ixgbe_x540.o
ixgbe_lib.o
ixgbe-$(CONFIG_IXGBE_DCB)
+=
ixgbe_dcb.o ixgbe_dcb_82598.o
\
ixgbe_dcb_82599.o ixgbe_dcb_nl.o
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe.h
View file @
f24fd89a
...
...
@@ -101,8 +101,6 @@
#define IXGBE_TX_FLAGS_VLAN_PRIO_SHIFT 29
#define IXGBE_TX_FLAGS_VLAN_SHIFT 16
#define IXGBE_MAX_RSC_INT_RATE 162760
#define IXGBE_MAX_VF_MC_ENTRIES 30
#define IXGBE_MAX_VF_FUNCTIONS 64
#define IXGBE_MAX_VFTA_ENTRIES 128
...
...
@@ -152,6 +150,7 @@ struct ixgbe_tx_buffer {
struct
sk_buff
*
skb
;
unsigned
int
bytecount
;
unsigned
short
gso_segs
;
__be16
protocol
;
DEFINE_DMA_UNMAP_ADDR
(
dma
);
DEFINE_DMA_UNMAP_LEN
(
len
);
u32
tx_flags
;
...
...
@@ -207,15 +206,18 @@ enum ixgbe_ring_state_t {
clear_bit(__IXGBE_RX_RSC_ENABLED, &(ring)->state)
struct
ixgbe_ring
{
struct
ixgbe_ring
*
next
;
/* pointer to next ring in q_vector */
struct
ixgbe_q_vector
*
q_vector
;
/* backpointer to host q_vector */
struct
net_device
*
netdev
;
/* netdev ring belongs to */
struct
device
*
dev
;
/* device for DMA mapping */
void
*
desc
;
/* descriptor ring memory */
struct
device
*
dev
;
/* device for DMA mapping */
struct
net_device
*
netdev
;
/* netdev ring belongs to */
union
{
struct
ixgbe_tx_buffer
*
tx_buffer_info
;
struct
ixgbe_rx_buffer
*
rx_buffer_info
;
};
unsigned
long
state
;
u8
__iomem
*
tail
;
dma_addr_t
dma
;
/* phys. address of descriptor ring */
unsigned
int
size
;
/* length in bytes */
u16
count
;
/* amount of descriptors */
...
...
@@ -225,17 +227,17 @@ struct ixgbe_ring {
* associated with this ring, which is
* different for DCB and RSS modes
*/
u16
next_to_use
;
u16
next_to_clean
;
union
{
u16
next_to_alloc
;
struct
{
u8
atr_sample_rate
;
u8
atr_count
;
};
u16
next_to_alloc
;
};
u16
next_to_use
;
u16
next_to_clean
;
u8
dcb_tc
;
struct
ixgbe_queue_stats
stats
;
struct
u64_stats_sync
syncp
;
...
...
@@ -243,9 +245,6 @@ struct ixgbe_ring {
struct
ixgbe_tx_queue_stats
tx_stats
;
struct
ixgbe_rx_queue_stats
rx_stats
;
};
unsigned
int
size
;
/* length in bytes */
dma_addr_t
dma
;
/* phys. address of descriptor ring */
struct
ixgbe_q_vector
*
q_vector
;
/* back-pointer to host q_vector */
}
____cacheline_internodealigned_in_smp
;
enum
ixgbe_ring_f_enum
{
...
...
@@ -437,7 +436,8 @@ struct ixgbe_adapter {
#define IXGBE_FLAG2_SFP_NEEDS_RESET (u32)(1 << 5)
#define IXGBE_FLAG2_RESET_REQUESTED (u32)(1 << 6)
#define IXGBE_FLAG2_FDIR_REQUIRES_REINIT (u32)(1 << 7)
#define IXGBE_FLAG2_RSS_FIELD_IPV4_UDP (u32)(1 << 8)
#define IXGBE_FLAG2_RSS_FIELD_IPV6_UDP (u32)(1 << 9)
/* Tx fast path data */
int
num_tx_queues
;
...
...
@@ -581,7 +581,9 @@ extern int ixgbe_copy_dcb_cfg(struct ixgbe_dcb_config *src_dcb_cfg,
extern
char
ixgbe_driver_name
[];
extern
const
char
ixgbe_driver_version
[];
#ifdef IXGBE_FCOE
extern
char
ixgbe_default_device_descr
[];
#endif
/* IXGBE_FCOE */
extern
void
ixgbe_up
(
struct
ixgbe_adapter
*
adapter
);
extern
void
ixgbe_down
(
struct
ixgbe_adapter
*
adapter
);
...
...
@@ -606,6 +608,7 @@ extern void ixgbe_unmap_and_free_tx_resource(struct ixgbe_ring *,
struct
ixgbe_tx_buffer
*
);
extern
void
ixgbe_alloc_rx_buffers
(
struct
ixgbe_ring
*
,
u16
);
extern
void
ixgbe_write_eitr
(
struct
ixgbe_q_vector
*
);
extern
int
ixgbe_poll
(
struct
napi_struct
*
napi
,
int
budget
);
extern
int
ethtool_ioctl
(
struct
ifreq
*
ifr
);
extern
s32
ixgbe_reinit_fdir_tables_82599
(
struct
ixgbe_hw
*
hw
);
extern
s32
ixgbe_init_fdir_signature_82599
(
struct
ixgbe_hw
*
hw
,
u32
fdirctrl
);
...
...
@@ -625,14 +628,16 @@ extern s32 ixgbe_fdir_erase_perfect_filter_82599(struct ixgbe_hw *hw,
extern
void
ixgbe_atr_compute_perfect_hash_82599
(
union
ixgbe_atr_input
*
input
,
union
ixgbe_atr_input
*
mask
);
extern
void
ixgbe_set_rx_mode
(
struct
net_device
*
netdev
);
#ifdef CONFIG_IXGBE_DCB
extern
int
ixgbe_setup_tc
(
struct
net_device
*
dev
,
u8
tc
);
#endif
extern
void
ixgbe_tx_ctxtdesc
(
struct
ixgbe_ring
*
,
u32
,
u32
,
u32
,
u32
);
extern
void
ixgbe_do_reset
(
struct
net_device
*
netdev
);
#ifdef IXGBE_FCOE
extern
void
ixgbe_configure_fcoe
(
struct
ixgbe_adapter
*
adapter
);
extern
int
ixgbe_fso
(
struct
ixgbe_ring
*
tx_ring
,
struct
ixgbe_tx_buffer
*
first
,
u32
tx_flags
,
u8
*
hdr_len
);
u8
*
hdr_len
);
extern
void
ixgbe_cleanup_fcoe
(
struct
ixgbe_adapter
*
adapter
);
extern
int
ixgbe_fcoe_ddp
(
struct
ixgbe_adapter
*
adapter
,
union
ixgbe_adv_rx_desc
*
rx_desc
,
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
View file @
f24fd89a
...
...
@@ -2137,31 +2137,29 @@ static int ixgbe_get_coalesce(struct net_device *netdev,
* this function must be called before setting the new value of
* rx_itr_setting
*/
static
bool
ixgbe_update_rsc
(
struct
ixgbe_adapter
*
adapter
,
struct
ethtool_coalesce
*
ec
)
static
bool
ixgbe_update_rsc
(
struct
ixgbe_adapter
*
adapter
)
{
struct
net_device
*
netdev
=
adapter
->
netdev
;
if
(
!
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_CAPABLE
))
/* nothing to do if LRO or RSC are not enabled */
if
(
!
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_CAPABLE
)
||
!
(
netdev
->
features
&
NETIF_F_LRO
))
return
false
;
/* if interrupt rate is too high then disable RSC */
if
(
ec
->
rx_coalesce_usecs
!=
1
&&
ec
->
rx_coalesce_usecs
<=
(
IXGBE_MIN_RSC_ITR
>>
2
))
{
if
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_ENABLED
)
{
e_info
(
probe
,
"rx-usecs set too low, disabling RSC
\n
"
);
adapter
->
flags2
&=
~
IXGBE_FLAG2_RSC_ENABLED
;
return
true
;
}
}
else
{
/* check the feature flag value and enable RSC if necessary */
if
((
netdev
->
features
&
NETIF_F_LRO
)
&&
!
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_ENABLED
))
{
e_info
(
probe
,
"rx-usecs set to %d, re-enabling RSC
\n
"
,
ec
->
rx_coalesce_usecs
);
/* check the feature flag value and enable RSC if necessary */
if
(
adapter
->
rx_itr_setting
==
1
||
adapter
->
rx_itr_setting
>
IXGBE_MIN_RSC_ITR
)
{
if
(
!
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_ENABLED
))
{
adapter
->
flags2
|=
IXGBE_FLAG2_RSC_ENABLED
;
e_info
(
probe
,
"rx-usecs value high enough "
"to re-enable RSC
\n
"
);
return
true
;
}
/* if interrupt rate is too high then disable RSC */
}
else
if
(
adapter
->
flags2
&
IXGBE_FLAG2_RSC_ENABLED
)
{
adapter
->
flags2
&=
~
IXGBE_FLAG2_RSC_ENABLED
;
e_info
(
probe
,
"rx-usecs set too low, disabling RSC
\n
"
);
return
true
;
}
return
false
;
}
...
...
@@ -2185,9 +2183,6 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
(
ec
->
tx_coalesce_usecs
>
(
IXGBE_MAX_EITR
>>
2
)))
return
-
EINVAL
;
/* check the old value and enable RSC if necessary */
need_reset
=
ixgbe_update_rsc
(
adapter
,
ec
);
if
(
ec
->
rx_coalesce_usecs
>
1
)
adapter
->
rx_itr_setting
=
ec
->
rx_coalesce_usecs
<<
2
;
else
...
...
@@ -2208,6 +2203,9 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
else
tx_itr_param
=
adapter
->
tx_itr_setting
;
/* check the old value and enable RSC if necessary */
need_reset
=
ixgbe_update_rsc
(
adapter
);
if
(
adapter
->
flags
&
IXGBE_FLAG_MSIX_ENABLED
)
num_vectors
=
adapter
->
num_msix_vectors
-
NON_Q_VECTORS
;
else
...
...
@@ -2328,6 +2326,48 @@ static int ixgbe_get_ethtool_fdir_all(struct ixgbe_adapter *adapter,
return
0
;
}
static
int
ixgbe_get_rss_hash_opts
(
struct
ixgbe_adapter
*
adapter
,
struct
ethtool_rxnfc
*
cmd
)
{
cmd
->
data
=
0
;
/* if RSS is disabled then report no hashing */
if
(
!
(
adapter
->
flags
&
IXGBE_FLAG_RSS_ENABLED
))
return
0
;
/* Report default options for RSS on ixgbe */
switch
(
cmd
->
flow_type
)
{
case
TCP_V4_FLOW
:
cmd
->
data
|=
RXH_L4_B_0_1
|
RXH_L4_B_2_3
;
case
UDP_V4_FLOW
:
if
(
adapter
->
flags2
&
IXGBE_FLAG2_RSS_FIELD_IPV4_UDP
)
cmd
->
data
|=
RXH_L4_B_0_1
|
RXH_L4_B_2_3
;
case
SCTP_V4_FLOW
:
case
AH_ESP_V4_FLOW
:
case
AH_V4_FLOW
:
case
ESP_V4_FLOW
:
case
IPV4_FLOW
:
cmd
->
data
|=
RXH_IP_SRC
|
RXH_IP_DST
;
break
;
case
TCP_V6_FLOW
:
cmd
->
data
|=
RXH_L4_B_0_1
|
RXH_L4_B_2_3
;
case
UDP_V6_FLOW
:
if
(
adapter
->
flags2
&
IXGBE_FLAG2_RSS_FIELD_IPV6_UDP
)
cmd
->
data
|=
RXH_L4_B_0_1
|
RXH_L4_B_2_3
;
case
SCTP_V6_FLOW
:
case
AH_ESP_V6_FLOW
:
case
AH_V6_FLOW
:
case
ESP_V6_FLOW
:
case
IPV6_FLOW
:
cmd
->
data
|=
RXH_IP_SRC
|
RXH_IP_DST
;
break
;
default:
return
-
EINVAL
;
}
return
0
;
}
static
int
ixgbe_get_rxnfc
(
struct
net_device
*
dev
,
struct
ethtool_rxnfc
*
cmd
,
u32
*
rule_locs
)
{
...
...
@@ -2349,6 +2389,9 @@ static int ixgbe_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
case
ETHTOOL_GRXCLSRLALL
:
ret
=
ixgbe_get_ethtool_fdir_all
(
adapter
,
cmd
,
rule_locs
);
break
;
case
ETHTOOL_GRXFH
:
ret
=
ixgbe_get_rss_hash_opts
(
adapter
,
cmd
);
break
;
default:
break
;
}
...
...
@@ -2583,6 +2626,111 @@ static int ixgbe_del_ethtool_fdir_entry(struct ixgbe_adapter *adapter,
return
err
;
}
#define UDP_RSS_FLAGS (IXGBE_FLAG2_RSS_FIELD_IPV4_UDP | \
IXGBE_FLAG2_RSS_FIELD_IPV6_UDP)
static
int
ixgbe_set_rss_hash_opt
(
struct
ixgbe_adapter
*
adapter
,
struct
ethtool_rxnfc
*
nfc
)
{
u32
flags2
=
adapter
->
flags2
;
/*
* RSS does not support anything other than hashing
* to queues on src and dst IPs and ports
*/
if
(
nfc
->
data
&
~
(
RXH_IP_SRC
|
RXH_IP_DST
|
RXH_L4_B_0_1
|
RXH_L4_B_2_3
))
return
-
EINVAL
;
switch
(
nfc
->
flow_type
)
{
case
TCP_V4_FLOW
:
case
TCP_V6_FLOW
:
if
(
!
(
nfc
->
data
&
RXH_IP_SRC
)
||
!
(
nfc
->
data
&
RXH_IP_DST
)
||
!
(
nfc
->
data
&
RXH_L4_B_0_1
)
||
!
(
nfc
->
data
&
RXH_L4_B_2_3
))
return
-
EINVAL
;
break
;
case
UDP_V4_FLOW
:
if
(
!
(
nfc
->
data
&
RXH_IP_SRC
)
||
!
(
nfc
->
data
&
RXH_IP_DST
))
return
-
EINVAL
;
switch
(
nfc
->
data
&
(
RXH_L4_B_0_1
|
RXH_L4_B_2_3
))
{
case
0
:
flags2
&=
~
IXGBE_FLAG2_RSS_FIELD_IPV4_UDP
;
break
;
case
(
RXH_L4_B_0_1
|
RXH_L4_B_2_3
):
flags2
|=
IXGBE_FLAG2_RSS_FIELD_IPV4_UDP
;
break
;
default:
return
-
EINVAL
;
}
break
;
case
UDP_V6_FLOW
:
if
(
!
(
nfc
->
data
&
RXH_IP_SRC
)
||
!
(
nfc
->
data
&
RXH_IP_DST
))
return
-
EINVAL
;
switch
(
nfc
->
data
&
(
RXH_L4_B_0_1
|
RXH_L4_B_2_3
))
{
case
0
:
flags2
&=
~
IXGBE_FLAG2_RSS_FIELD_IPV6_UDP
;
break
;
case
(
RXH_L4_B_0_1
|
RXH_L4_B_2_3
):
flags2
|=
IXGBE_FLAG2_RSS_FIELD_IPV6_UDP
;
break
;
default:
return
-
EINVAL
;
}
break
;
case
AH_ESP_V4_FLOW
:
case
AH_V4_FLOW
:
case
ESP_V4_FLOW
:
case
SCTP_V4_FLOW
:
case
AH_ESP_V6_FLOW
:
case
AH_V6_FLOW
:
case
ESP_V6_FLOW
:
case
SCTP_V6_FLOW
:
if
(
!
(
nfc
->
data
&
RXH_IP_SRC
)
||
!
(
nfc
->
data
&
RXH_IP_DST
)
||
(
nfc
->
data
&
RXH_L4_B_0_1
)
||
(
nfc
->
data
&
RXH_L4_B_2_3
))
return
-
EINVAL
;
break
;
default:
return
-
EINVAL
;
}
/* if we changed something we need to update flags */
if
(
flags2
!=
adapter
->
flags2
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
u32
mrqc
=
IXGBE_READ_REG
(
hw
,
IXGBE_MRQC
);
if
((
flags2
&
UDP_RSS_FLAGS
)
&&
!
(
adapter
->
flags2
&
UDP_RSS_FLAGS
))
e_warn
(
drv
,
"enabling UDP RSS: fragmented packets"
" may arrive out of order to the stack above
\n
"
);
adapter
->
flags2
=
flags2
;
/* Perform hash on these packet types */
mrqc
|=
IXGBE_MRQC_RSS_FIELD_IPV4
|
IXGBE_MRQC_RSS_FIELD_IPV4_TCP
|
IXGBE_MRQC_RSS_FIELD_IPV6
|
IXGBE_MRQC_RSS_FIELD_IPV6_TCP
;
mrqc
&=
~
(
IXGBE_MRQC_RSS_FIELD_IPV4_UDP
|
IXGBE_MRQC_RSS_FIELD_IPV6_UDP
);
if
(
flags2
&
IXGBE_FLAG2_RSS_FIELD_IPV4_UDP
)
mrqc
|=
IXGBE_MRQC_RSS_FIELD_IPV4_UDP
;
if
(
flags2
&
IXGBE_FLAG2_RSS_FIELD_IPV6_UDP
)
mrqc
|=
IXGBE_MRQC_RSS_FIELD_IPV6_UDP
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_MRQC
,
mrqc
);
}
return
0
;
}
static
int
ixgbe_set_rxnfc
(
struct
net_device
*
dev
,
struct
ethtool_rxnfc
*
cmd
)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
dev
);
...
...
@@ -2595,6 +2743,9 @@ static int ixgbe_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
case
ETHTOOL_SRXCLSRLDEL
:
ret
=
ixgbe_del_ethtool_fdir_entry
(
adapter
,
cmd
);
break
;
case
ETHTOOL_SRXFH
:
ret
=
ixgbe_set_rss_hash_opt
(
adapter
,
cmd
);
break
;
default:
break
;
}
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
View file @
f24fd89a
...
...
@@ -448,16 +448,15 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
* ixgbe_fso - ixgbe FCoE Sequence Offload (FSO)
* @tx_ring: tx desc ring
* @first: first tx_buffer structure containing skb, tx_flags, and protocol
* @tx_flags: tx flags
* @hdr_len: hdr_len to be returned
*
* This sets up large send offload for FCoE
*
* Returns : 0 indicates
no FSO, > 0 for FSO
, < 0 for error
* Returns : 0 indicates
success
, < 0 for error
*/
int
ixgbe_fso
(
struct
ixgbe_ring
*
tx_ring
,
struct
ixgbe_tx_buffer
*
first
,
u32
tx_flags
,
u8
*
hdr_len
)
u8
*
hdr_len
)
{
struct
sk_buff
*
skb
=
first
->
skb
;
struct
fc_frame_header
*
fh
;
...
...
@@ -539,8 +538,12 @@ int ixgbe_fso(struct ixgbe_ring *tx_ring,
first
->
gso_segs
=
DIV_ROUND_UP
(
skb
->
len
-
*
hdr_len
,
skb_shinfo
(
skb
)
->
gso_size
);
first
->
bytecount
+=
(
first
->
gso_segs
-
1
)
*
*
hdr_len
;
first
->
tx_flags
|=
IXGBE_TX_FLAGS_FSO
;
}
/* set flag indicating FCOE to ixgbe_tx_map call */
first
->
tx_flags
|=
IXGBE_TX_FLAGS_FCOE
;
/* mss_l4len_id: use 1 for FSO as TSO, no need for L4LEN */
mss_l4len_idx
=
skb_shinfo
(
skb
)
->
gso_size
<<
IXGBE_ADVTXD_MSS_SHIFT
;
mss_l4len_idx
|=
1
<<
IXGBE_ADVTXD_IDX_SHIFT
;
...
...
@@ -550,13 +553,13 @@ int ixgbe_fso(struct ixgbe_ring *tx_ring,
sizeof
(
struct
fc_frame_header
);
vlan_macip_lens
|=
(
skb_transport_offset
(
skb
)
-
4
)
<<
IXGBE_ADVTXD_MACLEN_SHIFT
;
vlan_macip_lens
|=
tx_flags
&
IXGBE_TX_FLAGS_VLAN_MASK
;
vlan_macip_lens
|=
first
->
tx_flags
&
IXGBE_TX_FLAGS_VLAN_MASK
;
/* write context desc */
ixgbe_tx_ctxtdesc
(
tx_ring
,
vlan_macip_lens
,
fcoe_sof_eof
,
IXGBE_ADVTXT_TUCMD_FCOE
,
mss_l4len_idx
);
return
skb_is_gso
(
skb
)
;
return
0
;
}
static
void
ixgbe_fcoe_ddp_pools_free
(
struct
ixgbe_fcoe
*
fcoe
)
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
0 → 100644
View file @
f24fd89a
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
View file @
f24fd89a
This diff is collapsed.
Click to expand it.
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