Message ID | 20211120201425.799946-1-alx.manpages@gmail.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | drivers/net/ethernet/sfc/: Simplify code | expand |
On 20/11/2021 20:14, Alejandro Colomar wrote: > That ternary operator has > the same exact code in both of the branches. > > Unless there's some hidden magic in the condition, > there's no reason for it to be, > and it can be replaced > by the code in one of the branches. > > That code has been untouched since it was added, > so there's no information in git about > why it was written that way. > > Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com> > Cc: Edward Cree <ecree.xilinx@gmail.com> > Cc: Martin Habets <habetsm.xilinx@gmail.com> > Cc: netdev@vger.kernel.org I guess it's there for type-checking — essentially as an assert that field_type == typeof(efx_##source_name.field). Probably when it was added there was no standard way to do this; now we could probably use <linux/typecheck.h> or some such. The comment just above the macro does mention "with type-checking". -ed
Hi Edward, On 11/22/21 17:17, Edward Cree wrote: > On 20/11/2021 20:14, Alejandro Colomar wrote: >> That ternary operator has >> the same exact code in both of the branches. >> >> Unless there's some hidden magic in the condition, >> there's no reason for it to be, >> and it can be replaced >> by the code in one of the branches. >> >> That code has been untouched since it was added, >> so there's no information in git about >> why it was written that way. >> >> Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com> >> Cc: Edward Cree <ecree.xilinx@gmail.com> >> Cc: Martin Habets <habetsm.xilinx@gmail.com> >> Cc: netdev@vger.kernel.org > > I guess it's there for type-checking — essentially as an assert that > field_type == typeof(efx_##source_name.field). Probably when it was > added there was no standard way to do this; now we could probably > use <linux/typecheck.h> or some such. > The comment just above the macro does mention "with type-checking". Yes, that's why I suggested there was probably some black magic involved. But I couldn't read it, though. I suggest replacing it with a static_assert(__same_type()) thingy. Cheers, Alex
diff --git a/drivers/net/ethernet/sfc/ethtool_common.c b/drivers/net/ethernet/sfc/ethtool_common.c index bd552c7dffcb..1b9e8b0afb3c 100644 --- a/drivers/net/ethernet/sfc/ethtool_common.c +++ b/drivers/net/ethernet/sfc/ethtool_common.c @@ -33,10 +33,7 @@ struct efx_sw_stat_desc { get_stat_function) { \ .name = #stat_name, \ .source = EFX_ETHTOOL_STAT_SOURCE_##source_name, \ - .offset = ((((field_type *) 0) == \ - &((struct efx_##source_name *)0)->field) ? \ - offsetof(struct efx_##source_name, field) : \ - offsetof(struct efx_##source_name, field)), \ + .offset = offsetof(struct efx_##source_name, field), \ .get_stat = get_stat_function, \ }
That ternary operator has the same exact code in both of the branches. Unless there's some hidden magic in the condition, there's no reason for it to be, and it can be replaced by the code in one of the branches. That code has been untouched since it was added, so there's no information in git about why it was written that way. Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com> Cc: Edward Cree <ecree.xilinx@gmail.com> Cc: Martin Habets <habetsm.xilinx@gmail.com> Cc: netdev@vger.kernel.org --- drivers/net/ethernet/sfc/ethtool_common.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)