Message ID | 1443993949-3915-11-git-send-email-jiri@resnulli.us |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
From: Jiri Pirko > Sent: 04 October 2015 22:26 > Be consistent with the rest of the setting functions, and pass > "learning" as a bool function parameter. ... > diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c > index fb7e8c2..d9329a7 100644 > --- a/drivers/net/ethernet/rocker/rocker_main.c > +++ b/drivers/net/ethernet/rocker/rocker_main.c > @@ -1634,6 +1634,7 @@ rocker_cmd_set_port_learning_prep(const struct rocker_port *rocker_port, > struct rocker_desc_info *desc_info, > void *priv) > { > + bool learning = *(int *)priv; ... > static int rocker_port_set_learning(struct rocker_port *rocker_port, > - struct switchdev_trans *trans) > + struct switchdev_trans *trans, > + bool learning) > { > return rocker_cmd_exec(rocker_port, trans, 0, > rocker_cmd_set_port_learning_prep, > - NULL, NULL, NULL); > + &learning, NULL, NULL); This hit my 'casting between integer pointer types' bell. It is clearly wrong if 'sizeof (bool) != sizeof (int)'. It is much safer to only ever cast structure types to/from 'void *'. David -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Mon, Oct 05, 2015 at 05:16:31PM CEST, David.Laight@ACULAB.COM wrote: >From: Jiri Pirko >> Sent: 04 October 2015 22:26 >> Be consistent with the rest of the setting functions, and pass >> "learning" as a bool function parameter. >... >> diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c >> index fb7e8c2..d9329a7 100644 >> --- a/drivers/net/ethernet/rocker/rocker_main.c >> +++ b/drivers/net/ethernet/rocker/rocker_main.c >> @@ -1634,6 +1634,7 @@ rocker_cmd_set_port_learning_prep(const struct rocker_port *rocker_port, >> struct rocker_desc_info *desc_info, >> void *priv) >> { >> + bool learning = *(int *)priv; >... >> static int rocker_port_set_learning(struct rocker_port *rocker_port, >> - struct switchdev_trans *trans) >> + struct switchdev_trans *trans, >> + bool learning) >> { >> return rocker_cmd_exec(rocker_port, trans, 0, >> rocker_cmd_set_port_learning_prep, >> - NULL, NULL, NULL); >> + &learning, NULL, NULL); > >This hit my 'casting between integer pointer types' bell. >It is clearly wrong if 'sizeof (bool) != sizeof (int)'. Oh, I c&p error - I'll fix "bool learning = *(int *)priv;" to: "bool learning = *(bool *)priv;" -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c index fb7e8c2..d9329a7 100644 --- a/drivers/net/ethernet/rocker/rocker_main.c +++ b/drivers/net/ethernet/rocker/rocker_main.c @@ -1634,6 +1634,7 @@ rocker_cmd_set_port_learning_prep(const struct rocker_port *rocker_port, struct rocker_desc_info *desc_info, void *priv) { + bool learning = *(int *)priv; struct rocker_tlv *cmd_info; if (rocker_tlv_put_u16(desc_info, ROCKER_TLV_CMD_TYPE, @@ -1646,7 +1647,7 @@ rocker_cmd_set_port_learning_prep(const struct rocker_port *rocker_port, rocker_port->pport)) return -EMSGSIZE; if (rocker_tlv_put_u8(desc_info, ROCKER_TLV_CMD_PORT_SETTINGS_LEARNING, - !!(rocker_port->brport_flags & BR_LEARNING))) + learning)) return -EMSGSIZE; rocker_tlv_nest_end(desc_info, cmd_info); return 0; @@ -1719,11 +1720,12 @@ static int rocker_cmd_set_port_settings_mtu(struct rocker_port *rocker_port, } static int rocker_port_set_learning(struct rocker_port *rocker_port, - struct switchdev_trans *trans) + struct switchdev_trans *trans, + bool learning) { return rocker_cmd_exec(rocker_port, trans, 0, rocker_cmd_set_port_learning_prep, - NULL, NULL, NULL); + &learning, NULL, NULL); } static int rocker_cmd_set_port_settings_mode(struct rocker_port *rocker_port, @@ -4608,7 +4610,8 @@ static int rocker_port_brport_flags_set(struct rocker_port *rocker_port, orig_flags = rocker_port->brport_flags; rocker_port->brport_flags = brport_flags; if ((orig_flags ^ rocker_port->brport_flags) & BR_LEARNING) - err = rocker_port_set_learning(rocker_port, trans); + err = rocker_port_set_learning(rocker_port, trans, + !!(rocker_port->brport_flags & BR_LEARNING)); if (switchdev_trans_ph_prepare(trans)) rocker_port->brport_flags = orig_flags; @@ -5365,7 +5368,8 @@ static int rocker_probe_port(struct rocker *rocker, unsigned int port_number) switchdev_port_fwd_mark_set(rocker_port->dev, NULL, false); - rocker_port_set_learning(rocker_port, NULL); + rocker_port_set_learning(rocker_port, NULL, + !!(rocker_port->brport_flags & BR_LEARNING)); err = rocker_port_ig_tbl(rocker_port, NULL, 0); if (err) {