Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 88545
b: refs/heads/master
c: 28d52b3
h: refs/heads/master
i:
  88543: 0294ea8
v: v3
  • Loading branch information
Eli Cohen authored and Roland Dreier committed Apr 17, 2008
1 parent 21a4a47 commit 72c20b7
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2dd5716227878d5950988514a2cbabf72f7fc888
refs/heads/master: 28d52b3cd8d48ef0ff77d4a8a7a21fc2816bb0a5
6 changes: 6 additions & 0 deletions trunk/drivers/infiniband/ulp/ipoib/ipoib.h
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,11 @@ struct ipoib_cm_dev_priv {
int num_frags;
};

struct ipoib_ethtool_st {
u16 coalesce_usecs;
u16 max_coalesced_frames;
};

/*
* Device private locking: tx_lock protects members used in TX fast
* path (and we use LLTX so upper layers don't do extra locking).
Expand Down Expand Up @@ -320,6 +325,7 @@ struct ipoib_dev_priv {
struct dentry *path_dentry;
#endif
int hca_caps;
struct ipoib_ethtool_st ethtool;
};

struct ipoib_ah {
Expand Down
46 changes: 46 additions & 0 deletions trunk/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,55 @@ static void ipoib_get_drvinfo(struct net_device *netdev,
strncpy(drvinfo->driver, "ipoib", sizeof(drvinfo->driver) - 1);
}

static int ipoib_get_coalesce(struct net_device *dev,
struct ethtool_coalesce *coal)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);

coal->rx_coalesce_usecs = priv->ethtool.coalesce_usecs;
coal->tx_coalesce_usecs = priv->ethtool.coalesce_usecs;
coal->rx_max_coalesced_frames = priv->ethtool.max_coalesced_frames;
coal->tx_max_coalesced_frames = priv->ethtool.max_coalesced_frames;

return 0;
}

static int ipoib_set_coalesce(struct net_device *dev,
struct ethtool_coalesce *coal)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
int ret;

/*
* Since IPoIB uses a single CQ for both rx and tx, we assume
* that rx params dictate the configuration. These values are
* saved in the private data and returned when ipoib_get_coalesce()
* is called.
*/
if (coal->rx_coalesce_usecs > 0xffff ||
coal->rx_max_coalesced_frames > 0xffff)
return -EINVAL;

ret = ib_modify_cq(priv->cq, coal->rx_max_coalesced_frames,
coal->rx_coalesce_usecs);
if (ret && ret != -ENOSYS) {
ipoib_warn(priv, "failed modifying CQ (%d)\n", ret);
return ret;
}

coal->tx_coalesce_usecs = coal->rx_coalesce_usecs;
coal->tx_max_coalesced_frames = coal->rx_max_coalesced_frames;
priv->ethtool.coalesce_usecs = coal->rx_coalesce_usecs;
priv->ethtool.max_coalesced_frames = coal->rx_max_coalesced_frames;

return 0;
}

static const struct ethtool_ops ipoib_ethtool_ops = {
.get_drvinfo = ipoib_get_drvinfo,
.get_tso = ethtool_op_get_tso,
.get_coalesce = ipoib_get_coalesce,
.set_coalesce = ipoib_set_coalesce,
};

void ipoib_set_ethtool_ops(struct net_device *dev)
Expand Down

0 comments on commit 72c20b7

Please sign in to comment.