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
nexedi
linux
Commits
c8144a36
Commit
c8144a36
authored
May 17, 2011
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/bwh/sfc-next-2.6
parents
f56e03e8
e4abce85
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
29 additions
and
21 deletions
+29
-21
drivers/net/sfc/efx.c
drivers/net/sfc/efx.c
+15
-6
drivers/net/sfc/ethtool.c
drivers/net/sfc/ethtool.c
+3
-2
drivers/net/sfc/net_driver.h
drivers/net/sfc/net_driver.h
+1
-3
drivers/net/sfc/selftest.c
drivers/net/sfc/selftest.c
+5
-6
drivers/net/sfc/tx.c
drivers/net/sfc/tx.c
+5
-4
No files found.
drivers/net/sfc/efx.c
View file @
c8144a36
...
@@ -798,11 +798,6 @@ void efx_link_status_changed(struct efx_nic *efx)
...
@@ -798,11 +798,6 @@ void efx_link_status_changed(struct efx_nic *efx)
if
(
!
netif_running
(
efx
->
net_dev
))
if
(
!
netif_running
(
efx
->
net_dev
))
return
;
return
;
if
(
efx
->
port_inhibited
)
{
netif_carrier_off
(
efx
->
net_dev
);
return
;
}
if
(
link_state
->
up
!=
netif_carrier_ok
(
efx
->
net_dev
))
{
if
(
link_state
->
up
!=
netif_carrier_ok
(
efx
->
net_dev
))
{
efx
->
n_link_state_changes
++
;
efx
->
n_link_state_changes
++
;
...
@@ -1319,8 +1314,20 @@ static void efx_remove_interrupts(struct efx_nic *efx)
...
@@ -1319,8 +1314,20 @@ static void efx_remove_interrupts(struct efx_nic *efx)
static
void
efx_set_channels
(
struct
efx_nic
*
efx
)
static
void
efx_set_channels
(
struct
efx_nic
*
efx
)
{
{
struct
efx_channel
*
channel
;
struct
efx_tx_queue
*
tx_queue
;
efx
->
tx_channel_offset
=
efx
->
tx_channel_offset
=
separate_tx_channels
?
efx
->
n_channels
-
efx
->
n_tx_channels
:
0
;
separate_tx_channels
?
efx
->
n_channels
-
efx
->
n_tx_channels
:
0
;
/* We need to adjust the TX queue numbers if we have separate
* RX-only and TX-only channels.
*/
efx_for_each_channel
(
channel
,
efx
)
{
efx_for_each_channel_tx_queue
(
tx_queue
,
channel
)
tx_queue
->
queue
-=
(
efx
->
tx_channel_offset
*
EFX_TXQ_TYPES
);
}
}
}
static
int
efx_probe_nic
(
struct
efx_nic
*
efx
)
static
int
efx_probe_nic
(
struct
efx_nic
*
efx
)
...
@@ -1438,7 +1445,7 @@ static void efx_start_all(struct efx_nic *efx)
...
@@ -1438,7 +1445,7 @@ static void efx_start_all(struct efx_nic *efx)
* restart the transmit interface early so the watchdog timer stops */
* restart the transmit interface early so the watchdog timer stops */
efx_start_port
(
efx
);
efx_start_port
(
efx
);
if
(
efx_dev_registered
(
efx
)
&&
!
efx
->
port_inhibited
)
if
(
efx_dev_registered
(
efx
)
&&
netif_device_present
(
efx
->
net_dev
)
)
netif_tx_wake_all_queues
(
efx
->
net_dev
);
netif_tx_wake_all_queues
(
efx
->
net_dev
);
efx_for_each_channel
(
channel
,
efx
)
efx_for_each_channel
(
channel
,
efx
)
...
@@ -2102,6 +2109,7 @@ int efx_reset(struct efx_nic *efx, enum reset_type method)
...
@@ -2102,6 +2109,7 @@ int efx_reset(struct efx_nic *efx, enum reset_type method)
netif_info
(
efx
,
drv
,
efx
->
net_dev
,
"resetting (%s)
\n
"
,
netif_info
(
efx
,
drv
,
efx
->
net_dev
,
"resetting (%s)
\n
"
,
RESET_TYPE
(
method
));
RESET_TYPE
(
method
));
netif_device_detach
(
efx
->
net_dev
);
efx_reset_down
(
efx
,
method
);
efx_reset_down
(
efx
,
method
);
rc
=
efx
->
type
->
reset
(
efx
,
method
);
rc
=
efx
->
type
->
reset
(
efx
,
method
);
...
@@ -2135,6 +2143,7 @@ int efx_reset(struct efx_nic *efx, enum reset_type method)
...
@@ -2135,6 +2143,7 @@ int efx_reset(struct efx_nic *efx, enum reset_type method)
efx
->
state
=
STATE_DISABLED
;
efx
->
state
=
STATE_DISABLED
;
}
else
{
}
else
{
netif_dbg
(
efx
,
drv
,
efx
->
net_dev
,
"reset complete
\n
"
);
netif_dbg
(
efx
,
drv
,
efx
->
net_dev
,
"reset complete
\n
"
);
netif_device_attach
(
efx
->
net_dev
);
}
}
return
rc
;
return
rc
;
}
}
...
...
drivers/net/sfc/ethtool.c
View file @
c8144a36
...
@@ -955,8 +955,9 @@ static int efx_ethtool_set_rx_ntuple(struct net_device *net_dev,
...
@@ -955,8 +955,9 @@ static int efx_ethtool_set_rx_ntuple(struct net_device *net_dev,
if
(
ntuple
->
fs
.
action
==
ETHTOOL_RXNTUPLE_ACTION_CLEAR
)
if
(
ntuple
->
fs
.
action
==
ETHTOOL_RXNTUPLE_ACTION_CLEAR
)
return
efx_filter_remove_filter
(
efx
,
&
filter
);
return
efx_filter_remove_filter
(
efx
,
&
filter
);
else
return
efx_filter_insert_filter
(
efx
,
&
filter
,
true
);
rc
=
efx_filter_insert_filter
(
efx
,
&
filter
,
true
);
return
rc
<
0
?
rc
:
0
;
}
}
static
int
efx_ethtool_get_rxfh_indir
(
struct
net_device
*
net_dev
,
static
int
efx_ethtool_get_rxfh_indir
(
struct
net_device
*
net_dev
,
...
...
drivers/net/sfc/net_driver.h
View file @
c8144a36
...
@@ -670,13 +670,12 @@ struct efx_filter_state;
...
@@ -670,13 +670,12 @@ struct efx_filter_state;
* @mtd_list: List of MTDs attached to the NIC
* @mtd_list: List of MTDs attached to the NIC
* @nic_data: Hardware dependent state
* @nic_data: Hardware dependent state
* @mac_lock: MAC access lock. Protects @port_enabled, @phy_mode,
* @mac_lock: MAC access lock. Protects @port_enabled, @phy_mode,
*
@port_inhibited,
efx_monitor() and efx_reconfigure_port()
* efx_monitor() and efx_reconfigure_port()
* @port_enabled: Port enabled indicator.
* @port_enabled: Port enabled indicator.
* Serialises efx_stop_all(), efx_start_all(), efx_monitor() and
* Serialises efx_stop_all(), efx_start_all(), efx_monitor() and
* efx_mac_work() with kernel interfaces. Safe to read under any
* efx_mac_work() with kernel interfaces. Safe to read under any
* one of the rtnl_lock, mac_lock, or netif_tx_lock, but all three must
* one of the rtnl_lock, mac_lock, or netif_tx_lock, but all three must
* be held to modify it.
* be held to modify it.
* @port_inhibited: If set, the netif_carrier is always off. Hold the mac_lock
* @port_initialized: Port initialized?
* @port_initialized: Port initialized?
* @net_dev: Operating system network device. Consider holding the rtnl lock
* @net_dev: Operating system network device. Consider holding the rtnl lock
* @stats_buffer: DMA buffer for statistics
* @stats_buffer: DMA buffer for statistics
...
@@ -764,7 +763,6 @@ struct efx_nic {
...
@@ -764,7 +763,6 @@ struct efx_nic {
struct
mutex
mac_lock
;
struct
mutex
mac_lock
;
struct
work_struct
mac_work
;
struct
work_struct
mac_work
;
bool
port_enabled
;
bool
port_enabled
;
bool
port_inhibited
;
bool
port_initialized
;
bool
port_initialized
;
struct
net_device
*
net_dev
;
struct
net_device
*
net_dev
;
...
...
drivers/net/sfc/selftest.c
View file @
c8144a36
...
@@ -695,12 +695,12 @@ int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests,
...
@@ -695,12 +695,12 @@ int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests,
/* Offline (i.e. disruptive) testing
/* Offline (i.e. disruptive) testing
* This checks MAC and PHY loopback on the specified port. */
* This checks MAC and PHY loopback on the specified port. */
/* force the carrier state off so the kernel doesn't transmit during
/* Detach the device so the kernel doesn't transmit during the
* the loopback test, and the watchdog timeout doesn't fire. Also put
* loopback test and the watchdog timeout doesn't fire.
* falcon into loopback for the register test.
*/
*/
netif_device_detach
(
efx
->
net_dev
);
mutex_lock
(
&
efx
->
mac_lock
);
mutex_lock
(
&
efx
->
mac_lock
);
efx
->
port_inhibited
=
true
;
if
(
efx
->
loopback_modes
)
{
if
(
efx
->
loopback_modes
)
{
/* We need the 312 clock from the PHY to test the XMAC
/* We need the 312 clock from the PHY to test the XMAC
* registers, so move into XGMII loopback if available */
* registers, so move into XGMII loopback if available */
...
@@ -750,12 +750,11 @@ int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests,
...
@@ -750,12 +750,11 @@ int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests,
/* restore the PHY to the previous state */
/* restore the PHY to the previous state */
mutex_lock
(
&
efx
->
mac_lock
);
mutex_lock
(
&
efx
->
mac_lock
);
efx
->
phy_mode
=
phy_mode
;
efx
->
phy_mode
=
phy_mode
;
efx
->
port_inhibited
=
false
;
efx
->
loopback_mode
=
loopback_mode
;
efx
->
loopback_mode
=
loopback_mode
;
__efx_reconfigure_port
(
efx
);
__efx_reconfigure_port
(
efx
);
mutex_unlock
(
&
efx
->
mac_lock
);
mutex_unlock
(
&
efx
->
mac_lock
);
netif_
tx_wake_all_queues
(
efx
->
net_dev
);
netif_
device_attach
(
efx
->
net_dev
);
return
rc_test
;
return
rc_test
;
}
}
...
...
drivers/net/sfc/tx.c
View file @
c8144a36
...
@@ -205,7 +205,9 @@ netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb)
...
@@ -205,7 +205,9 @@ netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb)
goto
unwind
;
goto
unwind
;
}
}
smp_mb
();
smp_mb
();
netif_tx_start_queue
(
tx_queue
->
core_txq
);
if
(
likely
(
!
efx
->
loopback_selftest
))
netif_tx_start_queue
(
tx_queue
->
core_txq
);
}
}
insert_ptr
=
tx_queue
->
insert_count
&
tx_queue
->
ptr_mask
;
insert_ptr
=
tx_queue
->
insert_count
&
tx_queue
->
ptr_mask
;
...
@@ -338,8 +340,7 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb,
...
@@ -338,8 +340,7 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb,
struct
efx_tx_queue
*
tx_queue
;
struct
efx_tx_queue
*
tx_queue
;
unsigned
index
,
type
;
unsigned
index
,
type
;
if
(
unlikely
(
efx
->
port_inhibited
))
EFX_WARN_ON_PARANOID
(
!
netif_device_present
(
net_dev
));
return
NETDEV_TX_BUSY
;
index
=
skb_get_queue_mapping
(
skb
);
index
=
skb_get_queue_mapping
(
skb
);
type
=
skb
->
ip_summed
==
CHECKSUM_PARTIAL
?
EFX_TXQ_TYPE_OFFLOAD
:
0
;
type
=
skb
->
ip_summed
==
CHECKSUM_PARTIAL
?
EFX_TXQ_TYPE_OFFLOAD
:
0
;
...
@@ -436,7 +437,7 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index)
...
@@ -436,7 +437,7 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index)
smp_mb
();
smp_mb
();
if
(
unlikely
(
netif_tx_queue_stopped
(
tx_queue
->
core_txq
))
&&
if
(
unlikely
(
netif_tx_queue_stopped
(
tx_queue
->
core_txq
))
&&
likely
(
efx
->
port_enabled
)
&&
likely
(
efx
->
port_enabled
)
&&
likely
(
!
efx
->
port_inhibited
))
{
likely
(
netif_device_present
(
efx
->
net_dev
)
))
{
fill_level
=
tx_queue
->
insert_count
-
tx_queue
->
read_count
;
fill_level
=
tx_queue
->
insert_count
-
tx_queue
->
read_count
;
if
(
fill_level
<
EFX_TXQ_THRESHOLD
(
efx
))
{
if
(
fill_level
<
EFX_TXQ_THRESHOLD
(
efx
))
{
EFX_BUG_ON_PARANOID
(
!
efx_dev_registered
(
efx
));
EFX_BUG_ON_PARANOID
(
!
efx_dev_registered
(
efx
));
...
...
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