All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Jonathan Cameron <Jonathan.Cameron@huawei.com>,
	Liang Kan <kan.liang@linux.intel.com>,
	linux-cxl@vger.kernel.org, peterz@infradead.org
Cc: oe-kbuild-all@lists.linux.dev, mingo@redhat.com, acme@kernel.org,
	mark.rutland@arm.com, will@kernel.org, dan.j.williams@intel.com,
	linuxarm@huawei.com, linux-perf-users@vger.kernel.org,
	linux-kernel@vger.kernel.org, Davidlohr Bueso <dave@stgolabs.net>,
	Dave Jiang <dave.jiang@intel.com>
Subject: Re: [PATCH v2 4/5] cxl: CXL Performance Monitoring Unit driver
Date: Sat, 25 Mar 2023 05:12:01 +0800	[thread overview]
Message-ID: <202303250523.JdddC4Ld-lkp@intel.com> (raw)
In-Reply-To: <20230324171313.18448-5-Jonathan.Cameron@huawei.com>

Hi Jonathan,

I love your patch! Yet something to improve:

[auto build test ERROR on acme/perf/core]
[also build test ERROR on tip/perf/core cxl/next cxl/pending linus/master v6.3-rc3 next-20230324]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Jonathan-Cameron/cxl-Add-function-to-count-regblocks-of-a-given-type/20230325-011827
base:   https://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git perf/core
patch link:    https://lore.kernel.org/r/20230324171313.18448-5-Jonathan.Cameron%40huawei.com
patch subject: [PATCH v2 4/5] cxl: CXL Performance Monitoring Unit driver
config: parisc-randconfig-r036-20230324 (https://download.01.org/0day-ci/archive/20230325/202303250523.JdddC4Ld-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/a04f0052a1fa10bda54569c8c7b3ab7fe60ca975
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Jonathan-Cameron/cxl-Add-function-to-count-regblocks-of-a-given-type/20230325-011827
        git checkout a04f0052a1fa10bda54569c8c7b3ab7fe60ca975
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc SHELL=/bin/bash drivers/cxl/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303250523.JdddC4Ld-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/cxl/cpmu.c: In function 'cpmu_parse_caps':
   drivers/cxl/cpmu.c:101:15: error: implicit declaration of function 'readq'; did you mean 'readl'? [-Werror=implicit-function-declaration]
     101 |         val = readq(base + CPMU_CAP_REG);
         |               ^~~~~
         |               readl
   In file included from <command-line>:
   drivers/cxl/cpmu.c: In function 'cpmu_config_get_mask':
>> drivers/cxl/cpmu.c:416:51: error: 'struct perf_event' has no member named 'attr'
     416 |         return FIELD_GET(GENMASK_ULL(31, 0), event->attr.config);
         |                                                   ^~
   include/linux/compiler_types.h:377:23: note: in definition of macro '__compiletime_assert'
     377 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:397:9: note: in expansion of macro '_compiletime_assert'
     397 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:71:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      71 |                 BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask) >     \
         |                 ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:61:43: note: in expansion of macro '__unsigned_scalar_typeof'
      61 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:72:34: note: in expansion of macro '__bf_cast_unsigned'
      72 |                                  __bf_cast_unsigned(_reg, ~0ull),       \
         |                                  ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:154:17: note: in expansion of macro '__BF_FIELD_CHECK'
     154 |                 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:416:16: note: in expansion of macro 'FIELD_GET'
     416 |         return FIELD_GET(GENMASK_ULL(31, 0), event->attr.config);
         |                ^~~~~~~~~
   In file included from drivers/cxl/cxl.h:8,
                    from drivers/cxl/cxlpci.h:6,
                    from drivers/cxl/cpmu.c:32:
>> drivers/cxl/cpmu.c:416:51: error: 'struct perf_event' has no member named 'attr'
     416 |         return FIELD_GET(GENMASK_ULL(31, 0), event->attr.config);
         |                                                   ^~
   include/linux/bitfield.h:155:35: note: in definition of macro 'FIELD_GET'
     155 |                 (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \
         |                                   ^~~~
   drivers/cxl/cpmu.c: In function 'cpmu_config_get_gid':
   drivers/cxl/cpmu.c:421:52: error: 'struct perf_event' has no member named 'attr'
     421 |         return FIELD_GET(GENMASK_ULL(47, 32), event->attr.config);
         |                                                    ^~
   include/linux/compiler_types.h:377:23: note: in definition of macro '__compiletime_assert'
     377 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:397:9: note: in expansion of macro '_compiletime_assert'
     397 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:71:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      71 |                 BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask) >     \
         |                 ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:61:43: note: in expansion of macro '__unsigned_scalar_typeof'
      61 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:72:34: note: in expansion of macro '__bf_cast_unsigned'
      72 |                                  __bf_cast_unsigned(_reg, ~0ull),       \
         |                                  ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:154:17: note: in expansion of macro '__BF_FIELD_CHECK'
     154 |                 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:421:16: note: in expansion of macro 'FIELD_GET'
     421 |         return FIELD_GET(GENMASK_ULL(47, 32), event->attr.config);
         |                ^~~~~~~~~
   drivers/cxl/cpmu.c:421:52: error: 'struct perf_event' has no member named 'attr'
     421 |         return FIELD_GET(GENMASK_ULL(47, 32), event->attr.config);
         |                                                    ^~
   include/linux/bitfield.h:155:35: note: in definition of macro 'FIELD_GET'
     155 |                 (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \
         |                                   ^~~~
   drivers/cxl/cpmu.c: In function 'cpmu_config_get_vid':
   drivers/cxl/cpmu.c:426:52: error: 'struct perf_event' has no member named 'attr'
     426 |         return FIELD_GET(GENMASK_ULL(63, 48), event->attr.config);
         |                                                    ^~
   include/linux/compiler_types.h:377:23: note: in definition of macro '__compiletime_assert'
     377 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:397:9: note: in expansion of macro '_compiletime_assert'
     397 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:71:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      71 |                 BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask) >     \
         |                 ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:61:43: note: in expansion of macro '__unsigned_scalar_typeof'
      61 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:72:34: note: in expansion of macro '__bf_cast_unsigned'
      72 |                                  __bf_cast_unsigned(_reg, ~0ull),       \
         |                                  ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:154:17: note: in expansion of macro '__BF_FIELD_CHECK'
     154 |                 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:426:16: note: in expansion of macro 'FIELD_GET'
     426 |         return FIELD_GET(GENMASK_ULL(63, 48), event->attr.config);
         |                ^~~~~~~~~
   drivers/cxl/cpmu.c:426:52: error: 'struct perf_event' has no member named 'attr'
     426 |         return FIELD_GET(GENMASK_ULL(63, 48), event->attr.config);
         |                                                    ^~
   include/linux/bitfield.h:155:35: note: in definition of macro 'FIELD_GET'
     155 |                 (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \
         |                                   ^~~~
   drivers/cxl/cpmu.c: In function 'cpmu_config1_get_threshold':
   drivers/cxl/cpmu.c:431:51: error: 'struct perf_event' has no member named 'attr'
     431 |         return FIELD_GET(GENMASK_ULL(15, 0), event->attr.config1);
         |                                                   ^~
   include/linux/compiler_types.h:377:23: note: in definition of macro '__compiletime_assert'
     377 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:397:9: note: in expansion of macro '_compiletime_assert'
     397 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:71:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      71 |                 BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask) >     \
         |                 ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:61:43: note: in expansion of macro '__unsigned_scalar_typeof'
      61 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:72:34: note: in expansion of macro '__bf_cast_unsigned'
      72 |                                  __bf_cast_unsigned(_reg, ~0ull),       \
         |                                  ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:154:17: note: in expansion of macro '__BF_FIELD_CHECK'
     154 |                 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:431:16: note: in expansion of macro 'FIELD_GET'
     431 |         return FIELD_GET(GENMASK_ULL(15, 0), event->attr.config1);
--
   include/linux/compiler_types.h:397:9: note: in expansion of macro '_compiletime_assert'
     397 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:71:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      71 |                 BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask) >     \
         |                 ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:61:43: note: in expansion of macro '__unsigned_scalar_typeof'
      61 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:72:34: note: in expansion of macro '__bf_cast_unsigned'
      72 |                                  __bf_cast_unsigned(_reg, ~0ull),       \
         |                                  ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:154:17: note: in expansion of macro '__BF_FIELD_CHECK'
     154 |                 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:441:16: note: in expansion of macro 'FIELD_GET'
     441 |         return FIELD_GET(BIT(17), event->attr.config1);
         |                ^~~~~~~~~
   drivers/cxl/cpmu.c:441:40: error: 'struct perf_event' has no member named 'attr'
     441 |         return FIELD_GET(BIT(17), event->attr.config1);
         |                                        ^~
   include/linux/bitfield.h:155:35: note: in definition of macro 'FIELD_GET'
     155 |                 (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \
         |                                   ^~~~
   drivers/cxl/cpmu.c: In function 'cpmu_config1_hdm_filter_en':
   drivers/cxl/cpmu.c:453:40: error: 'struct perf_event' has no member named 'attr'
     453 |         return FIELD_GET(BIT(14), event->attr.config1);
         |                                        ^~
   include/linux/compiler_types.h:377:23: note: in definition of macro '__compiletime_assert'
     377 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:397:9: note: in expansion of macro '_compiletime_assert'
     397 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:71:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      71 |                 BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask) >     \
         |                 ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:61:43: note: in expansion of macro '__unsigned_scalar_typeof'
      61 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:72:34: note: in expansion of macro '__bf_cast_unsigned'
      72 |                                  __bf_cast_unsigned(_reg, ~0ull),       \
         |                                  ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:154:17: note: in expansion of macro '__BF_FIELD_CHECK'
     154 |                 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:453:16: note: in expansion of macro 'FIELD_GET'
     453 |         return FIELD_GET(BIT(14), event->attr.config1);
         |                ^~~~~~~~~
   drivers/cxl/cpmu.c:453:40: error: 'struct perf_event' has no member named 'attr'
     453 |         return FIELD_GET(BIT(14), event->attr.config1);
         |                                        ^~
   include/linux/bitfield.h:155:35: note: in definition of macro 'FIELD_GET'
     155 |                 (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \
         |                                   ^~~~
   drivers/cxl/cpmu.c: In function 'cpmu_config2_get_hdm_decoder':
   drivers/cxl/cpmu.c:458:47: error: 'struct perf_event' has no member named 'attr'
     458 |         return FIELD_GET(GENMASK(15, 0), event->attr.config2);
         |                                               ^~
   include/linux/compiler_types.h:377:23: note: in definition of macro '__compiletime_assert'
     377 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:397:9: note: in expansion of macro '_compiletime_assert'
     397 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:71:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      71 |                 BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask) >     \
         |                 ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:61:43: note: in expansion of macro '__unsigned_scalar_typeof'
      61 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:72:34: note: in expansion of macro '__bf_cast_unsigned'
      72 |                                  __bf_cast_unsigned(_reg, ~0ull),       \
         |                                  ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:154:17: note: in expansion of macro '__BF_FIELD_CHECK'
     154 |                 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:458:16: note: in expansion of macro 'FIELD_GET'
     458 |         return FIELD_GET(GENMASK(15, 0), event->attr.config2);
         |                ^~~~~~~~~
   drivers/cxl/cpmu.c:458:47: error: 'struct perf_event' has no member named 'attr'
     458 |         return FIELD_GET(GENMASK(15, 0), event->attr.config2);
         |                                               ^~
   include/linux/bitfield.h:155:35: note: in definition of macro 'FIELD_GET'
     155 |                 (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \
         |                                   ^~~~
   In file included from include/linux/kernel.h:21,
                    from arch/parisc/include/asm/bug.h:5,
                    from include/linux/bug.h:5,
                    from drivers/cxl/cpmu.c:26:
   drivers/cxl/cpmu.c: In function 'cpmu_get_event_idx':
>> drivers/cxl/cpmu.c:489:56: error: 'struct perf_event' has no member named 'pmu'
     489 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/container_of.h:19:33: note: in definition of macro 'container_of'
      19 |         void *__mptr = (void *)(ptr);                                   \
         |                                 ^~~
   drivers/cxl/cpmu.c:489:34: note: in expansion of macro 'pmu_to_cpmu_info'
     489 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   In file included from include/linux/bits.h:21,
                    from include/linux/bitops.h:6,
                    from drivers/cxl/cpmu.c:24:
>> drivers/cxl/cpmu.c:489:56: error: 'struct perf_event' has no member named 'pmu'
     489 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:489:34: note: in expansion of macro 'pmu_to_cpmu_info'
     489 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
>> drivers/cxl/cpmu.c:489:56: error: 'struct perf_event' has no member named 'pmu'
     489 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:21:23: note: in expansion of macro '__same_type'
      21 |                       __same_type(*(ptr), void),                        \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:489:34: note: in expansion of macro 'pmu_to_cpmu_info'
     489 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   include/linux/compiler_types.h:338:27: error: expression in static assertion is not an integer
     338 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:489:34: note: in expansion of macro 'pmu_to_cpmu_info'
     489 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c: In function 'cpmu_event_init':
   drivers/cxl/cpmu.c:532:56: error: 'struct perf_event' has no member named 'pmu'
     532 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/container_of.h:19:33: note: in definition of macro 'container_of'
      19 |         void *__mptr = (void *)(ptr);                                   \
         |                                 ^~~
   drivers/cxl/cpmu.c:532:34: note: in expansion of macro 'pmu_to_cpmu_info'
     532 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:532:56: error: 'struct perf_event' has no member named 'pmu'
     532 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:532:34: note: in expansion of macro 'pmu_to_cpmu_info'
     532 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:532:56: error: 'struct perf_event' has no member named 'pmu'
     532 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:21:23: note: in expansion of macro '__same_type'
      21 |                       __same_type(*(ptr), void),                        \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:532:34: note: in expansion of macro 'pmu_to_cpmu_info'
     532 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   include/linux/compiler_types.h:338:27: error: expression in static assertion is not an integer
     338 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:532:34: note: in expansion of macro 'pmu_to_cpmu_info'
     532 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
>> drivers/cxl/cpmu.c:534:14: error: 'struct perf_event' has no member named 'cpu'
     534 |         event->cpu = info->on_cpu;
         |              ^~
   drivers/cxl/cpmu.c:536:18: error: 'struct perf_event' has no member named 'attr'
     536 |         if (event->attr.type != event->pmu->type)
         |                  ^~
   drivers/cxl/cpmu.c:536:38: error: 'struct perf_event' has no member named 'pmu'
     536 |         if (event->attr.type != event->pmu->type)
         |                                      ^~
>> drivers/cxl/cpmu.c:539:13: error: implicit declaration of function 'is_sampling_event' [-Werror=implicit-function-declaration]
     539 |         if (is_sampling_event(event) || event->attach_state & PERF_ATTACH_TASK)
         |             ^~~~~~~~~~~~~~~~~
>> drivers/cxl/cpmu.c:539:46: error: 'struct perf_event' has no member named 'attach_state'
     539 |         if (is_sampling_event(event) || event->attach_state & PERF_ATTACH_TASK)
         |                                              ^~
   drivers/cxl/cpmu.c: In function 'cpmu_pmu_enable':
   drivers/cxl/cpmu.c:559:17: error: implicit declaration of function 'writeq'; did you mean 'writel'? [-Werror=implicit-function-declaration]
     559 |                 writeq(0, base + CPMU_FREEZE_REG);
         |                 ^~~~~~
         |                 writel
   drivers/cxl/cpmu.c: In function 'cpmu_pmu_disable':
   include/linux/bits.h:35:18: warning: right shift count is negative [-Wshift-count-negative]
      35 |          (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
         |                  ^~
   include/linux/bits.h:37:38: note: in expansion of macro '__GENMASK'
      37 |         (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
         |                                      ^~~~~~~~~
   drivers/cxl/cpmu.c:578:24: note: in expansion of macro 'GENMASK'
     578 |                 writeq(GENMASK(63, 0), base + CPMU_FREEZE_REG);
         |                        ^~~~~~~
   drivers/cxl/cpmu.c: In function 'cpmu_event_start':
   drivers/cxl/cpmu.c:585:56: error: 'struct perf_event' has no member named 'pmu'
     585 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/container_of.h:19:33: note: in definition of macro 'container_of'
      19 |         void *__mptr = (void *)(ptr);                                   \
         |                                 ^~~
   drivers/cxl/cpmu.c:585:34: note: in expansion of macro 'pmu_to_cpmu_info'
     585 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:585:56: error: 'struct perf_event' has no member named 'pmu'
     585 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:585:34: note: in expansion of macro 'pmu_to_cpmu_info'
     585 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:585:56: error: 'struct perf_event' has no member named 'pmu'
     585 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:21:23: note: in expansion of macro '__same_type'
      21 |                       __same_type(*(ptr), void),                        \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:585:34: note: in expansion of macro 'pmu_to_cpmu_info'
     585 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   include/linux/compiler_types.h:338:27: error: expression in static assertion is not an integer
     338 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:585:34: note: in expansion of macro 'pmu_to_cpmu_info'
     585 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
>> drivers/cxl/cpmu.c:586:43: error: 'struct perf_event' has no member named 'hw'
     586 |         struct hw_perf_event *hwc = &event->hw;
         |                                           ^~
   In file included from arch/parisc/include/asm/bug.h:93:
>> drivers/cxl/cpmu.c:590:31: error: 'struct hw_perf_event' has no member named 'state'
     590 |         if (WARN_ON_ONCE(!(hwc->state & PERF_HES_STOPPED)))
         |                               ^~
   include/asm-generic/bug.h:110:32: note: in definition of macro 'WARN_ON_ONCE'
     110 |         int __ret_warn_on = !!(condition);                      \
         |                                ^~~~~~~~~
>> drivers/cxl/cpmu.c:590:41: error: 'PERF_HES_STOPPED' undeclared (first use in this function)
     590 |         if (WARN_ON_ONCE(!(hwc->state & PERF_HES_STOPPED)))
         |                                         ^~~~~~~~~~~~~~~~
   include/asm-generic/bug.h:110:32: note: in definition of macro 'WARN_ON_ONCE'
     110 |         int __ret_warn_on = !!(condition);                      \
         |                                ^~~~~~~~~
   drivers/cxl/cpmu.c:590:41: note: each undeclared identifier is reported only once for each function it appears in
     590 |         if (WARN_ON_ONCE(!(hwc->state & PERF_HES_STOPPED)))
         |                                         ^~~~~~~~~~~~~~~~
   include/asm-generic/bug.h:110:32: note: in definition of macro 'WARN_ON_ONCE'
     110 |         int __ret_warn_on = !!(condition);                      \
         |                                ^~~~~~~~~
   drivers/cxl/cpmu.c:593:27: error: 'struct hw_perf_event' has no member named 'state'
     593 |         WARN_ON_ONCE(!(hwc->state & PERF_HES_UPTODATE));
         |                           ^~
   include/asm-generic/bug.h:110:32: note: in definition of macro 'WARN_ON_ONCE'
     110 |         int __ret_warn_on = !!(condition);                      \
         |                                ^~~~~~~~~
>> drivers/cxl/cpmu.c:593:37: error: 'PERF_HES_UPTODATE' undeclared (first use in this function); did you mean 'PERF_EF_UPDATE'?
     593 |         WARN_ON_ONCE(!(hwc->state & PERF_HES_UPTODATE));
         |                                     ^~~~~~~~~~~~~~~~~
   include/asm-generic/bug.h:110:32: note: in definition of macro 'WARN_ON_ONCE'
     110 |         int __ret_warn_on = !!(condition);                      \
         |                                ^~~~~~~~~
   drivers/cxl/cpmu.c:594:12: error: 'struct hw_perf_event' has no member named 'state'
     594 |         hwc->state = 0;
         |            ^~
   In file included from drivers/cxl/cpmu.c:31:
>> drivers/cxl/cpmu.c:605:59: error: 'struct hw_perf_event' has no member named 'idx'
     605 |                 writeq(cfg, base + CPMU_FILTER_CFG_REG(hwc->idx, 0));
         |                                                           ^~
   drivers/cxl/cpmu.h:43:62: note: in definition of macro 'CPMU_FILTER_CFG_REG'
      43 | #define CPMU_FILTER_CFG_REG(n, f)       (0x400 + 4 * ((f) + (n) * 8))
         |                                                              ^
   drivers/cxl/cpmu.c:608:52: error: 'struct hw_perf_event' has no member named 'idx'
     608 |         cfg = readq(base + CPMU_COUNTER_CFG_REG(hwc->idx));
         |                                                    ^~
   drivers/cxl/cpmu.h:29:55: note: in definition of macro 'CPMU_COUNTER_CFG_REG'
      29 | #define CPMU_COUNTER_CFG_REG(n)         (0x200 + 8 * (n))
         |                                                       ^
   drivers/cxl/cpmu.c:615:25: error: 'struct hw_perf_event' has no member named 'idx'
     615 |         if (test_bit(hwc->idx, info->conf_counter_bm)) {
         |                         ^~
   include/linux/bitops.h:49:32: note: in definition of macro 'bitop'
      49 |         ((__builtin_constant_p(nr) &&                                   \
         |                                ^~
   drivers/cxl/cpmu.c:615:13: note: in expansion of macro 'test_bit'
     615 |         if (test_bit(hwc->idx, info->conf_counter_bm)) {
         |             ^~~~~~~~
   drivers/cxl/cpmu.c:615:25: error: 'struct hw_perf_event' has no member named 'idx'
     615 |         if (test_bit(hwc->idx, info->conf_counter_bm)) {
         |                         ^~
   include/linux/bitops.h:53:20: note: in definition of macro 'bitop'
      53 |          const##op(nr, addr) : op(nr, addr))
         |                    ^~
   drivers/cxl/cpmu.c:615:13: note: in expansion of macro 'test_bit'
     615 |         if (test_bit(hwc->idx, info->conf_counter_bm)) {
         |             ^~~~~~~~
   drivers/cxl/cpmu.c:615:25: error: 'struct hw_perf_event' has no member named 'idx'
     615 |         if (test_bit(hwc->idx, info->conf_counter_bm)) {
         |                         ^~
   include/linux/bitops.h:53:35: note: in definition of macro 'bitop'
      53 |          const##op(nr, addr) : op(nr, addr))
         |                                   ^~
   drivers/cxl/cpmu.c:615:13: note: in expansion of macro 'test_bit'
     615 |         if (test_bit(hwc->idx, info->conf_counter_bm)) {
         |             ^~~~~~~~
>> drivers/cxl/cpmu.c:616:77: error: 'struct hw_perf_event' has no member named 'event_base'
     616 |                 cfg |= FIELD_PREP(CPMU_COUNTER_CFG_EVENT_GRP_ID_IDX_MSK, hwc->event_base);
         |                                                                             ^~
   include/linux/compiler_types.h:377:23: note: in definition of macro '__compiletime_assert'
     377 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:397:9: note: in expansion of macro '_compiletime_assert'
     397 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:68:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      68 |                 BUILD_BUG_ON_MSG(__builtin_constant_p(_val) ?           \
         |                 ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:114:17: note: in expansion of macro '__BF_FIELD_CHECK'
     114 |                 __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: ");    \
         |                 ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:616:24: note: in expansion of macro 'FIELD_PREP'
     616 |                 cfg |= FIELD_PREP(CPMU_COUNTER_CFG_EVENT_GRP_ID_IDX_MSK, hwc->event_base);
         |                        ^~~~~~~~~~
>> drivers/cxl/cpmu.c:616:77: error: 'struct hw_perf_event' has no member named 'event_base'
     616 |                 cfg |= FIELD_PREP(CPMU_COUNTER_CFG_EVENT_GRP_ID_IDX_MSK, hwc->event_base);
         |                                                                             ^~
   include/linux/compiler_types.h:377:23: note: in definition of macro '__compiletime_assert'
     377 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:397:9: note: in expansion of macro '_compiletime_assert'
     397 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:68:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      68 |                 BUILD_BUG_ON_MSG(__builtin_constant_p(_val) ?           \
         |                 ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:114:17: note: in expansion of macro '__BF_FIELD_CHECK'
     114 |                 __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: ");    \
         |                 ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:616:24: note: in expansion of macro 'FIELD_PREP'
     616 |                 cfg |= FIELD_PREP(CPMU_COUNTER_CFG_EVENT_GRP_ID_IDX_MSK, hwc->event_base);
         |                        ^~~~~~~~~~
>> drivers/cxl/cpmu.c:616:77: error: 'struct hw_perf_event' has no member named 'event_base'
     616 |                 cfg |= FIELD_PREP(CPMU_COUNTER_CFG_EVENT_GRP_ID_IDX_MSK, hwc->event_base);
         |                                                                             ^~
   include/linux/bitfield.h:115:34: note: in definition of macro 'FIELD_PREP'
     115 |                 ((typeof(_mask))(_val) << __bf_shf(_mask)) & (_mask);   \
         |                                  ^~~~
   drivers/cxl/cpmu.c:630:52: error: 'struct hw_perf_event' has no member named 'idx'
     630 |         writeq(cfg, base + CPMU_COUNTER_CFG_REG(hwc->idx));
         |                                                    ^~
   drivers/cxl/cpmu.h:29:55: note: in definition of macro 'CPMU_COUNTER_CFG_REG'
      29 | #define CPMU_COUNTER_CFG_REG(n)         (0x200 + 8 * (n))
         |                                                       ^
>> drivers/cxl/cpmu.c:632:9: error: implicit declaration of function 'local64_set'; did you mean 'local_set'? [-Werror=implicit-function-declaration]
     632 |         local64_set(&hwc->prev_count, 0);
         |         ^~~~~~~~~~~
         |         local_set
>> drivers/cxl/cpmu.c:632:25: error: 'struct hw_perf_event' has no member named 'prev_count'
     632 |         local64_set(&hwc->prev_count, 0);
         |                         ^~
   drivers/cxl/cpmu.c:633:46: error: 'struct hw_perf_event' has no member named 'idx'
     633 |         writeq(0, base + CPMU_COUNTER_REG(hwc->idx));
         |                                              ^~
   drivers/cxl/cpmu.h:46:63: note: in definition of macro 'CPMU_COUNTER_REG'
      46 | #define CPMU_COUNTER_REG(n)                     (0xc00 + 8 * (n))
         |                                                               ^
>> drivers/cxl/cpmu.c:636:28: error: implicit declaration of function 'local64_read'; did you mean 'local_read'? [-Werror=implicit-function-declaration]
     636 |                 prev_cnt = local64_read(&hwc->prev_count);
         |                            ^~~~~~~~~~~~
         |                            local_read
   drivers/cxl/cpmu.c:636:45: error: 'struct hw_perf_event' has no member named 'prev_count'
     636 |                 prev_cnt = local64_read(&hwc->prev_count);
         |                                             ^~
   drivers/cxl/cpmu.c:637:61: error: 'struct hw_perf_event' has no member named 'idx'
     637 |                 writeq(prev_cnt, base + CPMU_COUNTER_REG(hwc->idx));
         |                                                             ^~
   drivers/cxl/cpmu.h:46:63: note: in definition of macro 'CPMU_COUNTER_REG'
      46 | #define CPMU_COUNTER_REG(n)                     (0xc00 + 8 * (n))
         |                                                               ^
>> drivers/cxl/cpmu.c:640:9: error: implicit declaration of function 'perf_event_update_userpage'; did you mean 'arch_perf_update_userpage'? [-Werror=implicit-function-declaration]
     640 |         perf_event_update_userpage(event);
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
         |         arch_perf_update_userpage
   drivers/cxl/cpmu.c: In function 'cpmu_read_counter':
   drivers/cxl/cpmu.c:645:56: error: 'struct perf_event' has no member named 'pmu'
     645 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/container_of.h:19:33: note: in definition of macro 'container_of'
      19 |         void *__mptr = (void *)(ptr);                                   \
         |                                 ^~~
   drivers/cxl/cpmu.c:645:34: note: in expansion of macro 'pmu_to_cpmu_info'
     645 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:645:56: error: 'struct perf_event' has no member named 'pmu'
     645 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:645:34: note: in expansion of macro 'pmu_to_cpmu_info'
     645 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:645:56: error: 'struct perf_event' has no member named 'pmu'
     645 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:21:23: note: in expansion of macro '__same_type'
      21 |                       __same_type(*(ptr), void),                        \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:645:34: note: in expansion of macro 'pmu_to_cpmu_info'
     645 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   include/linux/compiler_types.h:338:27: error: expression in static assertion is not an integer
     338 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:645:34: note: in expansion of macro 'pmu_to_cpmu_info'
     645 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:648:51: error: 'struct perf_event' has no member named 'hw'
     648 |         return readq(base + CPMU_COUNTER_REG(event->hw.idx));
         |                                                   ^~
   drivers/cxl/cpmu.h:46:63: note: in definition of macro 'CPMU_COUNTER_REG'
      46 | #define CPMU_COUNTER_REG(n)                     (0xc00 + 8 * (n))
         |                                                               ^
   drivers/cxl/cpmu.c: In function '__cpmu_read':
   drivers/cxl/cpmu.c:653:56: error: 'struct perf_event' has no member named 'pmu'
     653 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/container_of.h:19:33: note: in definition of macro 'container_of'
      19 |         void *__mptr = (void *)(ptr);                                   \
         |                                 ^~~
   drivers/cxl/cpmu.c:653:34: note: in expansion of macro 'pmu_to_cpmu_info'
     653 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                  ^~~~~~~~~~~~~~~~
   drivers/cxl/cpmu.c:653:56: error: 'struct perf_event' has no member named 'pmu'
     653 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
         |                                                        ^~
   include/linux/build_bug.h:78:56: note: in definition of macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
   include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |         ^~~~~~~~~~~~~
   include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
      20 |         static_assert(__same_type(*(ptr), ((type *)0)->member) ||       \
         |                       ^~~~~~~~~~~
   drivers/cxl/cpmu.c:82:32: note: in expansion of macro 'container_of'
      82 | #define pmu_to_cpmu_info(_pmu) container_of(_pmu, struct cpmu_info, pmu)
         |                                ^~~~~~~~~~~~
   drivers/cxl/cpmu.c:653:34: note: in expansion of macro 'pmu_to_cpmu_info'
     653 |         struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);


vim +416 drivers/cxl/cpmu.c

   413	
   414	static u32 cpmu_config_get_mask(struct perf_event *event)
   415	{
 > 416		return FIELD_GET(GENMASK_ULL(31, 0), event->attr.config);
   417	}
   418	
   419	static u16 cpmu_config_get_gid(struct perf_event *event)
   420	{
   421		return FIELD_GET(GENMASK_ULL(47, 32), event->attr.config);
   422	}
   423	
   424	static u16 cpmu_config_get_vid(struct perf_event *event)
   425	{
   426		return FIELD_GET(GENMASK_ULL(63, 48), event->attr.config);
   427	}
   428	
   429	static u8 cpmu_config1_get_threshold(struct perf_event *event)
   430	{
   431		return FIELD_GET(GENMASK_ULL(15, 0), event->attr.config1);
   432	}
   433	
   434	static bool cpmu_config1_get_invert(struct perf_event *event)
   435	{
   436		return FIELD_GET(BIT(16), event->attr.config1);
   437	}
   438	
   439	static bool cpmu_config1_get_edge(struct perf_event *event)
   440	{
   441		return FIELD_GET(BIT(17), event->attr.config1);
   442	}
   443	
   444	/*
   445	 * CPMU specification allows for 8 filters, each with a 16 bit value...
   446	 * So we need to find 8x16bits to store it in.
   447	 * As the value used for disable is 0xffff, a separate enable switch
   448	 * is needed.
   449	 */
   450	
   451	static bool cpmu_config1_hdm_filter_en(struct perf_event *event)
   452	{
   453		return FIELD_GET(BIT(14), event->attr.config1);
   454	}
   455	
   456	static u16 cpmu_config2_get_hdm_decoder(struct perf_event *event)
   457	{
   458		return FIELD_GET(GENMASK(15, 0), event->attr.config2);
   459	}
   460	
   461	static ssize_t cpumask_show(struct device *dev, struct device_attribute *attr,
   462				    char *buf)
   463	{
   464		struct cpmu_info *info = dev_get_drvdata(dev);
   465	
   466		return cpumap_print_to_pagebuf(true, buf, cpumask_of(info->on_cpu));
   467	}
   468	static DEVICE_ATTR_RO(cpumask);
   469	
   470	static struct attribute *cpmu_cpumask_attrs[] = {
   471		&dev_attr_cpumask.attr,
   472		NULL
   473	};
   474	
   475	static const struct attribute_group cpmu_cpumask_group = {
   476		.attrs = cpmu_cpumask_attrs,
   477	};
   478	
   479	static const struct attribute_group *cpmu_attr_groups[] = {
   480		&cpmu_events,
   481		&cpmu_format_group,
   482		&cpmu_cpumask_group,
   483		NULL
   484	};
   485	
   486	/* If counter_idx == NULL, don't try to allocate a counter. */
   487	static int cpmu_get_event_idx(struct perf_event *event, int *counter_idx, int *event_idx)
   488	{
 > 489		struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
   490		DECLARE_BITMAP(configurable_and_free, CPMU_MAX_COUNTERS);
   491		struct cpmu_event *cpmu_ev;
   492		u32 mask;
   493		u16 gid, vid;
   494		int i;
   495	
   496		vid = cpmu_config_get_vid(event);
   497		gid = cpmu_config_get_gid(event);
   498		mask = cpmu_config_get_mask(event);
   499	
   500		cpmu_ev = cpmu_find_fixed_counter_event(info, vid, gid, mask);
   501		if (!IS_ERR(cpmu_ev)) {
   502			if (!counter_idx)
   503				return 0;
   504			if (!info->hw_events[cpmu_ev->counter_idx]) {
   505				*counter_idx = cpmu_ev->counter_idx;
   506				return 0;
   507			}
   508			/* Fixed counter is in use, but maybe a configurable one? */
   509		}
   510	
   511		cpmu_ev = cpmu_find_config_counter_event(info, vid, gid, mask);
   512		if (!IS_ERR(cpmu_ev)) {
   513			if (!counter_idx)
   514				return 0;
   515	
   516			bitmap_andnot(configurable_and_free, info->conf_counter_bm,
   517				info->used_counter_bm, CPMU_MAX_COUNTERS);
   518	
   519			i = find_first_bit(configurable_and_free, CPMU_MAX_COUNTERS);
   520			if (i == CPMU_MAX_COUNTERS)
   521				return -EINVAL;
   522	
   523			*counter_idx = i;
   524			return 0;
   525		}
   526	
   527		return -EINVAL;
   528	}
   529	
   530	static int cpmu_event_init(struct perf_event *event)
   531	{
   532		struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
   533	
 > 534		event->cpu = info->on_cpu;
   535		/* Top level type sanity check - is this a Hardware Event being requested */
   536		if (event->attr.type != event->pmu->type)
   537			return -ENOENT;
   538	
 > 539		if (is_sampling_event(event) || event->attach_state & PERF_ATTACH_TASK)
   540			return -EOPNOTSUPP;
   541		/* TODO: Validation of any filter */
   542	
   543		/*
   544		 * Verify that it is possible to count what was requested. Either must
   545		 * be a fixed counter that is a precise match or a configurable counter
   546		 * where this is a subset.
   547		 */
   548		return cpmu_get_event_idx(event, NULL, NULL);
   549	}
   550	
   551	static void cpmu_pmu_enable(struct pmu *pmu)
   552	{
   553		struct cpmu_info *info = pmu_to_cpmu_info(pmu);
   554		void __iomem *base = info->base;
   555	
   556		/* We don't have a global enable, but we 'might' have a global freeze which we can use */
   557		if (info->freeze_for_enable) {
   558			/* Can assume frozen at this stage */
   559			writeq(0, base + CPMU_FREEZE_REG);
   560	
   561			return;
   562		}
   563	}
   564	
   565	static void cpmu_pmu_disable(struct pmu *pmu)
   566	{
   567		struct cpmu_info *info = pmu_to_cpmu_info(pmu);
   568		void __iomem *base = info->base;
   569	
   570		if (info->freeze_for_enable) {
   571			/*
   572			 * Whilst bits above number of counters are RsvdZ
   573			 * they are unlikely to be repurposed given
   574			 * number of counters is allowed to be 64 leaving
   575			 * no reserved bits.  Hence this is only slightly
   576			 * naughty.
   577			 */
   578			writeq(GENMASK(63, 0), base + CPMU_FREEZE_REG);
   579			return;
   580		}
   581	}
   582	
   583	static void cpmu_event_start(struct perf_event *event, int flags)
   584	{
   585		struct cpmu_info *info = pmu_to_cpmu_info(event->pmu);
 > 586		struct hw_perf_event *hwc = &event->hw;
   587		void __iomem *base = info->base;
   588		u64 cfg, prev_cnt;
   589	
 > 590		if (WARN_ON_ONCE(!(hwc->state & PERF_HES_STOPPED)))
   591			return;
   592	
 > 593		WARN_ON_ONCE(!(hwc->state & PERF_HES_UPTODATE));
   594		hwc->state = 0;
   595	
   596		/*
   597		 * Currently only hdm filter control is implemnted, this code will
   598		 * want generalizing when more filters are added.
   599		 */
   600		if (info->filter_hdm) {
   601			if (cpmu_config1_hdm_filter_en(event))
   602				cfg = cpmu_config2_get_hdm_decoder(event);
   603			else
   604				cfg = GENMASK(15, 0);
 > 605			writeq(cfg, base + CPMU_FILTER_CFG_REG(hwc->idx, 0));
   606		}
   607	
   608		cfg = readq(base + CPMU_COUNTER_CFG_REG(hwc->idx));
   609		cfg |= FIELD_PREP(CPMU_COUNTER_CFG_INT_ON_OVRFLW, 1);
   610		cfg |= FIELD_PREP(CPMU_COUNTER_CFG_ENABLE, 1);
   611		cfg |= FIELD_PREP(CPMU_COUNTER_CFG_EDGE, cpmu_config1_get_edge(event) ? 1 : 0);
   612		cfg |= FIELD_PREP(CPMU_COUNTER_CFG_INVERT, cpmu_config1_get_invert(event) ? 1 : 0);
   613	
   614		/* Fixed purpose counters have next two fields RO */
   615		if (test_bit(hwc->idx, info->conf_counter_bm)) {
   616			cfg |= FIELD_PREP(CPMU_COUNTER_CFG_EVENT_GRP_ID_IDX_MSK, hwc->event_base);
   617			cfg |= FIELD_PREP(CPMU_COUNTER_CFG_EVENTS_MSK, cpmu_config_get_mask(event));
   618		}
   619		cfg &= ~CPMU_COUNTER_CFG_THRESHOLD_MSK;
   620		/*
   621		 * For events that generate only 1 count per clock the CXL 3.0 spec
   622		 * states the threshold shall be set to 1 but if set to 0 it will
   623		 * count the raw value anwyay?
   624		 * There is no definition of what events will count multiple per cycle
   625		 * and hence to which non 1 values of threshold can apply.
   626		 * (CXL 3.0 8.2.7.2.1 Counter Configuration - threshold field definition)
   627		 */
   628		cfg |= FIELD_PREP(CPMU_COUNTER_CFG_THRESHOLD_MSK,
   629				  cpmu_config1_get_threshold(event));
   630		writeq(cfg, base + CPMU_COUNTER_CFG_REG(hwc->idx));
   631	
   632		local64_set(&hwc->prev_count, 0);
   633		writeq(0, base + CPMU_COUNTER_REG(hwc->idx));
   634	
   635		if (flags & PERF_EF_RELOAD) {
   636			prev_cnt = local64_read(&hwc->prev_count);
   637			writeq(prev_cnt, base + CPMU_COUNTER_REG(hwc->idx));
   638		}
   639	
   640		perf_event_update_userpage(event);
   641	}
   642	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

  reply	other threads:[~2023-03-24 21:12 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-24 17:13 [PATCH v2 0/5] CXL 3.0 Performance Monitoring Unit support Jonathan Cameron
2023-03-24 17:13 ` [PATCH v2 1/5] cxl: Add function to count regblocks of a given type Jonathan Cameron
2023-03-24 17:13 ` [PATCH v2 2/5] perf: Allow a PMU to have a parent Jonathan Cameron
2023-03-27 17:04   ` Liang, Kan
2023-03-28 10:54     ` Jonathan Cameron
2023-03-28 11:01       ` Greg KH
2023-03-29  8:55         ` Jonathan Cameron
2023-03-29  9:03           ` Greg KH
2023-03-24 17:13 ` [PATCH v2 3/5] cxl/pci: Find and register CXL PMU devices Jonathan Cameron
2023-03-24 21:01   ` kernel test robot
2023-03-27 15:50     ` Jonathan Cameron
2023-03-24 17:13 ` [PATCH v2 4/5] cxl: CXL Performance Monitoring Unit driver Jonathan Cameron
2023-03-24 21:12   ` kernel test robot [this message]
2023-03-27 15:50     ` Jonathan Cameron
2023-03-24 21:42   ` kernel test robot
2023-03-24 22:03   ` kernel test robot
2023-03-24 22:03   ` kernel test robot
2023-03-27 17:07   ` Liang, Kan
2023-03-29 13:11     ` Jonathan Cameron
2023-03-24 17:13 ` [PATCH v2 5/5] docs: perf: Minimal introduction the the CXL PMU device and driver Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202303250523.JdddC4Ld-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=acme@kernel.org \
    --cc=dan.j.williams@intel.com \
    --cc=dave.jiang@intel.com \
    --cc=dave@stgolabs.net \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=peterz@infradead.org \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.