Author: hselasky
Date: Fri Feb 21 10:14:02 2020
New Revision: 358220
URL: https://svnweb.freebsd.org/changeset/base/358220

Log:
  Fix broken MLX5_IB_INDEX() macro in mlx5ib(4).
  
  The index should be computed as distance from arg[0] and not
  the beginning of struct mlx5_ib_congestion .
  
  While at it fix a use of zero length array to avoid depending
  on undefined compiler behaviour.
  
  MFC after:    1 week
  Sponsored by: Mellanox Technologies

Modified:
  head/sys/dev/mlx5/mlx5_ib/mlx5_ib.h
  head/sys/dev/mlx5/mlx5_ib/mlx5_ib_cong.c

Modified: head/sys/dev/mlx5/mlx5_ib/mlx5_ib.h
==============================================================================
--- head/sys/dev/mlx5/mlx5_ib/mlx5_ib.h Fri Feb 21 09:52:20 2020        
(r358219)
+++ head/sys/dev/mlx5/mlx5_ib/mlx5_ib.h Fri Feb 21 10:14:02 2020        
(r358220)
@@ -650,9 +650,13 @@ struct mlx5_ib_congestion {
        struct sysctl_ctx_list ctx;
        struct sx lock;
        struct delayed_work dwork;
-       u64     arg [0];
-       MLX5_IB_CONG_PARAMS(MLX5_IB_STATS_VAR)
-       MLX5_IB_CONG_STATS(MLX5_IB_STATS_VAR)
+       union {
+               u64     arg[1];
+               struct {
+                       MLX5_IB_CONG_PARAMS(MLX5_IB_STATS_VAR)
+                       MLX5_IB_CONG_STATS(MLX5_IB_STATS_VAR)
+               };
+       };
 };
 
 struct mlx5_ib_dev {

Modified: head/sys/dev/mlx5/mlx5_ib/mlx5_ib_cong.c
==============================================================================
--- head/sys/dev/mlx5/mlx5_ib/mlx5_ib_cong.c    Fri Feb 21 09:52:20 2020        
(r358219)
+++ head/sys/dev/mlx5/mlx5_ib/mlx5_ib_cong.c    Fri Feb 21 10:14:02 2020        
(r358220)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2013-2015, Mellanox Technologies, Ltd.  All rights reserved.
+ * Copyright (c) 2013-2020, Mellanox Technologies, Ltd.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -37,7 +37,9 @@ static const char *mlx5_ib_cong_stats_desc[] = {
        MLX5_IB_CONG_STATS(MLX5_IB_STATS_DESC)
 };
 
-#define        MLX5_IB_INDEX(field) (__offsetof(struct mlx5_ib_congestion, 
field) / sizeof(u64))
+#define        MLX5_IB_INDEX(field) ( \
+    (__offsetof(struct mlx5_ib_congestion, field) - \
+     __offsetof(struct mlx5_ib_congestion, arg[0])) / sizeof(u64))
 #define        MLX5_IB_FLD_MAX(type, field) ((1ULL << __mlx5_bit_sz(type, 
field)) - 1ULL)
 #define        MLX5_IB_SET_CLIPPED(type, ptr, field, var) do { \
   /* rangecheck */                                     \
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to