Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
f24fd89a
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
f24fd89a
编写于
3月 19, 2012
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
上级
fb041214
8af3c33f
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
1399 addition
and
1219 deletion
+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
未找到文件。
drivers/net/ethernet/intel/ixgbe/Makefile
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
f24fd89a
此差异已折叠。
点击以展开。
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
浏览文件 @
f24fd89a
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录