Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/bwh/sfc-next
This commit is contained in:
@@ -531,8 +531,8 @@ typedef union efx_oword {
|
|||||||
|
|
||||||
|
|
||||||
/* Static initialiser */
|
/* Static initialiser */
|
||||||
#define EFX_OWORD32(a, b, c, d) \
|
#define EFX_OWORD32(a, b, c, d) \
|
||||||
{ .u32 = { cpu_to_le32(a), cpu_to_le32(b), \
|
{ .u32 = { cpu_to_le32(a), cpu_to_le32(b), \
|
||||||
cpu_to_le32(c), cpu_to_le32(d) } }
|
cpu_to_le32(c), cpu_to_le32(d) } }
|
||||||
|
|
||||||
#endif /* EFX_BITFIELD_H */
|
#endif /* EFX_BITFIELD_H */
|
||||||
|
@@ -585,7 +585,12 @@ static int efx_probe_channels(struct efx_nic *efx)
|
|||||||
/* Restart special buffer allocation */
|
/* Restart special buffer allocation */
|
||||||
efx->next_buffer_table = 0;
|
efx->next_buffer_table = 0;
|
||||||
|
|
||||||
efx_for_each_channel(channel, efx) {
|
/* Probe channels in reverse, so that any 'extra' channels
|
||||||
|
* use the start of the buffer table. This allows the traffic
|
||||||
|
* channels to be resized without moving them or wasting the
|
||||||
|
* entries before them.
|
||||||
|
*/
|
||||||
|
efx_for_each_channel_rev(channel, efx) {
|
||||||
rc = efx_probe_channel(channel);
|
rc = efx_probe_channel(channel);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
netif_err(efx, probe, efx->net_dev,
|
netif_err(efx, probe, efx->net_dev,
|
||||||
|
@@ -37,7 +37,7 @@ static const struct {
|
|||||||
SENSOR(PHY0_TEMP, "PHY temp.", EFX_HWMON_TEMP, 0),
|
SENSOR(PHY0_TEMP, "PHY temp.", EFX_HWMON_TEMP, 0),
|
||||||
SENSOR(PHY0_COOLING, "PHY cooling", EFX_HWMON_COOL, 0),
|
SENSOR(PHY0_COOLING, "PHY cooling", EFX_HWMON_COOL, 0),
|
||||||
SENSOR(PHY1_TEMP, "PHY temp.", EFX_HWMON_TEMP, 1),
|
SENSOR(PHY1_TEMP, "PHY temp.", EFX_HWMON_TEMP, 1),
|
||||||
SENSOR(PHY1_COOLING, "PHY cooling", EFX_HWMON_COOL, 1),
|
SENSOR(PHY1_COOLING, "PHY cooling", EFX_HWMON_COOL, 1),
|
||||||
SENSOR(IN_1V0, "1.0V supply", EFX_HWMON_IN, -1),
|
SENSOR(IN_1V0, "1.0V supply", EFX_HWMON_IN, -1),
|
||||||
SENSOR(IN_1V2, "1.2V supply", EFX_HWMON_IN, -1),
|
SENSOR(IN_1V2, "1.2V supply", EFX_HWMON_IN, -1),
|
||||||
SENSOR(IN_1V8, "1.8V supply", EFX_HWMON_IN, -1),
|
SENSOR(IN_1V8, "1.8V supply", EFX_HWMON_IN, -1),
|
||||||
|
@@ -1030,9 +1030,12 @@ static inline bool efx_tx_queue_used(struct efx_tx_queue *tx_queue)
|
|||||||
|
|
||||||
/* Iterate over all possible TX queues belonging to a channel */
|
/* Iterate over all possible TX queues belonging to a channel */
|
||||||
#define efx_for_each_possible_channel_tx_queue(_tx_queue, _channel) \
|
#define efx_for_each_possible_channel_tx_queue(_tx_queue, _channel) \
|
||||||
for (_tx_queue = (_channel)->tx_queue; \
|
if (!efx_channel_has_tx_queues(_channel)) \
|
||||||
_tx_queue < (_channel)->tx_queue + EFX_TXQ_TYPES; \
|
; \
|
||||||
_tx_queue++)
|
else \
|
||||||
|
for (_tx_queue = (_channel)->tx_queue; \
|
||||||
|
_tx_queue < (_channel)->tx_queue + EFX_TXQ_TYPES; \
|
||||||
|
_tx_queue++)
|
||||||
|
|
||||||
static inline bool efx_channel_has_rx_queue(struct efx_channel *channel)
|
static inline bool efx_channel_has_rx_queue(struct efx_channel *channel)
|
||||||
{
|
{
|
||||||
|
@@ -796,12 +796,13 @@ static int efx_vfdi_set_status_page(struct efx_vf *vf)
|
|||||||
{
|
{
|
||||||
struct efx_nic *efx = vf->efx;
|
struct efx_nic *efx = vf->efx;
|
||||||
struct vfdi_req *req = vf->buf.addr;
|
struct vfdi_req *req = vf->buf.addr;
|
||||||
unsigned int page_count;
|
u64 page_count = req->u.set_status_page.peer_page_count;
|
||||||
|
u64 max_page_count =
|
||||||
|
(EFX_PAGE_SIZE -
|
||||||
|
offsetof(struct vfdi_req, u.set_status_page.peer_page_addr[0]))
|
||||||
|
/ sizeof(req->u.set_status_page.peer_page_addr[0]);
|
||||||
|
|
||||||
page_count = req->u.set_status_page.peer_page_count;
|
if (!req->u.set_status_page.dma_addr || page_count > max_page_count) {
|
||||||
if (!req->u.set_status_page.dma_addr || EFX_PAGE_SIZE <
|
|
||||||
offsetof(struct vfdi_req,
|
|
||||||
u.set_status_page.peer_page_addr[page_count])) {
|
|
||||||
if (net_ratelimit())
|
if (net_ratelimit())
|
||||||
netif_err(efx, hw, efx->net_dev,
|
netif_err(efx, hw, efx->net_dev,
|
||||||
"ERROR: Invalid SET_STATUS_PAGE from %s\n",
|
"ERROR: Invalid SET_STATUS_PAGE from %s\n",
|
||||||
|
@@ -339,7 +339,7 @@ static void efx_dequeue_buffers(struct efx_tx_queue *tx_queue,
|
|||||||
* OS to free the skb.
|
* OS to free the skb.
|
||||||
*/
|
*/
|
||||||
netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb,
|
netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb,
|
||||||
struct net_device *net_dev)
|
struct net_device *net_dev)
|
||||||
{
|
{
|
||||||
struct efx_nic *efx = netdev_priv(net_dev);
|
struct efx_nic *efx = netdev_priv(net_dev);
|
||||||
struct efx_tx_queue *tx_queue;
|
struct efx_tx_queue *tx_queue;
|
||||||
|
@@ -152,7 +152,8 @@ enum vfdi_op {
|
|||||||
* all traffic at this receive queue.
|
* all traffic at this receive queue.
|
||||||
* @u.mac_filter.flags: MAC filter flags.
|
* @u.mac_filter.flags: MAC filter flags.
|
||||||
* @u.set_status_page.dma_addr: Base address for the &struct vfdi_status.
|
* @u.set_status_page.dma_addr: Base address for the &struct vfdi_status.
|
||||||
* This address must be such that the structure fits within a page.
|
* This address must be page-aligned and the PF may write up to a
|
||||||
|
* whole page (allowing for extension of the structure).
|
||||||
* @u.set_status_page.peer_page_count: Number of additional pages the VF
|
* @u.set_status_page.peer_page_count: Number of additional pages the VF
|
||||||
* has provided into which peer addresses may be DMAd.
|
* has provided into which peer addresses may be DMAd.
|
||||||
* @u.set_status_page.peer_page_addr: Array of DMA addresses of pages.
|
* @u.set_status_page.peer_page_addr: Array of DMA addresses of pages.
|
||||||
|
Reference in New Issue
Block a user