* [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter
@ 2015-05-28 3:23 Simon Horman
2015-05-28 5:11 ` Scott Feldman
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Simon Horman @ 2015-05-28 3:23 UTC (permalink / raw)
To: Scott Feldman, Jiri Pirko; +Cc: netdev, Simon Horman
The rocker (switch) of a rocker_port may be trivially obtained from
the latter it seems cleaner not to pass the former to a function when
the latter is being passed anyway.
Signed-off-by: Simon Horman <simon.horman@netronome.com>
---
drivers/net/ethernet/rocker/rocker.c | 122 ++++++++++++++---------------------
1 file changed, 48 insertions(+), 74 deletions(-)
diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
index 36f7edfc3c7a..23f3d572c52b 100644
--- a/drivers/net/ethernet/rocker/rocker.c
+++ b/drivers/net/ethernet/rocker/rocker.c
@@ -1172,11 +1172,11 @@ static void rocker_dma_rings_fini(struct rocker *rocker)
rocker_dma_ring_destroy(rocker, &rocker->cmd_ring);
}
-static int rocker_dma_rx_ring_skb_map(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+static int rocker_dma_rx_ring_skb_map(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
struct sk_buff *skb, size_t buf_len)
{
+ const struct rocker *rocker = rocker_port->rocker;
struct pci_dev *pdev = rocker->pdev;
dma_addr_t dma_handle;
@@ -1201,8 +1201,7 @@ static size_t rocker_port_rx_buf_len(const struct rocker_port *rocker_port)
return rocker_port->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
}
-static int rocker_dma_rx_ring_skb_alloc(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+static int rocker_dma_rx_ring_skb_alloc(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info)
{
struct net_device *dev = rocker_port->dev;
@@ -1219,8 +1218,7 @@ static int rocker_dma_rx_ring_skb_alloc(const struct rocker *rocker,
skb = netdev_alloc_skb_ip_align(dev, buf_len);
if (!skb)
return -ENOMEM;
- err = rocker_dma_rx_ring_skb_map(rocker, rocker_port, desc_info,
- skb, buf_len);
+ err = rocker_dma_rx_ring_skb_map(rocker_port, desc_info, skb, buf_len);
if (err) {
dev_kfree_skb_any(skb);
return err;
@@ -1257,15 +1255,15 @@ static void rocker_dma_rx_ring_skb_free(const struct rocker *rocker,
dev_kfree_skb_any(skb);
}
-static int rocker_dma_rx_ring_skbs_alloc(const struct rocker *rocker,
- const struct rocker_port *rocker_port)
+static int rocker_dma_rx_ring_skbs_alloc(const struct rocker_port *rocker_port)
{
const struct rocker_dma_ring_info *rx_ring = &rocker_port->rx_ring;
+ const struct rocker *rocker = rocker_port->rocker;
int i;
int err;
for (i = 0; i < rx_ring->size; i++) {
- err = rocker_dma_rx_ring_skb_alloc(rocker, rocker_port,
+ err = rocker_dma_rx_ring_skb_alloc(rocker_port,
&rx_ring->desc_info[i]);
if (err)
goto rollback;
@@ -1278,10 +1276,10 @@ rollback:
return err;
}
-static void rocker_dma_rx_ring_skbs_free(const struct rocker *rocker,
- const struct rocker_port *rocker_port)
+static void rocker_dma_rx_ring_skbs_free(const struct rocker_port *rocker_port)
{
const struct rocker_dma_ring_info *rx_ring = &rocker_port->rx_ring;
+ const struct rocker *rocker = rocker_port->rocker;
int i;
for (i = 0; i < rx_ring->size; i++)
@@ -1327,7 +1325,7 @@ static int rocker_port_dma_rings_init(struct rocker_port *rocker_port)
goto err_dma_rx_ring_bufs_alloc;
}
- err = rocker_dma_rx_ring_skbs_alloc(rocker, rocker_port);
+ err = rocker_dma_rx_ring_skbs_alloc(rocker_port);
if (err) {
netdev_err(rocker_port->dev, "failed to alloc rx dma ring skbs\n");
goto err_dma_rx_ring_skbs_alloc;
@@ -1353,7 +1351,7 @@ static void rocker_port_dma_rings_fini(struct rocker_port *rocker_port)
{
struct rocker *rocker = rocker_port->rocker;
- rocker_dma_rx_ring_skbs_free(rocker, rocker_port);
+ rocker_dma_rx_ring_skbs_free(rocker_port);
rocker_dma_ring_bufs_free(rocker, &rocker_port->rx_ring,
PCI_DMA_BIDIRECTIONAL);
rocker_dma_ring_destroy(rocker, &rocker_port->rx_ring);
@@ -1588,22 +1586,20 @@ static irqreturn_t rocker_rx_irq_handler(int irq, void *dev_id)
* Command interface
********************/
-typedef int (*rocker_cmd_prep_cb_t)(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+typedef int (*rocker_cmd_prep_cb_t)(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv);
-typedef int (*rocker_cmd_proc_cb_t)(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+typedef int (*rocker_cmd_proc_cb_t)(const struct rocker_port *rocker_port,
const struct rocker_desc_info *desc_info,
void *priv);
-static int rocker_cmd_exec(struct rocker *rocker,
- struct rocker_port *rocker_port,
+static int rocker_cmd_exec(struct rocker_port *rocker_port,
enum switchdev_trans trans,
rocker_cmd_prep_cb_t prepare, void *prepare_priv,
rocker_cmd_proc_cb_t process, void *process_priv)
{
+ struct rocker *rocker = rocker_port->rocker;
struct rocker_desc_info *desc_info;
struct rocker_wait *wait;
unsigned long flags;
@@ -1622,7 +1618,7 @@ static int rocker_cmd_exec(struct rocker *rocker,
goto out;
}
- err = prepare(rocker, rocker_port, desc_info, prepare_priv);
+ err = prepare(rocker_port, desc_info, prepare_priv);
if (err) {
spin_unlock_irqrestore(&rocker->cmd_ring_lock, flags);
goto out;
@@ -1644,7 +1640,7 @@ static int rocker_cmd_exec(struct rocker *rocker,
return err;
if (process)
- err = process(rocker, rocker_port, desc_info, process_priv);
+ err = process(rocker_port, desc_info, process_priv);
rocker_desc_gen_clear(desc_info);
out:
@@ -1653,8 +1649,7 @@ out:
}
static int
-rocker_cmd_get_port_settings_prep(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+rocker_cmd_get_port_settings_prep(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv)
{
@@ -1674,8 +1669,7 @@ rocker_cmd_get_port_settings_prep(const struct rocker *rocker,
}
static int
-rocker_cmd_get_port_settings_ethtool_proc(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+rocker_cmd_get_port_settings_ethtool_proc(const struct rocker_port *rocker_port,
const struct rocker_desc_info *desc_info,
void *priv)
{
@@ -1713,8 +1707,7 @@ rocker_cmd_get_port_settings_ethtool_proc(const struct rocker *rocker,
}
static int
-rocker_cmd_get_port_settings_macaddr_proc(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+rocker_cmd_get_port_settings_macaddr_proc(const struct rocker_port *rocker_port,
const struct rocker_desc_info *desc_info,
void *priv)
{
@@ -1746,8 +1739,7 @@ struct port_name {
};
static int
-rocker_cmd_get_port_settings_phys_name_proc(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+rocker_cmd_get_port_settings_phys_name_proc(const struct rocker_port *rocker_port,
const struct rocker_desc_info *desc_info,
void *priv)
{
@@ -1788,8 +1780,7 @@ rocker_cmd_get_port_settings_phys_name_proc(const struct rocker *rocker,
}
static int
-rocker_cmd_set_port_settings_ethtool_prep(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+rocker_cmd_set_port_settings_ethtool_prep(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv)
{
@@ -1819,8 +1810,7 @@ rocker_cmd_set_port_settings_ethtool_prep(const struct rocker *rocker,
}
static int
-rocker_cmd_set_port_settings_macaddr_prep(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+rocker_cmd_set_port_settings_macaddr_prep(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv)
{
@@ -1844,8 +1834,7 @@ rocker_cmd_set_port_settings_macaddr_prep(const struct rocker *rocker,
}
static int
-rocker_cmd_set_port_learning_prep(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+rocker_cmd_set_port_learning_prep(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv)
{
@@ -1870,8 +1859,7 @@ rocker_cmd_set_port_learning_prep(const struct rocker *rocker,
static int rocker_cmd_get_port_settings_ethtool(struct rocker_port *rocker_port,
struct ethtool_cmd *ecmd)
{
- return rocker_cmd_exec(rocker_port->rocker, rocker_port,
- SWITCHDEV_TRANS_NONE,
+ return rocker_cmd_exec(rocker_port, SWITCHDEV_TRANS_NONE,
rocker_cmd_get_port_settings_prep, NULL,
rocker_cmd_get_port_settings_ethtool_proc,
ecmd);
@@ -1880,8 +1868,7 @@ static int rocker_cmd_get_port_settings_ethtool(struct rocker_port *rocker_port,
static int rocker_cmd_get_port_settings_macaddr(struct rocker_port *rocker_port,
unsigned char *macaddr)
{
- return rocker_cmd_exec(rocker_port->rocker, rocker_port,
- SWITCHDEV_TRANS_NONE,
+ return rocker_cmd_exec(rocker_port, SWITCHDEV_TRANS_NONE,
rocker_cmd_get_port_settings_prep, NULL,
rocker_cmd_get_port_settings_macaddr_proc,
macaddr);
@@ -1890,8 +1877,7 @@ static int rocker_cmd_get_port_settings_macaddr(struct rocker_port *rocker_port,
static int rocker_cmd_set_port_settings_ethtool(struct rocker_port *rocker_port,
struct ethtool_cmd *ecmd)
{
- return rocker_cmd_exec(rocker_port->rocker, rocker_port,
- SWITCHDEV_TRANS_NONE,
+ return rocker_cmd_exec(rocker_port, SWITCHDEV_TRANS_NONE,
rocker_cmd_set_port_settings_ethtool_prep,
ecmd, NULL, NULL);
}
@@ -1899,8 +1885,7 @@ static int rocker_cmd_set_port_settings_ethtool(struct rocker_port *rocker_port,
static int rocker_cmd_set_port_settings_macaddr(struct rocker_port *rocker_port,
unsigned char *macaddr)
{
- return rocker_cmd_exec(rocker_port->rocker, rocker_port,
- SWITCHDEV_TRANS_NONE,
+ return rocker_cmd_exec(rocker_port, SWITCHDEV_TRANS_NONE,
rocker_cmd_set_port_settings_macaddr_prep,
macaddr, NULL, NULL);
}
@@ -1908,7 +1893,7 @@ static int rocker_cmd_set_port_settings_macaddr(struct rocker_port *rocker_port,
static int rocker_port_set_learning(struct rocker_port *rocker_port,
enum switchdev_trans trans)
{
- return rocker_cmd_exec(rocker_port->rocker, rocker_port, trans,
+ return rocker_cmd_exec(rocker_port, trans,
rocker_cmd_set_port_learning_prep,
NULL, NULL, NULL);
}
@@ -2114,8 +2099,7 @@ rocker_cmd_flow_tbl_add_acl(struct rocker_desc_info *desc_info,
return 0;
}
-static int rocker_cmd_flow_tbl_add(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+static int rocker_cmd_flow_tbl_add(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv)
{
@@ -2172,8 +2156,7 @@ static int rocker_cmd_flow_tbl_add(const struct rocker *rocker,
return 0;
}
-static int rocker_cmd_flow_tbl_del(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+static int rocker_cmd_flow_tbl_del(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv)
{
@@ -2282,8 +2265,7 @@ rocker_cmd_group_tbl_add_l3_unicast(struct rocker_desc_info *desc_info,
return 0;
}
-static int rocker_cmd_group_tbl_add(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+static int rocker_cmd_group_tbl_add(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv)
{
@@ -2328,8 +2310,7 @@ static int rocker_cmd_group_tbl_add(const struct rocker *rocker,
return 0;
}
-static int rocker_cmd_group_tbl_del(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+static int rocker_cmd_group_tbl_del(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv)
{
@@ -2460,8 +2441,7 @@ static int rocker_flow_tbl_add(struct rocker_port *rocker_port,
spin_unlock_irqrestore(&rocker->flow_tbl_lock, flags);
- return rocker_cmd_exec(rocker, rocker_port, trans,
- rocker_cmd_flow_tbl_add,
+ return rocker_cmd_exec(rocker_port, trans, rocker_cmd_flow_tbl_add,
found, NULL, NULL);
}
@@ -2492,7 +2472,7 @@ static int rocker_flow_tbl_del(struct rocker_port *rocker_port,
rocker_port_kfree(trans, match);
if (found) {
- err = rocker_cmd_exec(rocker, rocker_port, trans,
+ err = rocker_cmd_exec(rocker_port, trans,
rocker_cmd_flow_tbl_del,
found, NULL, NULL);
rocker_port_kfree(trans, found);
@@ -2782,8 +2762,7 @@ static int rocker_group_tbl_add(struct rocker_port *rocker_port,
spin_unlock_irqrestore(&rocker->group_tbl_lock, flags);
- return rocker_cmd_exec(rocker, rocker_port, trans,
- rocker_cmd_group_tbl_add,
+ return rocker_cmd_exec(rocker_port, trans, rocker_cmd_group_tbl_add,
found, NULL, NULL);
}
@@ -2811,7 +2790,7 @@ static int rocker_group_tbl_del(struct rocker_port *rocker_port,
rocker_group_tbl_entry_free(trans, match);
if (found) {
- err = rocker_cmd_exec(rocker, rocker_port, trans,
+ err = rocker_cmd_exec(rocker_port, trans,
rocker_cmd_group_tbl_del,
found, NULL, NULL);
rocker_group_tbl_entry_free(trans, found);
@@ -4219,8 +4198,7 @@ static int rocker_port_get_phys_port_name(struct net_device *dev,
struct port_name name = { .buf = buf, .len = len };
int err;
- err = rocker_cmd_exec(rocker_port->rocker, rocker_port,
- SWITCHDEV_TRANS_NONE,
+ err = rocker_cmd_exec(rocker_port, SWITCHDEV_TRANS_NONE,
rocker_cmd_get_port_settings_prep, NULL,
rocker_cmd_get_port_settings_phys_name_proc,
&name);
@@ -4600,8 +4578,7 @@ static void rocker_port_get_strings(struct net_device *netdev, u32 stringset,
}
static int
-rocker_cmd_get_port_stats_prep(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+rocker_cmd_get_port_stats_prep(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info,
void *priv)
{
@@ -4625,8 +4602,7 @@ rocker_cmd_get_port_stats_prep(const struct rocker *rocker,
}
static int
-rocker_cmd_get_port_stats_ethtool_proc(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+rocker_cmd_get_port_stats_ethtool_proc(const struct rocker_port *rocker_port,
const struct rocker_desc_info *desc_info,
void *priv)
{
@@ -4666,8 +4642,7 @@ rocker_cmd_get_port_stats_ethtool_proc(const struct rocker *rocker,
static int rocker_cmd_get_port_stats_ethtool(struct rocker_port *rocker_port,
void *priv)
{
- return rocker_cmd_exec(rocker_port->rocker, rocker_port,
- SWITCHDEV_TRANS_NONE,
+ return rocker_cmd_exec(rocker_port, SWITCHDEV_TRANS_NONE,
rocker_cmd_get_port_stats_prep, NULL,
rocker_cmd_get_port_stats_ethtool_proc,
priv);
@@ -4754,12 +4729,12 @@ static int rocker_port_poll_tx(struct napi_struct *napi, int budget)
return 0;
}
-static int rocker_port_rx_proc(const struct rocker *rocker,
- const struct rocker_port *rocker_port,
+static int rocker_port_rx_proc(const struct rocker_port *rocker_port,
struct rocker_desc_info *desc_info)
{
const struct rocker_tlv *attrs[ROCKER_TLV_RX_MAX + 1];
struct sk_buff *skb = rocker_desc_cookie_ptr_get(desc_info);
+ const struct rocker *rocker = rocker_port->rocker;
size_t rx_len;
if (!skb)
@@ -4780,7 +4755,7 @@ static int rocker_port_rx_proc(const struct rocker *rocker,
netif_receive_skb(skb);
- return rocker_dma_rx_ring_skb_alloc(rocker, rocker_port, desc_info);
+ return rocker_dma_rx_ring_skb_alloc(rocker_port, desc_info);
}
static struct rocker_port *rocker_port_napi_rx_get(struct napi_struct *napi)
@@ -4805,8 +4780,7 @@ static int rocker_port_poll_rx(struct napi_struct *napi, int budget)
netdev_err(rocker_port->dev, "rx desc received with err %d\n",
err);
} else {
- err = rocker_port_rx_proc(rocker, rocker_port,
- desc_info);
+ err = rocker_port_rx_proc(rocker_port, desc_info);
if (err && net_ratelimit())
netdev_err(rocker_port->dev, "rx processing failed with err %d\n",
err);
@@ -4858,9 +4832,9 @@ static void rocker_remove_ports(const struct rocker *rocker)
kfree(rocker->ports);
}
-static void rocker_port_dev_addr_init(const struct rocker *rocker,
- struct rocker_port *rocker_port)
+static void rocker_port_dev_addr_init(struct rocker_port *rocker_port)
{
+ const struct rocker *rocker = rocker_port->rocker;
const struct pci_dev *pdev = rocker->pdev;
int err;
@@ -4890,7 +4864,7 @@ static int rocker_probe_port(struct rocker *rocker, unsigned int port_number)
rocker_port->brport_flags = BR_LEARNING | BR_LEARNING_SYNC;
INIT_LIST_HEAD(&rocker_port->trans_mem);
- rocker_port_dev_addr_init(rocker, rocker_port);
+ rocker_port_dev_addr_init(rocker_port);
dev->netdev_ops = &rocker_port_netdev_ops;
dev->ethtool_ops = &rocker_port_ethtool_ops;
dev->switchdev_ops = &rocker_port_switchdev_ops;
--
2.1.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter
2015-05-28 3:23 [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter Simon Horman
@ 2015-05-28 5:11 ` Scott Feldman
2015-05-28 6:15 ` Jiri Pirko
2015-05-28 9:18 ` David Laight
2 siblings, 0 replies; 7+ messages in thread
From: Scott Feldman @ 2015-05-28 5:11 UTC (permalink / raw)
To: Simon Horman; +Cc: Jiri Pirko, Netdev
On Wed, May 27, 2015 at 8:23 PM, Simon Horman
<simon.horman@netronome.com> wrote:
> The rocker (switch) of a rocker_port may be trivially obtained from
> the latter it seems cleaner not to pass the former to a function when
> the latter is being passed anyway.
>
> Signed-off-by: Simon Horman <simon.horman@netronome.com>
+1, thanks Simon.
Acked-by: Scott Feldman <sfeldma@gmail.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter
2015-05-28 3:23 [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter Simon Horman
2015-05-28 5:11 ` Scott Feldman
@ 2015-05-28 6:15 ` Jiri Pirko
2015-05-28 8:30 ` Simon Horman
2015-05-28 9:18 ` David Laight
2 siblings, 1 reply; 7+ messages in thread
From: Jiri Pirko @ 2015-05-28 6:15 UTC (permalink / raw)
To: Simon Horman; +Cc: Scott Feldman, netdev
Thu, May 28, 2015 at 05:23:17AM CEST, simon.horman@netronome.com wrote:
>The rocker (switch) of a rocker_port may be trivially obtained from
>the latter it seems cleaner not to pass the former to a function when
>the latter is being passed anyway.
I don't understand reason for this patch. I like it the way it is I must
say. + you introduce possible multiple dereference in a row in call-chain.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter
2015-05-28 6:15 ` Jiri Pirko
@ 2015-05-28 8:30 ` Simon Horman
0 siblings, 0 replies; 7+ messages in thread
From: Simon Horman @ 2015-05-28 8:30 UTC (permalink / raw)
To: Jiri Pirko; +Cc: Scott Feldman, netdev
On Thu, May 28, 2015 at 08:15:42AM +0200, Jiri Pirko wrote:
> Thu, May 28, 2015 at 05:23:17AM CEST, simon.horman@netronome.com wrote:
> >The rocker (switch) of a rocker_port may be trivially obtained from
> >the latter it seems cleaner not to pass the former to a function when
> >the latter is being passed anyway.
>
> I don't understand reason for this patch. I like it the way it is I must
> say. + you introduce possible multiple dereference in a row in call-chain.
My main motivation is that it seems cleaner. I marked it as an RFC
as I wasn't sure if there was a particular reason that thins are how they
are. I have no objection to leaving things as they are if thats the
consensus.
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter
2015-05-28 3:23 [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter Simon Horman
2015-05-28 5:11 ` Scott Feldman
2015-05-28 6:15 ` Jiri Pirko
@ 2015-05-28 9:18 ` David Laight
2015-05-28 15:53 ` Scott Feldman
2 siblings, 1 reply; 7+ messages in thread
From: David Laight @ 2015-05-28 9:18 UTC (permalink / raw)
To: 'Simon Horman', Scott Feldman, Jiri Pirko; +Cc: netdev@vger.kernel.org
From: Simon Horman
> Sent: 28 May 2015 04:23
> The rocker (switch) of a rocker_port may be trivially obtained from
> the latter it seems cleaner not to pass the former to a function when
> the latter is being passed anyway.
If the arguments are passed in registers (they almost certainly are)
or the function is inlined (possible since they are static) and
the calling code already has both values in registers then
passing both values saves a memory read inside the called code.
So on 'hot paths' it probably makes sense to pass both values.
David
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter
2015-05-28 9:18 ` David Laight
@ 2015-05-28 15:53 ` Scott Feldman
2015-06-01 4:25 ` Simon Horman
0 siblings, 1 reply; 7+ messages in thread
From: Scott Feldman @ 2015-05-28 15:53 UTC (permalink / raw)
To: David Laight; +Cc: Simon Horman, Jiri Pirko, netdev@vger.kernel.org
On Thu, May 28, 2015 at 2:18 AM, David Laight <David.Laight@aculab.com> wrote:
> From: Simon Horman
>> Sent: 28 May 2015 04:23
>> The rocker (switch) of a rocker_port may be trivially obtained from
>> the latter it seems cleaner not to pass the former to a function when
>> the latter is being passed anyway.
>
> If the arguments are passed in registers (they almost certainly are)
> or the function is inlined (possible since they are static) and
> the calling code already has both values in registers then
> passing both values saves a memory read inside the called code.
>
> So on 'hot paths' it probably makes sense to pass both values.
Agreed, and Simon's patch is 99% cold path, so I'd rather trade
clarity in the code than saving a nanosec in a driver cold path.
Simon, would you respin, remove rocker_port_rx_proc() changes, remove
RFC, and add my ack? rocker_port_rx_proc() was the only hot path case
I found.
-scott
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter
2015-05-28 15:53 ` Scott Feldman
@ 2015-06-01 4:25 ` Simon Horman
0 siblings, 0 replies; 7+ messages in thread
From: Simon Horman @ 2015-06-01 4:25 UTC (permalink / raw)
To: Scott Feldman; +Cc: David Laight, Jiri Pirko, netdev@vger.kernel.org
On Thu, May 28, 2015 at 08:53:20AM -0700, Scott Feldman wrote:
> On Thu, May 28, 2015 at 2:18 AM, David Laight <David.Laight@aculab.com> wrote:
> > From: Simon Horman
> >> Sent: 28 May 2015 04:23
> >> The rocker (switch) of a rocker_port may be trivially obtained from
> >> the latter it seems cleaner not to pass the former to a function when
> >> the latter is being passed anyway.
> >
> > If the arguments are passed in registers (they almost certainly are)
> > or the function is inlined (possible since they are static) and
> > the calling code already has both values in registers then
> > passing both values saves a memory read inside the called code.
> >
> > So on 'hot paths' it probably makes sense to pass both values.
>
> Agreed, and Simon's patch is 99% cold path, so I'd rather trade
> clarity in the code than saving a nanosec in a driver cold path.
>
> Simon, would you respin, remove rocker_port_rx_proc() changes, remove
> RFC, and add my ack? rocker_port_rx_proc() was the only hot path case
> I found.
Sure, that seems reasonable to me. I have done so.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-06-01 4:25 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-28 3:23 [PATCH/RFC net-next] rocker: remove rocker parameter from functions that have rocker_port parameter Simon Horman
2015-05-28 5:11 ` Scott Feldman
2015-05-28 6:15 ` Jiri Pirko
2015-05-28 8:30 ` Simon Horman
2015-05-28 9:18 ` David Laight
2015-05-28 15:53 ` Scott Feldman
2015-06-01 4:25 ` Simon Horman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).