sfc: Revert SRIOV changes.

This reverts commits:

d92916f71a ("sfc: Own header for nic-specific sriov functions,")
25672dba95 ("sfc: Enable VF's via a write to the sysfs file
 sriov_numvfs")

As they break the build with SRIOV disabled and there is no
easy way to fix it the way things are arranged.

Reported-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller
2015-04-08 16:30:01 -04:00
parent c1f8667677
commit 51df60f5a4
16 changed files with 203 additions and 450 deletions

View File

@@ -16,7 +16,6 @@
#include "filter.h"
#include "mcdi_pcol.h"
#include "farch_regs.h"
#include "siena_sriov.h"
#include "vfdi.h"
/* Number of longs required to track all the VIs in a VF */
@@ -1051,7 +1050,6 @@ static const struct efx_channel_type efx_siena_sriov_channel_type = {
void efx_siena_sriov_probe(struct efx_nic *efx)
{
#ifdef CONFIG_SFC_SRIOV
unsigned count;
if (!max_vfs)
@@ -1066,10 +1064,8 @@ void efx_siena_sriov_probe(struct efx_nic *efx)
efx->vf_count = count;
efx->extra_channel_type[EFX_EXTRA_CHANNEL_IOV] = &efx_siena_sriov_channel_type;
#endif
}
#ifdef CONFIG_SFC_SRIOV
/* Copy the list of individual addresses into the vfdi_status.peers
* array and auxiliary pages, protected by %local_lock. Drop that lock
* and then broadcast the address list to every VF.
@@ -1280,11 +1276,9 @@ fail:
efx_siena_sriov_vfs_fini(efx);
return rc;
}
#endif
int efx_siena_sriov_init(struct efx_nic *efx)
{
#ifdef CONFIG_SFC_SRIOV
struct net_device *net_dev = efx->net_dev;
struct siena_nic_data *nic_data = efx->nic_data;
struct vfdi_status *vfdi_status;
@@ -1363,14 +1357,10 @@ fail_status:
efx_siena_sriov_cmd(efx, false, NULL, NULL);
fail_cmd:
return rc;
#else /* CONFIG_SFC_SRIOV */
return -EOPNOTSUPP;
#endif
}
void efx_siena_sriov_fini(struct efx_nic *efx)
{
#ifdef CONFIG_SFC_SRIOV
struct efx_vf *vf;
unsigned int pos;
struct siena_nic_data *nic_data = efx->nic_data;
@@ -1401,12 +1391,10 @@ void efx_siena_sriov_fini(struct efx_nic *efx)
kfree(efx->vf);
efx_nic_free_buffer(efx, &nic_data->vfdi_status);
efx_siena_sriov_cmd(efx, false, NULL, NULL);
#endif /* CONFIG_SFC_SRIOV*/
}
void efx_siena_sriov_event(struct efx_channel *channel, efx_qword_t *event)
{
#ifdef CONFIG_SFC_SRIOV
struct efx_nic *efx = channel->efx;
struct efx_vf *vf;
unsigned qid, seq, type, data;
@@ -1460,12 +1448,10 @@ error:
/* Reset the request and sequence number */
vf->req_type = VFDI_EV_TYPE_REQ_WORD0;
vf->req_seqno = seq + 1;
#endif /* CONFIG_SFC_SRIOV */
}
void efx_siena_sriov_flr(struct efx_nic *efx, unsigned vf_i)
{
#ifdef CONFIG_SFC_SRIOV
struct efx_vf *vf;
if (vf_i > efx->vf_init_count)
@@ -1479,12 +1465,10 @@ void efx_siena_sriov_flr(struct efx_nic *efx, unsigned vf_i)
efx_vfdi_flush_clear(vf);
vf->evq0_count = 0;
#endif /* CONFIG_SFC_SRIOV */
}
void efx_siena_sriov_mac_address_changed(struct efx_nic *efx)
{
#ifdef CONFIG_SFC_SRIOV
struct siena_nic_data *nic_data = efx->nic_data;
struct vfdi_status *vfdi_status = nic_data->vfdi_status.addr;
@@ -1493,12 +1477,10 @@ void efx_siena_sriov_mac_address_changed(struct efx_nic *efx)
ether_addr_copy(vfdi_status->peers[0].mac_addr,
efx->net_dev->dev_addr);
queue_work(vfdi_workqueue, &nic_data->peer_work);
#endif /* CONFIG_SFC_SRIOV */
}
void efx_siena_sriov_tx_flush_done(struct efx_nic *efx, efx_qword_t *event)
{
#ifdef CONFIG_SFC_SRIOV
struct efx_vf *vf;
unsigned queue, qid;
@@ -1514,12 +1496,10 @@ void efx_siena_sriov_tx_flush_done(struct efx_nic *efx, efx_qword_t *event)
if (efx_vfdi_flush_wake(vf))
wake_up(&vf->flush_waitq);
#endif /* CONFIG_SFC_SRIOV */
}
void efx_siena_sriov_rx_flush_done(struct efx_nic *efx, efx_qword_t *event)
{
#ifdef CONFIG_SFC_SRIOV
struct efx_vf *vf;
unsigned ev_failed, queue, qid;
@@ -1540,13 +1520,11 @@ void efx_siena_sriov_rx_flush_done(struct efx_nic *efx, efx_qword_t *event)
}
if (efx_vfdi_flush_wake(vf))
wake_up(&vf->flush_waitq);
#endif /* CONFIG_SFC_SRIOV */
}
/* Called from napi. Schedule the reset work item */
void efx_siena_sriov_desc_fetch_err(struct efx_nic *efx, unsigned dmaq)
{
#ifdef CONFIG_SFC_SRIOV
struct efx_vf *vf;
unsigned int rel;
@@ -1558,13 +1536,11 @@ void efx_siena_sriov_desc_fetch_err(struct efx_nic *efx, unsigned dmaq)
"VF %d DMA Q %d reports descriptor fetch error.\n",
vf->index, rel);
queue_work(vfdi_workqueue, &vf->reset_work);
#endif /* CONFIG_SFC_SRIOV */
}
/* Reset all VFs */
void efx_siena_sriov_reset(struct efx_nic *efx)
{
#ifdef CONFIG_SFC_SRIOV
unsigned int vf_i;
struct efx_buffer buf;
struct efx_vf *vf;
@@ -1586,12 +1562,10 @@ void efx_siena_sriov_reset(struct efx_nic *efx)
}
efx_nic_free_buffer(efx, &buf);
#endif /* CONFIG_SFC_SRIOV */
}
int efx_init_sriov(void)
{
#ifdef CONFIG_SFC_SRIOV
/* A single threaded workqueue is sufficient. efx_siena_sriov_vfdi() and
* efx_siena_sriov_peer_work() spend almost all their time sleeping for
* MCDI to complete anyway
@@ -1599,20 +1573,18 @@ int efx_init_sriov(void)
vfdi_workqueue = create_singlethread_workqueue("sfc_vfdi");
if (!vfdi_workqueue)
return -ENOMEM;
#endif
return 0;
}
void efx_fini_sriov(void)
{
#ifdef CONFIG_SFC_SRIOV
destroy_workqueue(vfdi_workqueue);
#endif
}
#ifdef CONFIG_SFC_SRIOV
int efx_siena_sriov_set_vf_mac(struct efx_nic *efx, int vf_i, u8 *mac)
int efx_siena_sriov_set_vf_mac(struct net_device *net_dev, int vf_i, u8 *mac)
{
struct efx_nic *efx = netdev_priv(net_dev);
struct efx_vf *vf;
if (vf_i >= efx->vf_init_count)
@@ -1627,9 +1599,10 @@ int efx_siena_sriov_set_vf_mac(struct efx_nic *efx, int vf_i, u8 *mac)
return 0;
}
int efx_siena_sriov_set_vf_vlan(struct efx_nic *efx, int vf_i,
int efx_siena_sriov_set_vf_vlan(struct net_device *net_dev, int vf_i,
u16 vlan, u8 qos)
{
struct efx_nic *efx = netdev_priv(net_dev);
struct efx_vf *vf;
u16 tci;
@@ -1646,9 +1619,10 @@ int efx_siena_sriov_set_vf_vlan(struct efx_nic *efx, int vf_i,
return 0;
}
int efx_siena_sriov_set_vf_spoofchk(struct efx_nic *efx, int vf_i,
int efx_siena_sriov_set_vf_spoofchk(struct net_device *net_dev, int vf_i,
bool spoofchk)
{
struct efx_nic *efx = netdev_priv(net_dev);
struct efx_vf *vf;
int rc;
@@ -1669,9 +1643,10 @@ int efx_siena_sriov_set_vf_spoofchk(struct efx_nic *efx, int vf_i,
return rc;
}
int efx_siena_sriov_get_vf_config(struct efx_nic *efx, int vf_i,
int efx_siena_sriov_get_vf_config(struct net_device *net_dev, int vf_i,
struct ifla_vf_info *ivi)
{
struct efx_nic *efx = netdev_priv(net_dev);
struct efx_vf *vf;
u16 tci;
@@ -1691,18 +1666,3 @@ int efx_siena_sriov_get_vf_config(struct efx_nic *efx, int vf_i,
return 0;
}
#endif /* CONFIG_SFC_SRIOV */
bool efx_siena_sriov_wanted(struct efx_nic *efx)
{
#ifdef CONFIG_SFC_SRIOV
return efx->vf_count != 0;
#else
return false;
#endif
}
int efx_siena_sriov_configure(struct efx_nic *efx, int num_vfs)
{
return 0;
}