Re: [PATCH v2 2/2] drm/msm: Expose client engine utilization via fdinfo

2022-06-08 Thread Tvrtko Ursulin



On 07/06/2022 17:08, Rob Clark wrote:

On Tue, Jun 7, 2022 at 9:02 AM Rob Clark  wrote:


On Tue, Jun 7, 2022 at 1:56 AM Tvrtko Ursulin
 wrote:



On 06/06/2022 20:54, Rob Clark wrote:

From: Rob Clark 

Similar to AMD commit
874442541133 ("drm/amdgpu: Add show_fdinfo() interface"), using the
infrastructure added in previous patches, we add basic client info
and GPU engine utilisation for msm.

Example output:

   # cat /proc/`pgrep glmark2`/fdinfo/6
   pos:0
   flags:  0242
   mnt_id: 21
   ino:162
   drm-driver: msm
   drm-client-id:  7
   drm-engine-gpu: 1734371319 ns
   drm-cycles-gpu: 1153645024
   drm-maxfreq-gpu:8 Hz

See also: https://patchwork.freedesktop.org/patch/468505/

Signed-off-by: Rob Clark 
---
   Documentation/gpu/drm-usage-stats.rst | 21 +
   drivers/gpu/drm/msm/msm_drv.c | 19 ++-
   drivers/gpu/drm/msm/msm_gpu.c | 21 +++--
   drivers/gpu/drm/msm/msm_gpu.h | 19 +++
   4 files changed, 77 insertions(+), 3 deletions(-)

diff --git a/Documentation/gpu/drm-usage-stats.rst 
b/Documentation/gpu/drm-usage-stats.rst
index 6c9f166a8d6f..60e5cc9c13ad 100644
--- a/Documentation/gpu/drm-usage-stats.rst
+++ b/Documentation/gpu/drm-usage-stats.rst
@@ -105,6 +105,27 @@ object belong to this client, in the respective memory 
region.
   Default unit shall be bytes with optional unit specifiers of 'KiB' or 'MiB'
   indicating kibi- or mebi-bytes.

+- drm-cycles- 
+
+Engine identifier string must be the same as the one specified in the
+drm-engine- tag and shall contain the number of busy cycles for the given
+engine.
+
+Values are not required to be constantly monotonic if it makes the driver
+implementation easier, but are required to catch up with the previously 
reported
+larger value within a reasonable period. Upon observing a value lower than what
+was previously read, userspace is expected to stay with that larger previous
+value until a monotonic update is seen.
+
+- drm-maxfreq-  [Hz|MHz|KHz]
+
+Engine identifier string must be the same as the one specified in the
+drm-engine- tag and shall contain the maxium frequence for the given


maximum frequency


+engine.  Taken together with drm-cycles-, this can be used to calculate
+percentage utilization of the engine, whereas drm-engine- only refects


reflects


+time active without considering what frequency the engine is operating as a
+percentage of it's maximum frequency.


Cycles vs max freq sounds very useful. My reservations is that how come
the idea hasn't happened in the CPU world. Or maybe it has and I am
un-informed?


I do often pay attention to both where tasks get scheduled, and the
individual CPU freq when I'm profiling CPU side stuff (eg. in
perfetto)

I could also report "always-count" cycles, I think, which could be
used by gputop to derive freq.  I'd have to think about that a bit,
since keeping the result monotinic(ish) might be a bit tricky (the hw
counter loses state across runtime suspend)


In any case, if going with this I think we need to clarify the text that
the value should reflect the current soft limit, where the driver
supports that, in case it has been set to lower than the maximum
frequency hardware can support. I am thinking about avoiding "my gpu
cannot hit 100%" support incidents in cases when user/admin lowered the
soft limit for some reason. Possibly does not apply to msm but can apply
to i915, if we decided to export the same data.


Yes, with pm-qos thermal or userspace could limit the max freq.. but
we also internally use a pm-qos constraint to reduce freq when the GPU
is idle, and I don't think there is a good way to differentiate
*which* constraint is which.  I'll add something involving the word
"recommended" ;-)


Hmm, or on second thought, maybe it would be better to, for drivers
that can, just report the soft limit separately?


Yes. I realized later soft-limit does not work, anything reported here 
has to be invariant otherwise userspace cannot make sense of the 
accumulated cycles vs changing freq. Max freq, as long as it is truly 
max, as you were proposing, works I think.


Regards,

Tvrtko


Re: [PATCH v2 2/2] drm/msm: Expose client engine utilization via fdinfo

2022-06-07 Thread Rob Clark
On Tue, Jun 7, 2022 at 9:02 AM Rob Clark  wrote:
>
> On Tue, Jun 7, 2022 at 1:56 AM Tvrtko Ursulin
>  wrote:
> >
> >
> > On 06/06/2022 20:54, Rob Clark wrote:
> > > From: Rob Clark 
> > >
> > > Similar to AMD commit
> > > 874442541133 ("drm/amdgpu: Add show_fdinfo() interface"), using the
> > > infrastructure added in previous patches, we add basic client info
> > > and GPU engine utilisation for msm.
> > >
> > > Example output:
> > >
> > >   # cat /proc/`pgrep glmark2`/fdinfo/6
> > >   pos:0
> > >   flags:  0242
> > >   mnt_id: 21
> > >   ino:162
> > >   drm-driver: msm
> > >   drm-client-id:  7
> > >   drm-engine-gpu: 1734371319 ns
> > >   drm-cycles-gpu: 1153645024
> > >   drm-maxfreq-gpu:8 Hz
> > >
> > > See also: https://patchwork.freedesktop.org/patch/468505/
> > >
> > > Signed-off-by: Rob Clark 
> > > ---
> > >   Documentation/gpu/drm-usage-stats.rst | 21 +
> > >   drivers/gpu/drm/msm/msm_drv.c | 19 ++-
> > >   drivers/gpu/drm/msm/msm_gpu.c | 21 +++--
> > >   drivers/gpu/drm/msm/msm_gpu.h | 19 +++
> > >   4 files changed, 77 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/Documentation/gpu/drm-usage-stats.rst 
> > > b/Documentation/gpu/drm-usage-stats.rst
> > > index 6c9f166a8d6f..60e5cc9c13ad 100644
> > > --- a/Documentation/gpu/drm-usage-stats.rst
> > > +++ b/Documentation/gpu/drm-usage-stats.rst
> > > @@ -105,6 +105,27 @@ object belong to this client, in the respective 
> > > memory region.
> > >   Default unit shall be bytes with optional unit specifiers of 'KiB' or 
> > > 'MiB'
> > >   indicating kibi- or mebi-bytes.
> > >
> > > +- drm-cycles- 
> > > +
> > > +Engine identifier string must be the same as the one specified in the
> > > +drm-engine- tag and shall contain the number of busy cycles for the 
> > > given
> > > +engine.
> > > +
> > > +Values are not required to be constantly monotonic if it makes the driver
> > > +implementation easier, but are required to catch up with the previously 
> > > reported
> > > +larger value within a reasonable period. Upon observing a value lower 
> > > than what
> > > +was previously read, userspace is expected to stay with that larger 
> > > previous
> > > +value until a monotonic update is seen.
> > > +
> > > +- drm-maxfreq-  [Hz|MHz|KHz]
> > > +
> > > +Engine identifier string must be the same as the one specified in the
> > > +drm-engine- tag and shall contain the maxium frequence for the given
> >
> > maximum frequency
> >
> > > +engine.  Taken together with drm-cycles-, this can be used to 
> > > calculate
> > > +percentage utilization of the engine, whereas drm-engine- only 
> > > refects
> >
> > reflects
> >
> > > +time active without considering what frequency the engine is operating 
> > > as a
> > > +percentage of it's maximum frequency.
> >
> > Cycles vs max freq sounds very useful. My reservations is that how come
> > the idea hasn't happened in the CPU world. Or maybe it has and I am
> > un-informed?
>
> I do often pay attention to both where tasks get scheduled, and the
> individual CPU freq when I'm profiling CPU side stuff (eg. in
> perfetto)
>
> I could also report "always-count" cycles, I think, which could be
> used by gputop to derive freq.  I'd have to think about that a bit,
> since keeping the result monotinic(ish) might be a bit tricky (the hw
> counter loses state across runtime suspend)
>
> > In any case, if going with this I think we need to clarify the text that
> > the value should reflect the current soft limit, where the driver
> > supports that, in case it has been set to lower than the maximum
> > frequency hardware can support. I am thinking about avoiding "my gpu
> > cannot hit 100%" support incidents in cases when user/admin lowered the
> > soft limit for some reason. Possibly does not apply to msm but can apply
> > to i915, if we decided to export the same data.
>
> Yes, with pm-qos thermal or userspace could limit the max freq.. but
> we also internally use a pm-qos constraint to reduce freq when the GPU
> is idle, and I don't think there is a good way to differentiate
> *which* constraint is which.  I'll add something involving the word
> "recommended" ;-)

Hmm, or on second thought, maybe it would be better to, for drivers
that can, just report the soft limit separately?

BR,
-R

> BR,
> -R
>
> >
> > No other gotchas come to mind at the moment.
> >
> > Regards,
> >
> > Tvrtko
> >
> > > +
> > >   ===
> > >   Driver specific implementations
> > >   ===
> > > diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> > > index 14ab9a627d8b..57a66093e671 100644
> > > --- a/drivers/gpu/drm/msm/msm_drv.c
> > > +++ b/drivers/gpu/drm/msm/msm_drv.c
> > > @@ -948,7 +948,24 @@ static const struct drm_ioctl_desc msm_ioctls[] = {
> > >   DRM_IOCTL_DEF_DRV(MSM_SUBMITQUEUE_QUERY, 
> > 

Re: [PATCH v2 2/2] drm/msm: Expose client engine utilization via fdinfo

2022-06-07 Thread Rob Clark
On Tue, Jun 7, 2022 at 1:56 AM Tvrtko Ursulin
 wrote:
>
>
> On 06/06/2022 20:54, Rob Clark wrote:
> > From: Rob Clark 
> >
> > Similar to AMD commit
> > 874442541133 ("drm/amdgpu: Add show_fdinfo() interface"), using the
> > infrastructure added in previous patches, we add basic client info
> > and GPU engine utilisation for msm.
> >
> > Example output:
> >
> >   # cat /proc/`pgrep glmark2`/fdinfo/6
> >   pos:0
> >   flags:  0242
> >   mnt_id: 21
> >   ino:162
> >   drm-driver: msm
> >   drm-client-id:  7
> >   drm-engine-gpu: 1734371319 ns
> >   drm-cycles-gpu: 1153645024
> >   drm-maxfreq-gpu:8 Hz
> >
> > See also: https://patchwork.freedesktop.org/patch/468505/
> >
> > Signed-off-by: Rob Clark 
> > ---
> >   Documentation/gpu/drm-usage-stats.rst | 21 +
> >   drivers/gpu/drm/msm/msm_drv.c | 19 ++-
> >   drivers/gpu/drm/msm/msm_gpu.c | 21 +++--
> >   drivers/gpu/drm/msm/msm_gpu.h | 19 +++
> >   4 files changed, 77 insertions(+), 3 deletions(-)
> >
> > diff --git a/Documentation/gpu/drm-usage-stats.rst 
> > b/Documentation/gpu/drm-usage-stats.rst
> > index 6c9f166a8d6f..60e5cc9c13ad 100644
> > --- a/Documentation/gpu/drm-usage-stats.rst
> > +++ b/Documentation/gpu/drm-usage-stats.rst
> > @@ -105,6 +105,27 @@ object belong to this client, in the respective memory 
> > region.
> >   Default unit shall be bytes with optional unit specifiers of 'KiB' or 
> > 'MiB'
> >   indicating kibi- or mebi-bytes.
> >
> > +- drm-cycles- 
> > +
> > +Engine identifier string must be the same as the one specified in the
> > +drm-engine- tag and shall contain the number of busy cycles for the 
> > given
> > +engine.
> > +
> > +Values are not required to be constantly monotonic if it makes the driver
> > +implementation easier, but are required to catch up with the previously 
> > reported
> > +larger value within a reasonable period. Upon observing a value lower than 
> > what
> > +was previously read, userspace is expected to stay with that larger 
> > previous
> > +value until a monotonic update is seen.
> > +
> > +- drm-maxfreq-  [Hz|MHz|KHz]
> > +
> > +Engine identifier string must be the same as the one specified in the
> > +drm-engine- tag and shall contain the maxium frequence for the given
>
> maximum frequency
>
> > +engine.  Taken together with drm-cycles-, this can be used to 
> > calculate
> > +percentage utilization of the engine, whereas drm-engine- only refects
>
> reflects
>
> > +time active without considering what frequency the engine is operating as a
> > +percentage of it's maximum frequency.
>
> Cycles vs max freq sounds very useful. My reservations is that how come
> the idea hasn't happened in the CPU world. Or maybe it has and I am
> un-informed?

I do often pay attention to both where tasks get scheduled, and the
individual CPU freq when I'm profiling CPU side stuff (eg. in
perfetto)

I could also report "always-count" cycles, I think, which could be
used by gputop to derive freq.  I'd have to think about that a bit,
since keeping the result monotinic(ish) might be a bit tricky (the hw
counter loses state across runtime suspend)

> In any case, if going with this I think we need to clarify the text that
> the value should reflect the current soft limit, where the driver
> supports that, in case it has been set to lower than the maximum
> frequency hardware can support. I am thinking about avoiding "my gpu
> cannot hit 100%" support incidents in cases when user/admin lowered the
> soft limit for some reason. Possibly does not apply to msm but can apply
> to i915, if we decided to export the same data.

Yes, with pm-qos thermal or userspace could limit the max freq.. but
we also internally use a pm-qos constraint to reduce freq when the GPU
is idle, and I don't think there is a good way to differentiate
*which* constraint is which.  I'll add something involving the word
"recommended" ;-)

BR,
-R

>
> No other gotchas come to mind at the moment.
>
> Regards,
>
> Tvrtko
>
> > +
> >   ===
> >   Driver specific implementations
> >   ===
> > diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> > index 14ab9a627d8b..57a66093e671 100644
> > --- a/drivers/gpu/drm/msm/msm_drv.c
> > +++ b/drivers/gpu/drm/msm/msm_drv.c
> > @@ -948,7 +948,24 @@ static const struct drm_ioctl_desc msm_ioctls[] = {
> >   DRM_IOCTL_DEF_DRV(MSM_SUBMITQUEUE_QUERY, msm_ioctl_submitqueue_query, 
> > DRM_RENDER_ALLOW),
> >   };
> >
> > -DEFINE_DRM_GEM_FOPS(fops);
> > +static void msm_fop_show_fdinfo(struct seq_file *m, struct file *f)
> > +{
> > + struct drm_file *file = f->private_data;
> > + struct drm_device *dev = file->minor->dev;
> > + struct msm_drm_private *priv = dev->dev_private;
> > + struct drm_printer p = drm_seq_file_printer(m);
> > +
> > + if (!priv->gpu)
> > +   

Re: [PATCH v2 2/2] drm/msm: Expose client engine utilization via fdinfo

2022-06-07 Thread Tvrtko Ursulin



On 06/06/2022 20:54, Rob Clark wrote:

From: Rob Clark 

Similar to AMD commit
874442541133 ("drm/amdgpu: Add show_fdinfo() interface"), using the
infrastructure added in previous patches, we add basic client info
and GPU engine utilisation for msm.

Example output:

# cat /proc/`pgrep glmark2`/fdinfo/6
pos:0
flags:  0242
mnt_id: 21
ino:162
drm-driver: msm
drm-client-id:  7
drm-engine-gpu: 1734371319 ns
drm-cycles-gpu: 1153645024
drm-maxfreq-gpu:8 Hz

See also: https://patchwork.freedesktop.org/patch/468505/

Signed-off-by: Rob Clark 
---
  Documentation/gpu/drm-usage-stats.rst | 21 +
  drivers/gpu/drm/msm/msm_drv.c | 19 ++-
  drivers/gpu/drm/msm/msm_gpu.c | 21 +++--
  drivers/gpu/drm/msm/msm_gpu.h | 19 +++
  4 files changed, 77 insertions(+), 3 deletions(-)

diff --git a/Documentation/gpu/drm-usage-stats.rst 
b/Documentation/gpu/drm-usage-stats.rst
index 6c9f166a8d6f..60e5cc9c13ad 100644
--- a/Documentation/gpu/drm-usage-stats.rst
+++ b/Documentation/gpu/drm-usage-stats.rst
@@ -105,6 +105,27 @@ object belong to this client, in the respective memory 
region.
  Default unit shall be bytes with optional unit specifiers of 'KiB' or 'MiB'
  indicating kibi- or mebi-bytes.
  
+- drm-cycles- 

+
+Engine identifier string must be the same as the one specified in the
+drm-engine- tag and shall contain the number of busy cycles for the given
+engine.
+
+Values are not required to be constantly monotonic if it makes the driver
+implementation easier, but are required to catch up with the previously 
reported
+larger value within a reasonable period. Upon observing a value lower than what
+was previously read, userspace is expected to stay with that larger previous
+value until a monotonic update is seen.
+
+- drm-maxfreq-  [Hz|MHz|KHz]
+
+Engine identifier string must be the same as the one specified in the
+drm-engine- tag and shall contain the maxium frequence for the given


maximum frequency


+engine.  Taken together with drm-cycles-, this can be used to calculate
+percentage utilization of the engine, whereas drm-engine- only refects


reflects


+time active without considering what frequency the engine is operating as a
+percentage of it's maximum frequency.


Cycles vs max freq sounds very useful. My reservations is that how come 
the idea hasn't happened in the CPU world. Or maybe it has and I am 
un-informed?


In any case, if going with this I think we need to clarify the text that 
the value should reflect the current soft limit, where the driver 
supports that, in case it has been set to lower than the maximum 
frequency hardware can support. I am thinking about avoiding "my gpu 
cannot hit 100%" support incidents in cases when user/admin lowered the 
soft limit for some reason. Possibly does not apply to msm but can apply 
to i915, if we decided to export the same data.


No other gotchas come to mind at the moment.

Regards,

Tvrtko


+
  ===
  Driver specific implementations
  ===
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 14ab9a627d8b..57a66093e671 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -948,7 +948,24 @@ static const struct drm_ioctl_desc msm_ioctls[] = {
DRM_IOCTL_DEF_DRV(MSM_SUBMITQUEUE_QUERY, msm_ioctl_submitqueue_query, 
DRM_RENDER_ALLOW),
  };
  
-DEFINE_DRM_GEM_FOPS(fops);

+static void msm_fop_show_fdinfo(struct seq_file *m, struct file *f)
+{
+   struct drm_file *file = f->private_data;
+   struct drm_device *dev = file->minor->dev;
+   struct msm_drm_private *priv = dev->dev_private;
+   struct drm_printer p = drm_seq_file_printer(m);
+
+   if (!priv->gpu)
+   return;
+
+   msm_gpu_show_fdinfo(priv->gpu, file->driver_priv, );
+}
+
+static const struct file_operations fops = {
+   .owner = THIS_MODULE,
+   DRM_GEM_FOPS,
+   .show_fdinfo = msm_fop_show_fdinfo,
+};
  
  static const struct drm_driver msm_driver = {

.driver_features= DRIVER_GEM |
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index eb8a6663f309..333a9a299b41 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -4,6 +4,8 @@
   * Author: Rob Clark 
   */
  
+#include "drm/drm_drv.h"

+
  #include "msm_gpu.h"
  #include "msm_gem.h"
  #include "msm_mmu.h"
@@ -146,6 +148,16 @@ int msm_gpu_pm_suspend(struct msm_gpu *gpu)
return 0;
  }
  
+void msm_gpu_show_fdinfo(struct msm_gpu *gpu, struct msm_file_private *ctx,

+struct drm_printer *p)
+{
+   drm_printf(p, "drm-driver:\t%s\n", gpu->dev->driver->name);
+   drm_printf(p, "drm-client-id:\t%u\n", ctx->seqno);
+   drm_printf(p, "drm-engine-gpu:\t%llu ns\n", ctx->elapsed_ns);
+ 

Re: [PATCH v2 2/2] drm/msm: Expose client engine utilization via fdinfo

2022-06-07 Thread kernel test robot
Hi Rob,

I love your patch! Perhaps something to improve:

[auto build test WARNING on drm/drm-next]
[also build test WARNING on drm-intel/for-linux-next drm-tip/drm-tip v5.19-rc1 
next-20220607]
[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]

url:
https://github.com/intel-lab-lkp/linux/commits/Rob-Clark/drm-Add-DRM_GEM_FOPS/20220607-035529
base:   git://anongit.freedesktop.org/drm/drm drm-next
config: s390-buildonly-randconfig-r008-20220605 
(https://download.01.org/0day-ci/archive/20220607/202206071325.fwdwmg2d-...@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
b92436efcb7813fc481b30f2593a4907568d917a)
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
# install s390 cross compiling tool for clang build
# apt-get install binutils-s390x-linux-gnu
# 
https://github.com/intel-lab-lkp/linux/commit/09342d3c56fa77dacb235908515f0a44ac2fc9c2
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review 
Rob-Clark/drm-Add-DRM_GEM_FOPS/20220607-035529
git checkout 09342d3c56fa77dacb235908515f0a44ac2fc9c2
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 
O=build_dir ARCH=s390 SHELL=/bin/bash drivers/gpu/drm/amd/amdgpu/ 
drivers/gpu/drm/msm/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot 

All warnings (new ones prefixed by >>):

   In file included from drivers/gpu/drm/msm/msm_gpu.c:9:
   In file included from drivers/gpu/drm/msm/msm_gpu.h:10:
   In file included from include/linux/adreno-smmu-priv.h:9:
   In file included from include/linux/io-pgtable.h:6:
   In file included from include/linux/iommu.h:10:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:75:
   include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   val = __raw_readb(PCI_IOBASE + addr);
 ~~ ^
   include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
   ~~ ^
   include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro 
'__le16_to_cpu'
   #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
 ^
   include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
   #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
^
   In file included from drivers/gpu/drm/msm/msm_gpu.c:9:
   In file included from drivers/gpu/drm/msm/msm_gpu.h:10:
   In file included from include/linux/adreno-smmu-priv.h:9:
   In file included from include/linux/io-pgtable.h:6:
   In file included from include/linux/iommu.h:10:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:75:
   include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
   ~~ ^
   include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro 
'__le32_to_cpu'
   #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
 ^
   include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
   #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
^
   In file included from drivers/gpu/drm/msm/msm_gpu.c:9:
   In file included from drivers/gpu/drm/msm/msm_gpu.h:10:
   In file included from include/linux/adreno-smmu-priv.h:9:
   In file included from include/linux/io-pgtable.h:6:
   In file included from include/linux/iommu.h:10:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:75:
   include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   __raw_writeb(value, PCI_IOBASE + addr);
   ~~ ^
   include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a 
null pointer has undefined behavior