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
6fc8cc3f
Commit
6fc8cc3f
authored
Apr 03, 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
parents
a998d434
bf03085f
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
112 additions
and
84 deletions
+112
-84
drivers/net/ethernet/intel/e1000e/e1000.h
drivers/net/ethernet/intel/e1000e/e1000.h
+6
-0
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/e1000e/netdev.c
+26
-0
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
+80
-84
No files found.
drivers/net/ethernet/intel/e1000e/e1000.h
View file @
6fc8cc3f
...
...
@@ -161,6 +161,12 @@ struct e1000_info;
/* Time to wait before putting the device into D3 if there's no link (in ms). */
#define LINK_TIMEOUT 100
/*
* Count for polling __E1000_RESET condition every 10-20msec.
* Experimentation has shown the reset can take approximately 210msec.
*/
#define E1000_CHECK_RESET_COUNT 25
#define DEFAULT_RDTR 0
#define DEFAULT_RADV 8
#define BURST_RDTR 0x20
...
...
drivers/net/ethernet/intel/e1000e/netdev.c
View file @
6fc8cc3f
...
...
@@ -1059,6 +1059,13 @@ static void e1000_print_hw_hang(struct work_struct *work)
ew32
(
TIDV
,
adapter
->
tx_int_delay
|
E1000_TIDV_FPD
);
/* execute the writes immediately */
e1e_flush
();
/*
* Due to rare timing issues, write to TIDV again to ensure
* the write is successful
*/
ew32
(
TIDV
,
adapter
->
tx_int_delay
|
E1000_TIDV_FPD
);
/* execute the writes immediately */
e1e_flush
();
adapter
->
tx_hang_recheck
=
true
;
return
;
}
...
...
@@ -3616,6 +3623,16 @@ static void e1000e_flush_descriptors(struct e1000_adapter *adapter)
/* execute the writes immediately */
e1e_flush
();
/*
* due to rare timing issues, write to TIDV/RDTR again to ensure the
* write is successful
*/
ew32
(
TIDV
,
adapter
->
tx_int_delay
|
E1000_TIDV_FPD
);
ew32
(
RDTR
,
adapter
->
rx_int_delay
|
E1000_RDTR_FPD
);
/* execute the writes immediately */
e1e_flush
();
}
static
void
e1000e_update_stats
(
struct
e1000_adapter
*
adapter
);
...
...
@@ -3968,6 +3985,10 @@ static int e1000_close(struct net_device *netdev)
{
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
pci_dev
*
pdev
=
adapter
->
pdev
;
int
count
=
E1000_CHECK_RESET_COUNT
;
while
(
test_bit
(
__E1000_RESETTING
,
&
adapter
->
state
)
&&
count
--
)
usleep_range
(
10000
,
20000
);
WARN_ON
(
test_bit
(
__E1000_RESETTING
,
&
adapter
->
state
));
...
...
@@ -5472,6 +5493,11 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake,
netif_device_detach
(
netdev
);
if
(
netif_running
(
netdev
))
{
int
count
=
E1000_CHECK_RESET_COUNT
;
while
(
test_bit
(
__E1000_RESETTING
,
&
adapter
->
state
)
&&
count
--
)
usleep_range
(
10000
,
20000
);
WARN_ON
(
test_bit
(
__E1000_RESETTING
,
&
adapter
->
state
));
e1000e_down
(
adapter
);
e1000_free_irq
(
adapter
);
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
View file @
6fc8cc3f
...
...
@@ -44,62 +44,94 @@
#define DCB_NO_HW_CHG 1
/* DCB configuration did not change */
#define DCB_HW_CHG 2
/* DCB configuration changed, no reset */
int
ixgbe_copy_dcb_cfg
(
struct
ixgbe_dcb_config
*
s
rc_dcb_
cfg
,
struct
ixgbe_dcb_config
*
dst_dcb_
cfg
,
int
tc_max
)
int
ixgbe_copy_dcb_cfg
(
struct
ixgbe_dcb_config
*
scfg
,
struct
ixgbe_dcb_config
*
d
cfg
,
int
tc_max
)
{
struct
tc_configuration
*
src_tc_cfg
=
NULL
;
struct
tc_configuration
*
dst_tc_cfg
=
NULL
;
int
i
;
struct
tc_configuration
*
src
=
NULL
;
struct
tc_configuration
*
dst
=
NULL
;
int
i
,
j
;
int
tx
=
DCB_TX_CONFIG
;
int
rx
=
DCB_RX_CONFIG
;
int
changes
=
0
;
if
(
!
s
rc_dcb_cfg
||
!
dst_dcb_
cfg
)
return
-
EINVAL
;
if
(
!
s
cfg
||
!
d
cfg
)
return
changes
;
for
(
i
=
DCB_PG_ATTR_TC_0
;
i
<
tc_max
+
DCB_PG_ATTR_TC_0
;
i
++
)
{
src
_tc_cfg
=
&
src_dcb_
cfg
->
tc_config
[
i
-
DCB_PG_ATTR_TC_0
];
dst
_tc_cfg
=
&
dst_dcb_
cfg
->
tc_config
[
i
-
DCB_PG_ATTR_TC_0
];
src
=
&
s
cfg
->
tc_config
[
i
-
DCB_PG_ATTR_TC_0
];
dst
=
&
d
cfg
->
tc_config
[
i
-
DCB_PG_ATTR_TC_0
];
dst_tc_cfg
->
path
[
DCB_TX_CONFIG
].
prio_type
=
src_tc_cfg
->
path
[
DCB_TX_CONFIG
].
prio_type
;
if
(
dst
->
path
[
tx
].
prio_type
!=
src
->
path
[
tx
].
prio_type
)
{
dst
->
path
[
tx
].
prio_type
=
src
->
path
[
tx
].
prio_type
;
changes
|=
BIT_PG_TX
;
}
dst_tc_cfg
->
path
[
DCB_TX_CONFIG
].
bwg_id
=
src_tc_cfg
->
path
[
DCB_TX_CONFIG
].
bwg_id
;
if
(
dst
->
path
[
tx
].
bwg_id
!=
src
->
path
[
tx
].
bwg_id
)
{
dst
->
path
[
tx
].
bwg_id
=
src
->
path
[
tx
].
bwg_id
;
changes
|=
BIT_PG_TX
;
}
dst_tc_cfg
->
path
[
DCB_TX_CONFIG
].
bwg_percent
=
src_tc_cfg
->
path
[
DCB_TX_CONFIG
].
bwg_percent
;
if
(
dst
->
path
[
tx
].
bwg_percent
!=
src
->
path
[
tx
].
bwg_percent
)
{
dst
->
path
[
tx
].
bwg_percent
=
src
->
path
[
tx
].
bwg_percent
;
changes
|=
BIT_PG_TX
;
}
dst_tc_cfg
->
path
[
DCB_TX_CONFIG
].
up_to_tc_bitmap
=
src_tc_cfg
->
path
[
DCB_TX_CONFIG
].
up_to_tc_bitmap
;
if
(
dst
->
path
[
tx
].
up_to_tc_bitmap
!=
src
->
path
[
tx
].
up_to_tc_bitmap
)
{
dst
->
path
[
tx
].
up_to_tc_bitmap
=
src
->
path
[
tx
].
up_to_tc_bitmap
;
changes
|=
(
BIT_PG_TX
|
BIT_PFC
|
BIT_APP_UPCHG
);
}
dst_tc_cfg
->
path
[
DCB_RX_CONFIG
].
prio_type
=
src_tc_cfg
->
path
[
DCB_RX_CONFIG
].
prio_type
;
if
(
dst
->
path
[
rx
].
prio_type
!=
src
->
path
[
rx
].
prio_type
)
{
dst
->
path
[
rx
].
prio_type
=
src
->
path
[
rx
].
prio_type
;
changes
|=
BIT_PG_RX
;
}
dst_tc_cfg
->
path
[
DCB_RX_CONFIG
].
bwg_id
=
src_tc_cfg
->
path
[
DCB_RX_CONFIG
].
bwg_id
;
if
(
dst
->
path
[
rx
].
bwg_id
!=
src
->
path
[
rx
].
bwg_id
)
{
dst
->
path
[
rx
].
bwg_id
=
src
->
path
[
rx
].
bwg_id
;
changes
|=
BIT_PG_RX
;
}
dst_tc_cfg
->
path
[
DCB_RX_CONFIG
].
bwg_percent
=
src_tc_cfg
->
path
[
DCB_RX_CONFIG
].
bwg_percent
;
if
(
dst
->
path
[
rx
].
bwg_percent
!=
src
->
path
[
rx
].
bwg_percent
)
{
dst
->
path
[
rx
].
bwg_percent
=
src
->
path
[
rx
].
bwg_percent
;
changes
|=
BIT_PG_RX
;
}
dst_tc_cfg
->
path
[
DCB_RX_CONFIG
].
up_to_tc_bitmap
=
src_tc_cfg
->
path
[
DCB_RX_CONFIG
].
up_to_tc_bitmap
;
if
(
dst
->
path
[
rx
].
up_to_tc_bitmap
!=
src
->
path
[
rx
].
up_to_tc_bitmap
)
{
dst
->
path
[
rx
].
up_to_tc_bitmap
=
src
->
path
[
rx
].
up_to_tc_bitmap
;
changes
|=
(
BIT_PG_RX
|
BIT_PFC
|
BIT_APP_UPCHG
);
}
}
for
(
i
=
DCB_PG_ATTR_BW_ID_0
;
i
<
DCB_PG_ATTR_BW_ID_MAX
;
i
++
)
{
dst_dcb_cfg
->
bw_percentage
[
DCB_TX_CONFIG
]
[
i
-
DCB_PG_ATTR_BW_ID_0
]
=
src_dcb_cfg
->
bw_percentage
[
DCB_TX_CONFIG
][
i
-
DCB_PG_ATTR_BW_ID_0
];
dst_dcb_cfg
->
bw_percentage
[
DCB_RX_CONFIG
]
[
i
-
DCB_PG_ATTR_BW_ID_0
]
=
src_dcb_cfg
->
bw_percentage
[
DCB_RX_CONFIG
][
i
-
DCB_PG_ATTR_BW_ID_0
];
j
=
i
-
DCB_PG_ATTR_BW_ID_0
;
if
(
dcfg
->
bw_percentage
[
tx
][
j
]
!=
scfg
->
bw_percentage
[
tx
][
j
])
{
dcfg
->
bw_percentage
[
tx
][
j
]
=
scfg
->
bw_percentage
[
tx
][
j
];
changes
|=
BIT_PG_TX
;
}
if
(
dcfg
->
bw_percentage
[
rx
][
j
]
!=
scfg
->
bw_percentage
[
rx
][
j
])
{
dcfg
->
bw_percentage
[
rx
][
j
]
=
scfg
->
bw_percentage
[
rx
][
j
];
changes
|=
BIT_PG_RX
;
}
}
for
(
i
=
DCB_PFC_UP_ATTR_0
;
i
<
DCB_PFC_UP_ATTR_MAX
;
i
++
)
{
dst_dcb_cfg
->
tc_config
[
i
-
DCB_PFC_UP_ATTR_0
].
dcb_pfc
=
src_dcb_cfg
->
tc_config
[
i
-
DCB_PFC_UP_ATTR_0
].
dcb_pfc
;
j
=
i
-
DCB_PFC_UP_ATTR_0
;
if
(
dcfg
->
tc_config
[
j
].
dcb_pfc
!=
scfg
->
tc_config
[
j
].
dcb_pfc
)
{
dcfg
->
tc_config
[
j
].
dcb_pfc
=
scfg
->
tc_config
[
j
].
dcb_pfc
;
changes
|=
BIT_PFC
;
}
}
dst_dcb_cfg
->
pfc_mode_enable
=
src_dcb_cfg
->
pfc_mode_enable
;
if
(
dcfg
->
pfc_mode_enable
!=
scfg
->
pfc_mode_enable
)
{
dcfg
->
pfc_mode_enable
=
scfg
->
pfc_mode_enable
;
changes
|=
BIT_PFC
;
}
return
0
;
return
changes
;
}
static
u8
ixgbe_dcbnl_get_state
(
struct
net_device
*
netdev
)
...
...
@@ -179,20 +211,6 @@ static void ixgbe_dcbnl_set_pg_tc_cfg_tx(struct net_device *netdev, int tc,
if
(
up_map
!=
DCB_ATTR_VALUE_UNDEFINED
)
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
up_to_tc_bitmap
=
up_map
;
if
((
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
prio_type
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
prio_type
)
||
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
bwg_id
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
bwg_id
)
||
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
bwg_percent
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
bwg_percent
)
||
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
up_to_tc_bitmap
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
up_to_tc_bitmap
))
adapter
->
dcb_set_bitmap
|=
BIT_PG_TX
;
if
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
up_to_tc_bitmap
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
0
].
up_to_tc_bitmap
)
adapter
->
dcb_set_bitmap
|=
BIT_PFC
|
BIT_APP_UPCHG
;
}
static
void
ixgbe_dcbnl_set_pg_bwg_cfg_tx
(
struct
net_device
*
netdev
,
int
bwg_id
,
...
...
@@ -201,10 +219,6 @@ static void ixgbe_dcbnl_set_pg_bwg_cfg_tx(struct net_device *netdev, int bwg_id,
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
adapter
->
temp_dcb_cfg
.
bw_percentage
[
0
][
bwg_id
]
=
bw_pct
;
if
(
adapter
->
temp_dcb_cfg
.
bw_percentage
[
0
][
bwg_id
]
!=
adapter
->
dcb_cfg
.
bw_percentage
[
0
][
bwg_id
])
adapter
->
dcb_set_bitmap
|=
BIT_PG_TX
;
}
static
void
ixgbe_dcbnl_set_pg_tc_cfg_rx
(
struct
net_device
*
netdev
,
int
tc
,
...
...
@@ -223,20 +237,6 @@ static void ixgbe_dcbnl_set_pg_tc_cfg_rx(struct net_device *netdev, int tc,
if
(
up_map
!=
DCB_ATTR_VALUE_UNDEFINED
)
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
up_to_tc_bitmap
=
up_map
;
if
((
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
prio_type
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
prio_type
)
||
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
bwg_id
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
bwg_id
)
||
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
bwg_percent
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
bwg_percent
)
||
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
up_to_tc_bitmap
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
up_to_tc_bitmap
))
adapter
->
dcb_set_bitmap
|=
BIT_PG_RX
;
if
(
adapter
->
temp_dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
up_to_tc_bitmap
!=
adapter
->
dcb_cfg
.
tc_config
[
tc
].
path
[
1
].
up_to_tc_bitmap
)
adapter
->
dcb_set_bitmap
|=
BIT_PFC
;
}
static
void
ixgbe_dcbnl_set_pg_bwg_cfg_rx
(
struct
net_device
*
netdev
,
int
bwg_id
,
...
...
@@ -245,10 +245,6 @@ static void ixgbe_dcbnl_set_pg_bwg_cfg_rx(struct net_device *netdev, int bwg_id,
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
adapter
->
temp_dcb_cfg
.
bw_percentage
[
1
][
bwg_id
]
=
bw_pct
;
if
(
adapter
->
temp_dcb_cfg
.
bw_percentage
[
1
][
bwg_id
]
!=
adapter
->
dcb_cfg
.
bw_percentage
[
1
][
bwg_id
])
adapter
->
dcb_set_bitmap
|=
BIT_PG_RX
;
}
static
void
ixgbe_dcbnl_get_pg_tc_cfg_tx
(
struct
net_device
*
netdev
,
int
tc
,
...
...
@@ -298,10 +294,8 @@ static void ixgbe_dcbnl_set_pfc_cfg(struct net_device *netdev, int priority,
adapter
->
temp_dcb_cfg
.
tc_config
[
priority
].
dcb_pfc
=
setting
;
if
(
adapter
->
temp_dcb_cfg
.
tc_config
[
priority
].
dcb_pfc
!=
adapter
->
dcb_cfg
.
tc_config
[
priority
].
dcb_pfc
)
{
adapter
->
dcb_set_bitmap
|=
BIT_PFC
;
adapter
->
dcb_cfg
.
tc_config
[
priority
].
dcb_pfc
)
adapter
->
temp_dcb_cfg
.
pfc_mode_enable
=
true
;
}
}
static
void
ixgbe_dcbnl_get_pfc_cfg
(
struct
net_device
*
netdev
,
int
priority
,
...
...
@@ -336,7 +330,8 @@ static void ixgbe_dcbnl_devreset(struct net_device *dev)
static
u8
ixgbe_dcbnl_set_all
(
struct
net_device
*
netdev
)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
int
ret
,
i
;
int
ret
=
DCB_NO_HW_CHG
;
int
i
;
#ifdef IXGBE_FCOE
struct
dcb_app
app
=
{
.
selector
=
DCB_APP_IDTYPE_ETHTYPE
,
...
...
@@ -355,12 +350,13 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
/* Fail command if not in CEE mode */
if
(
!
(
adapter
->
dcbx_cap
&
DCB_CAP_DCBX_VER_CEE
))
return
1
;
return
ret
;
ret
=
ixgbe_copy_dcb_cfg
(
&
adapter
->
temp_dcb_cfg
,
&
adapter
->
dcb_cfg
,
adapter
->
dcb_set_bitmap
|=
ixgbe_copy_dcb_cfg
(
&
adapter
->
temp_dcb_cfg
,
&
adapter
->
dcb_cfg
,
MAX_TRAFFIC_CLASS
);
if
(
ret
)
return
DCB_NO_HW_CHG
;
if
(
!
adapter
->
dcb_set_bitmap
)
return
ret
;
if
(
adapter
->
dcb_cfg
.
pfc_mode_enable
)
{
switch
(
adapter
->
hw
.
mac
.
type
)
{
...
...
@@ -420,6 +416,8 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
for
(
i
=
0
;
i
<
IEEE_8021QAZ_MAX_TCS
;
i
++
)
netdev_set_prio_tc_map
(
netdev
,
i
,
prio_tc
[
i
]);
ret
=
DCB_HW_CHG_RST
;
}
if
(
adapter
->
dcb_set_bitmap
&
BIT_PFC
)
{
...
...
@@ -430,6 +428,7 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
DCB_TX_CONFIG
,
prio_tc
);
ixgbe_dcb_unpack_pfc
(
&
adapter
->
dcb_cfg
,
&
pfc_en
);
ixgbe_dcb_hw_pfc_config
(
&
adapter
->
hw
,
pfc_en
,
prio_tc
);
if
(
ret
!=
DCB_HW_CHG_RST
)
ret
=
DCB_HW_CHG
;
}
...
...
@@ -531,9 +530,6 @@ static void ixgbe_dcbnl_setpfcstate(struct net_device *netdev, u8 state)
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
adapter
->
temp_dcb_cfg
.
pfc_mode_enable
=
state
;
if
(
adapter
->
temp_dcb_cfg
.
pfc_mode_enable
!=
adapter
->
dcb_cfg
.
pfc_mode_enable
)
adapter
->
dcb_set_bitmap
|=
BIT_PFC
;
}
/**
...
...
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