From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: drivers/vhost/vdpa.c:303:13: sparse: expected unsigned int const
Date: Wed, 30 Sep 2020 01:48:35 +0800 [thread overview]
Message-ID: <202009300132.jg2WK6Bn-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 19561 bytes --]
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Tiwei Bie <tiwei.bie@intel.com>
CC: "Michael S. Tsirkin" <mst@redhat.com>
CC: "Eugenio Pérez" <eperezma@redhat.com>
CC: Jason Wang <jasowang@redhat.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: fb0155a09b0224a7147cb07a4ce6034c8d29667f
commit: 4c8cf31885f69e86be0b5b9e6677a26797365e1d vhost: introduce vDPA-based backend
date: 6 months ago
:::::: branch date: 24 hours ago
:::::: commit date: 6 months ago
config: sh-randconfig-s031-20200929 (attached as .config)
compiler: sh4-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.2-201-g24bdaac6-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4c8cf31885f69e86be0b5b9e6677a26797365e1d
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 4c8cf31885f69e86be0b5b9e6677a26797365e1d
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=sh
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
echo
echo "sparse warnings: (new ones prefixed by >>)"
echo
drivers/vhost/vhost.c:1530:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] <asn:1> *idxp @@
drivers/vhost/vhost.c:1530:13: sparse: expected unsigned int const *__gu_addr
drivers/vhost/vhost.c:1530:13: sparse: got unsigned int [noderef] [usertype] <asn:1> *idxp
drivers/vhost/vhost.c:1530:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] <asn:1> * @@ got unsigned int const *__gu_addr @@
drivers/vhost/vhost.c:1530:13: sparse: expected void const volatile [noderef] <asn:1> *
>> drivers/vhost/vhost.c:1530:13: sparse: got unsigned int const *__gu_addr
drivers/vhost/vhost.c:1727:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] <asn:1> * @@
drivers/vhost/vhost.c:1727:21: sparse: expected int const *__gu_addr
drivers/vhost/vhost.c:1727:21: sparse: got int [noderef] <asn:1> *
drivers/vhost/vhost.c:1727:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] <asn:1> * @@ got int const *__gu_addr @@
drivers/vhost/vhost.c:1727:21: sparse: expected void const volatile [noderef] <asn:1> *
>> drivers/vhost/vhost.c:1727:21: sparse: got int const *__gu_addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:917:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] <asn:1> * @@
drivers/vhost/vhost.c:917:16: sparse: expected void *addr
drivers/vhost/vhost.c:917:16: sparse: got restricted __virtio16 [noderef] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:902:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] [usertype] <asn:1> * @@
drivers/vhost/vhost.c:902:16: sparse: expected void *addr
drivers/vhost/vhost.c:902:16: sparse: got restricted __virtio16 [noderef] [usertype] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:994:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] <asn:1> * @@
drivers/vhost/vhost.c:994:16: sparse: expected void *addr
drivers/vhost/vhost.c:994:16: sparse: got restricted __virtio16 [noderef] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:969:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] <asn:1> * @@
drivers/vhost/vhost.c:969:16: sparse: expected void *addr
drivers/vhost/vhost.c:969:16: sparse: got restricted __virtio16 [noderef] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:975:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] <asn:1> * @@
drivers/vhost/vhost.c:975:16: sparse: expected void *addr
drivers/vhost/vhost.c:975:16: sparse: got restricted __virtio16 [noderef] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:924:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] <asn:1> * @@
drivers/vhost/vhost.c:924:16: sparse: expected void *addr
drivers/vhost/vhost.c:924:16: sparse: got restricted __virtio16 [noderef] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:982:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] <asn:1> * @@
drivers/vhost/vhost.c:982:16: sparse: expected void *addr
drivers/vhost/vhost.c:982:16: sparse: got restricted __virtio16 [noderef] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:988:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] [usertype] <asn:1> * @@
drivers/vhost/vhost.c:988:16: sparse: expected void *addr
drivers/vhost/vhost.c:988:16: sparse: got restricted __virtio16 [noderef] [usertype] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:969:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] <asn:1> * @@
drivers/vhost/vhost.c:969:16: sparse: expected void *addr
drivers/vhost/vhost.c:969:16: sparse: got restricted __virtio16 [noderef] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
drivers/vhost/vhost.c:969:16: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *addr @@ got restricted __virtio16 [noderef] <asn:1> * @@
drivers/vhost/vhost.c:969:16: sparse: expected void *addr
drivers/vhost/vhost.c:969:16: sparse: got restricted __virtio16 [noderef] <asn:1> *
drivers/vhost/vhost.c:880:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] <asn:1> *addr @@ got void *addr @@
drivers/vhost/vhost.c:880:42: sparse: expected void [noderef] <asn:1> *addr
drivers/vhost/vhost.c:880:42: sparse: got void *addr
drivers/vhost/vhost.c:733:17: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got void * @@
drivers/vhost/vhost.c:733:17: sparse: expected void [noderef] <asn:1> *
drivers/vhost/vhost.c:733:17: sparse: got void *
--
drivers/vhost/vdpa.c: note: in included file (through arch/sh/include/asm/unistd.h, include/uapi/linux/unistd.h, include/linux/compat.h, ...):
./arch/sh/include/generated/uapi/asm/unistd_32.h:411:37: sparse: sparse: no newline at end of file
drivers/vhost/vdpa.c:303:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] <asn:1> * @@
>> drivers/vhost/vdpa.c:303:13: sparse: expected unsigned int const *__gu_addr
drivers/vhost/vdpa.c:303:13: sparse: got unsigned int [noderef] [usertype] <asn:1> *
drivers/vhost/vdpa.c:303:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] <asn:1> * @@ got unsigned int const *__gu_addr @@
drivers/vhost/vdpa.c:303:13: sparse: expected void const volatile [noderef] <asn:1> *
>> drivers/vhost/vdpa.c:303:13: sparse: got unsigned int const *__gu_addr
vim +303 drivers/vhost/vdpa.c
4c8cf31885f69e Tiwei Bie 2020-03-26 290
4c8cf31885f69e Tiwei Bie 2020-03-26 291 static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,
4c8cf31885f69e Tiwei Bie 2020-03-26 292 void __user *argp)
4c8cf31885f69e Tiwei Bie 2020-03-26 293 {
4c8cf31885f69e Tiwei Bie 2020-03-26 294 struct vdpa_device *vdpa = v->vdpa;
4c8cf31885f69e Tiwei Bie 2020-03-26 295 const struct vdpa_config_ops *ops = vdpa->config;
4c8cf31885f69e Tiwei Bie 2020-03-26 296 struct vdpa_callback cb;
4c8cf31885f69e Tiwei Bie 2020-03-26 297 struct vhost_virtqueue *vq;
4c8cf31885f69e Tiwei Bie 2020-03-26 298 struct vhost_vring_state s;
4c8cf31885f69e Tiwei Bie 2020-03-26 299 u8 status;
4c8cf31885f69e Tiwei Bie 2020-03-26 300 u32 idx;
4c8cf31885f69e Tiwei Bie 2020-03-26 301 long r;
4c8cf31885f69e Tiwei Bie 2020-03-26 302
4c8cf31885f69e Tiwei Bie 2020-03-26 @303 r = get_user(idx, (u32 __user *)argp);
4c8cf31885f69e Tiwei Bie 2020-03-26 304 if (r < 0)
4c8cf31885f69e Tiwei Bie 2020-03-26 305 return r;
4c8cf31885f69e Tiwei Bie 2020-03-26 306
4c8cf31885f69e Tiwei Bie 2020-03-26 307 if (idx >= v->nvqs)
4c8cf31885f69e Tiwei Bie 2020-03-26 308 return -ENOBUFS;
4c8cf31885f69e Tiwei Bie 2020-03-26 309
4c8cf31885f69e Tiwei Bie 2020-03-26 310 idx = array_index_nospec(idx, v->nvqs);
4c8cf31885f69e Tiwei Bie 2020-03-26 311 vq = &v->vqs[idx];
4c8cf31885f69e Tiwei Bie 2020-03-26 312
4c8cf31885f69e Tiwei Bie 2020-03-26 313 status = ops->get_status(vdpa);
4c8cf31885f69e Tiwei Bie 2020-03-26 314
4c8cf31885f69e Tiwei Bie 2020-03-26 315 if (cmd == VHOST_VDPA_SET_VRING_ENABLE) {
4c8cf31885f69e Tiwei Bie 2020-03-26 316 if (copy_from_user(&s, argp, sizeof(s)))
4c8cf31885f69e Tiwei Bie 2020-03-26 317 return -EFAULT;
4c8cf31885f69e Tiwei Bie 2020-03-26 318 ops->set_vq_ready(vdpa, idx, s.num);
4c8cf31885f69e Tiwei Bie 2020-03-26 319 return 0;
4c8cf31885f69e Tiwei Bie 2020-03-26 320 }
4c8cf31885f69e Tiwei Bie 2020-03-26 321
4c8cf31885f69e Tiwei Bie 2020-03-26 322 if (cmd == VHOST_GET_VRING_BASE)
4c8cf31885f69e Tiwei Bie 2020-03-26 323 vq->last_avail_idx = ops->get_vq_state(v->vdpa, idx);
4c8cf31885f69e Tiwei Bie 2020-03-26 324
4c8cf31885f69e Tiwei Bie 2020-03-26 325 r = vhost_vring_ioctl(&v->vdev, cmd, argp);
4c8cf31885f69e Tiwei Bie 2020-03-26 326 if (r)
4c8cf31885f69e Tiwei Bie 2020-03-26 327 return r;
4c8cf31885f69e Tiwei Bie 2020-03-26 328
4c8cf31885f69e Tiwei Bie 2020-03-26 329 switch (cmd) {
4c8cf31885f69e Tiwei Bie 2020-03-26 330 case VHOST_SET_VRING_ADDR:
4c8cf31885f69e Tiwei Bie 2020-03-26 331 if (ops->set_vq_address(vdpa, idx,
4c8cf31885f69e Tiwei Bie 2020-03-26 332 (u64)(uintptr_t)vq->desc,
4c8cf31885f69e Tiwei Bie 2020-03-26 333 (u64)(uintptr_t)vq->avail,
4c8cf31885f69e Tiwei Bie 2020-03-26 334 (u64)(uintptr_t)vq->used))
4c8cf31885f69e Tiwei Bie 2020-03-26 335 r = -EINVAL;
4c8cf31885f69e Tiwei Bie 2020-03-26 336 break;
4c8cf31885f69e Tiwei Bie 2020-03-26 337
4c8cf31885f69e Tiwei Bie 2020-03-26 338 case VHOST_SET_VRING_BASE:
4c8cf31885f69e Tiwei Bie 2020-03-26 339 if (ops->set_vq_state(vdpa, idx, vq->last_avail_idx))
4c8cf31885f69e Tiwei Bie 2020-03-26 340 r = -EINVAL;
4c8cf31885f69e Tiwei Bie 2020-03-26 341 break;
4c8cf31885f69e Tiwei Bie 2020-03-26 342
4c8cf31885f69e Tiwei Bie 2020-03-26 343 case VHOST_SET_VRING_CALL:
4c8cf31885f69e Tiwei Bie 2020-03-26 344 if (vq->call_ctx) {
4c8cf31885f69e Tiwei Bie 2020-03-26 345 cb.callback = vhost_vdpa_virtqueue_cb;
4c8cf31885f69e Tiwei Bie 2020-03-26 346 cb.private = vq;
4c8cf31885f69e Tiwei Bie 2020-03-26 347 } else {
4c8cf31885f69e Tiwei Bie 2020-03-26 348 cb.callback = NULL;
4c8cf31885f69e Tiwei Bie 2020-03-26 349 cb.private = NULL;
4c8cf31885f69e Tiwei Bie 2020-03-26 350 }
4c8cf31885f69e Tiwei Bie 2020-03-26 351 ops->set_vq_cb(vdpa, idx, &cb);
4c8cf31885f69e Tiwei Bie 2020-03-26 352 break;
4c8cf31885f69e Tiwei Bie 2020-03-26 353
4c8cf31885f69e Tiwei Bie 2020-03-26 354 case VHOST_SET_VRING_NUM:
4c8cf31885f69e Tiwei Bie 2020-03-26 355 ops->set_vq_num(vdpa, idx, vq->num);
4c8cf31885f69e Tiwei Bie 2020-03-26 356 break;
4c8cf31885f69e Tiwei Bie 2020-03-26 357 }
4c8cf31885f69e Tiwei Bie 2020-03-26 358
4c8cf31885f69e Tiwei Bie 2020-03-26 359 return r;
4c8cf31885f69e Tiwei Bie 2020-03-26 360 }
4c8cf31885f69e Tiwei Bie 2020-03-26 361
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 18813 bytes --]
next reply other threads:[~2020-09-29 17:48 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-29 17:48 kernel test robot [this message]
2020-10-28 14:44 drivers/vhost/vdpa.c:303:13: sparse: expected unsigned int const kernel test robot
2020-10-29 14:56 kernel test robot
2020-10-29 14:56 ` kernel test robot
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=202009300132.jg2WK6Bn-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.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.