Re: drivers/media/v4l2-core/v4l2-ioctl.c:303:28: warning: taking address of packed member 'pixelformat' of class or structure 'v4l2_pix_format_mplane' may result in an unaligned pointer value

From: Andy Shevchenko
Date: Sun Jan 09 2022 - 09:27:09 EST


+Nick Desaulniers

Any ideas on how to fix this?


On Sun, Jan 9, 2022 at 3:53 PM kernel test robot <lkp@xxxxxxxxx> wrote:
>
> Hi Sakari,
>
> FYI, the error/warning still remains.
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: d1587f7bfe9a0f97a75d42ac1489aeda551106bc
> commit: e927e1e0f0dd3e353d5556503a71484008692c82 v4l: ioctl: Use %p4cc printk modifier to print FourCC codes
> date: 11 months ago
> config: mips-buildonly-randconfig-r002-20220107 (https://download.01.org/0day-ci/archive/20220108/202201081852.uTfBqS4b-lkp@xxxxxxxxx/config)
> compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 32167bfe64a4c5dd4eb3f7a58e24f4cba76f5ac2)
> 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 mips cross compiling tool for clang build
> # apt-get install binutils-mips-linux-gnu
> # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e927e1e0f0dd3e353d5556503a71484008692c82
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git fetch --no-tags linus master
> git checkout e927e1e0f0dd3e353d5556503a71484008692c82
> # save the config file to linux build tree
> mkdir build_dir
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash drivers/hid/ drivers/media/v4l2-core/ fs/
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@xxxxxxxxx>
>
> All warnings (new ones prefixed by >>):
>
> >> drivers/media/v4l2-core/v4l2-ioctl.c:303:28: warning: taking address of packed member 'pixelformat' of class or structure 'v4l2_pix_format_mplane' may result in an unaligned pointer value [-Waddress-of-packed-member]
> mp->width, mp->height, &mp->pixelformat,
> ^~~~~~~~~~~~~~~
> include/linux/printk.h:385:26: note: expanded from macro 'pr_cont'
> printk(KERN_CONT fmt, ##__VA_ARGS__)
> ^~~~~~~~~~~
> >> drivers/media/v4l2-core/v4l2-ioctl.c:347:37: warning: taking address of packed member 'pixelformat' of class or structure 'v4l2_sdr_format' may result in an unaligned pointer value [-Waddress-of-packed-member]
> pr_cont(", pixelformat=%p4cc\n", &sdr->pixelformat);
> ^~~~~~~~~~~~~~~~
> include/linux/printk.h:385:26: note: expanded from macro 'pr_cont'
> printk(KERN_CONT fmt, ##__VA_ARGS__)
> ^~~~~~~~~~~
> >> drivers/media/v4l2-core/v4l2-ioctl.c:353:5: warning: taking address of packed member 'dataformat' of class or structure 'v4l2_meta_format' may result in an unaligned pointer value [-Waddress-of-packed-member]
> &meta->dataformat, meta->buffersize);
> ^~~~~~~~~~~~~~~~
> include/linux/printk.h:385:26: note: expanded from macro 'pr_cont'
> printk(KERN_CONT fmt, ##__VA_ARGS__)
> ^~~~~~~~~~~
> 3 warnings generated.
>
>
> vim +303 drivers/media/v4l2-core/v4l2-ioctl.c
>
> 273
> 274 static void v4l_print_format(const void *arg, bool write_only)
> 275 {
> 276 const struct v4l2_format *p = arg;
> 277 const struct v4l2_pix_format *pix;
> 278 const struct v4l2_pix_format_mplane *mp;
> 279 const struct v4l2_vbi_format *vbi;
> 280 const struct v4l2_sliced_vbi_format *sliced;
> 281 const struct v4l2_window *win;
> 282 const struct v4l2_sdr_format *sdr;
> 283 const struct v4l2_meta_format *meta;
> 284 u32 planes;
> 285 unsigned i;
> 286
> 287 pr_cont("type=%s", prt_names(p->type, v4l2_type_names));
> 288 switch (p->type) {
> 289 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
> 290 case V4L2_BUF_TYPE_VIDEO_OUTPUT:
> 291 pix = &p->fmt.pix;
> 292 pr_cont(", width=%u, height=%u, pixelformat=%p4cc, field=%s, bytesperline=%u, sizeimage=%u, colorspace=%d, flags=0x%x, ycbcr_enc=%u, quantization=%u, xfer_func=%u\n",
> 293 pix->width, pix->height, &pix->pixelformat,
> 294 prt_names(pix->field, v4l2_field_names),
> 295 pix->bytesperline, pix->sizeimage,
> 296 pix->colorspace, pix->flags, pix->ycbcr_enc,
> 297 pix->quantization, pix->xfer_func);
> 298 break;
> 299 case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
> 300 case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
> 301 mp = &p->fmt.pix_mp;
> 302 pr_cont(", width=%u, height=%u, format=%p4cc, field=%s, colorspace=%d, num_planes=%u, flags=0x%x, ycbcr_enc=%u, quantization=%u, xfer_func=%u\n",
> > 303 mp->width, mp->height, &mp->pixelformat,
> 304 prt_names(mp->field, v4l2_field_names),
> 305 mp->colorspace, mp->num_planes, mp->flags,
> 306 mp->ycbcr_enc, mp->quantization, mp->xfer_func);
> 307 planes = min_t(u32, mp->num_planes, VIDEO_MAX_PLANES);
> 308 for (i = 0; i < planes; i++)
> 309 printk(KERN_DEBUG "plane %u: bytesperline=%u sizeimage=%u\n", i,
> 310 mp->plane_fmt[i].bytesperline,
> 311 mp->plane_fmt[i].sizeimage);
> 312 break;
> 313 case V4L2_BUF_TYPE_VIDEO_OVERLAY:
> 314 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY:
> 315 win = &p->fmt.win;
> 316 /* Note: we can't print the clip list here since the clips
> 317 * pointer is a userspace pointer, not a kernelspace
> 318 * pointer. */
> 319 pr_cont(", wxh=%dx%d, x,y=%d,%d, field=%s, chromakey=0x%08x, clipcount=%u, clips=%p, bitmap=%p, global_alpha=0x%02x\n",
> 320 win->w.width, win->w.height, win->w.left, win->w.top,
> 321 prt_names(win->field, v4l2_field_names),
> 322 win->chromakey, win->clipcount, win->clips,
> 323 win->bitmap, win->global_alpha);
> 324 break;
> 325 case V4L2_BUF_TYPE_VBI_CAPTURE:
> 326 case V4L2_BUF_TYPE_VBI_OUTPUT:
> 327 vbi = &p->fmt.vbi;
> 328 pr_cont(", sampling_rate=%u, offset=%u, samples_per_line=%u, sample_format=%p4cc, start=%u,%u, count=%u,%u\n",
> 329 vbi->sampling_rate, vbi->offset,
> 330 vbi->samples_per_line, &vbi->sample_format,
> 331 vbi->start[0], vbi->start[1],
> 332 vbi->count[0], vbi->count[1]);
> 333 break;
> 334 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
> 335 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
> 336 sliced = &p->fmt.sliced;
> 337 pr_cont(", service_set=0x%08x, io_size=%d\n",
> 338 sliced->service_set, sliced->io_size);
> 339 for (i = 0; i < 24; i++)
> 340 printk(KERN_DEBUG "line[%02u]=0x%04x, 0x%04x\n", i,
> 341 sliced->service_lines[0][i],
> 342 sliced->service_lines[1][i]);
> 343 break;
> 344 case V4L2_BUF_TYPE_SDR_CAPTURE:
> 345 case V4L2_BUF_TYPE_SDR_OUTPUT:
> 346 sdr = &p->fmt.sdr;
> > 347 pr_cont(", pixelformat=%p4cc\n", &sdr->pixelformat);
> 348 break;
> 349 case V4L2_BUF_TYPE_META_CAPTURE:
> 350 case V4L2_BUF_TYPE_META_OUTPUT:
> 351 meta = &p->fmt.meta;
> 352 pr_cont(", dataformat=%p4cc, buffersize=%u\n",
> > 353 &meta->dataformat, meta->buffersize);
> 354 break;
> 355 }
> 356 }
> 357
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx



--
With Best Regards,
Andy Shevchenko