Message ID | 20200706091842.3324565-2-horatiu.vultur@microchip.com |
---|---|
State | Changes Requested |
Delegated to: | David Miller |
Headers | show |
Series | bridge: mrp: Add support for interconnect ring | expand |
From: Horatiu Vultur <horatiu.vultur@microchip.com> Date: Mon, 6 Jul 2020 11:18:31 +0200 > +/* SWITCHDEV_OBJ_ID_IN_TEST_MRP */ > +struct switchdev_obj_in_test_mrp { > + struct switchdev_obj obj; > + /* The value is in us and a value of 0 represents to stop */ > + u32 interval; > + u8 max_miss; > + u32 in_id; > + u32 period; > +}; ... > +#define SWITCHDEV_OBJ_IN_TEST_MRP(OBJ) \ > + container_of((OBJ), struct switchdev_obj_in_test_mrp, obj) > + > +/* SWICHDEV_OBJ_ID_IN_ROLE_MRP */ > +struct switchdev_obj_in_role_mrp { > + struct switchdev_obj obj; > + u16 in_id; > + u32 ring_id; > + u8 in_role; > + struct net_device *i_port; > +}; ... > +#define SWITCHDEV_OBJ_IN_ROLE_MRP(OBJ) \ > + container_of((OBJ), struct switchdev_obj_in_role_mrp, obj) > + > +struct switchdev_obj_in_state_mrp { > + struct switchdev_obj obj; > + u8 in_state; > + u32 in_id; > +}; Please arrange these structure members in a more optimal order so that the resulting object is denser. For example, in switchdev_obj_in_role_mrp if you order it such that: > + u32 ring_id; > + u16 in_id; > + u8 in_role; You'll have less wasted space from padding. Use 'pahole' or similar tools to guide you.
The 07/06/2020 12:26, David Miller wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > From: Horatiu Vultur <horatiu.vultur@microchip.com> > Date: Mon, 6 Jul 2020 11:18:31 +0200 > > > +/* SWITCHDEV_OBJ_ID_IN_TEST_MRP */ > > +struct switchdev_obj_in_test_mrp { > > + struct switchdev_obj obj; > > + /* The value is in us and a value of 0 represents to stop */ > > + u32 interval; > > + u8 max_miss; > > + u32 in_id; > > + u32 period; > > +}; > ... > > +#define SWITCHDEV_OBJ_IN_TEST_MRP(OBJ) \ > > + container_of((OBJ), struct switchdev_obj_in_test_mrp, obj) > > + > > +/* SWICHDEV_OBJ_ID_IN_ROLE_MRP */ > > +struct switchdev_obj_in_role_mrp { > > + struct switchdev_obj obj; > > + u16 in_id; > > + u32 ring_id; > > + u8 in_role; > > + struct net_device *i_port; > > +}; > ... > > +#define SWITCHDEV_OBJ_IN_ROLE_MRP(OBJ) \ > > + container_of((OBJ), struct switchdev_obj_in_role_mrp, obj) > > + > > +struct switchdev_obj_in_state_mrp { > > + struct switchdev_obj obj; > > + u8 in_state; > > + u32 in_id; > > +}; > > Please arrange these structure members in a more optimal order so that > the resulting object is denser. For example, in switchdev_obj_in_role_mrp > if you order it such that: > > > + u32 ring_id; > > + u16 in_id; > > + u8 in_role; > > You'll have less wasted space from padding. > > Use 'pahole' or similar tools to guide you. Thanks, I will try to use 'pahole' and see how they need to be arranged.
diff --git a/include/net/switchdev.h b/include/net/switchdev.h index b8c059b4e06d9..ffa2706d8bc6f 100644 --- a/include/net/switchdev.h +++ b/include/net/switchdev.h @@ -76,6 +76,10 @@ enum switchdev_obj_id { SWITCHDEV_OBJ_ID_RING_TEST_MRP, SWITCHDEV_OBJ_ID_RING_ROLE_MRP, SWITCHDEV_OBJ_ID_RING_STATE_MRP, + SWITCHDEV_OBJ_ID_IN_TEST_MRP, + SWITCHDEV_OBJ_ID_IN_ROLE_MRP, + SWITCHDEV_OBJ_ID_IN_STATE_MRP, + #endif }; @@ -155,6 +159,40 @@ struct switchdev_obj_ring_state_mrp { #define SWITCHDEV_OBJ_RING_STATE_MRP(OBJ) \ container_of((OBJ), struct switchdev_obj_ring_state_mrp, obj) +/* SWITCHDEV_OBJ_ID_IN_TEST_MRP */ +struct switchdev_obj_in_test_mrp { + struct switchdev_obj obj; + /* The value is in us and a value of 0 represents to stop */ + u32 interval; + u8 max_miss; + u32 in_id; + u32 period; +}; + +#define SWITCHDEV_OBJ_IN_TEST_MRP(OBJ) \ + container_of((OBJ), struct switchdev_obj_in_test_mrp, obj) + +/* SWICHDEV_OBJ_ID_IN_ROLE_MRP */ +struct switchdev_obj_in_role_mrp { + struct switchdev_obj obj; + u16 in_id; + u32 ring_id; + u8 in_role; + struct net_device *i_port; +}; + +#define SWITCHDEV_OBJ_IN_ROLE_MRP(OBJ) \ + container_of((OBJ), struct switchdev_obj_in_role_mrp, obj) + +struct switchdev_obj_in_state_mrp { + struct switchdev_obj obj; + u8 in_state; + u32 in_id; +}; + +#define SWITCHDEV_OBJ_IN_STATE_MRP(OBJ) \ + container_of((OBJ), struct switchdev_obj_in_state_mrp, obj) + #endif typedef int switchdev_obj_dump_cb_t(struct switchdev_obj *obj);
Extend switchdev API to add support for MRP interconnect. The HW is notified in the following cases: SWITCHDEV_OBJ_ID_IN_ROLE_MRP: This is used when the interconnect role of the node changes. The supported roles are MIM and MIC. SWITCHDEV_OBJ_ID_IN_STATE_MRP: This is used when the interconnect ring changes it states to open or closed. SWITCHDEV_OBJ_ID_IN_TEST_MRP: This is used to start/stop sending MRP_InTest frames on all MRP ports. This is called only on nodes that have the interconnect role MIM. Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com> --- include/net/switchdev.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+)