From: kernel test robot <lkp@intel.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
linux-kernel@vger.kernel.org
Subject: [arm-integrator:kernel-in-vmalloc-v5.18-rc1 19/20] drivers/infiniband/sw/siw/siw_qp_tx.c:545:45: error: use of undeclared identifier 'unintptr_t'
Date: Tue, 31 May 2022 10:24:25 +0800 [thread overview]
Message-ID: <202205311028.2XN0vbvg-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git kernel-in-vmalloc-v5.18-rc1
head: eae5a86aafbe4bfbcb5c21b271073b014626a472
commit: d636d650bc9e9d1966fbc3b163c5f97db5ef5dc5 [19/20] RDMA/siw: Pass a pointer to virt_to_page()
config: arm-randconfig-r033-20220530 (https://download.01.org/0day-ci/archive/20220531/202205311028.2XN0vbvg-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 0776c48f9b7e69fa447bee57c7c0985caa856be9)
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 arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git/commit/?id=d636d650bc9e9d1966fbc3b163c5f97db5ef5dc5
git remote add arm-integrator https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git
git fetch --no-tags arm-integrator kernel-in-vmalloc-v5.18-rc1
git checkout d636d650bc9e9d1966fbc3b163c5f97db5ef5dc5
# 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=arm SHELL=/bin/bash drivers/infiniband/sw/siw/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> drivers/infiniband/sw/siw/siw_qp_tx.c:545:45: error: use of undeclared identifier 'unintptr_t'
page_array[seg] = virt_to_page((void *)(unintptr_t)(va & PAGE_MASK));
^
1 error generated.
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for DRM_GEM_SHMEM_HELPER
Depends on HAS_IOMEM && DRM && MMU
Selected by
- DRM_SSD130X && HAS_IOMEM && DRM
vim +/unintptr_t +545 drivers/infiniband/sw/siw/siw_qp_tx.c
426
427 /*
428 * Write out iov referencing hdr, data and trailer of current FPDU.
429 * Update transmit state dependent on write return status
430 */
431 static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, struct socket *s)
432 {
433 struct siw_wqe *wqe = &c_tx->wqe_active;
434 struct siw_sge *sge = &wqe->sqe.sge[c_tx->sge_idx];
435 struct kvec iov[MAX_ARRAY];
436 struct page *page_array[MAX_ARRAY];
437 struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_EOR };
438
439 int seg = 0, do_crc = c_tx->do_crc, is_kva = 0, rv;
440 unsigned int data_len = c_tx->bytes_unsent, hdr_len = 0, trl_len = 0,
441 sge_off = c_tx->sge_off, sge_idx = c_tx->sge_idx,
442 pbl_idx = c_tx->pbl_idx;
443 unsigned long kmap_mask = 0L;
444
445 if (c_tx->state == SIW_SEND_HDR) {
446 if (c_tx->use_sendpage) {
447 rv = siw_tx_ctrl(c_tx, s, MSG_DONTWAIT | MSG_MORE);
448 if (rv)
449 goto done;
450
451 c_tx->state = SIW_SEND_DATA;
452 } else {
453 iov[0].iov_base =
454 (char *)&c_tx->pkt.ctrl + c_tx->ctrl_sent;
455 iov[0].iov_len = hdr_len =
456 c_tx->ctrl_len - c_tx->ctrl_sent;
457 seg = 1;
458 }
459 }
460
461 wqe->processed += data_len;
462
463 while (data_len) { /* walk the list of SGE's */
464 unsigned int sge_len = min(sge->length - sge_off, data_len);
465 unsigned int fp_off = (sge->laddr + sge_off) & ~PAGE_MASK;
466 struct siw_mem *mem;
467
468 if (!(tx_flags(wqe) & SIW_WQE_INLINE)) {
469 mem = wqe->mem[sge_idx];
470 is_kva = mem->mem_obj == NULL ? 1 : 0;
471 } else {
472 is_kva = 1;
473 }
474 if (is_kva && !c_tx->use_sendpage) {
475 /*
476 * tx from kernel virtual address: either inline data
477 * or memory region with assigned kernel buffer
478 */
479 iov[seg].iov_base =
480 (void *)(uintptr_t)(sge->laddr + sge_off);
481 iov[seg].iov_len = sge_len;
482
483 if (do_crc)
484 crypto_shash_update(c_tx->mpa_crc_hd,
485 iov[seg].iov_base,
486 sge_len);
487 sge_off += sge_len;
488 data_len -= sge_len;
489 seg++;
490 goto sge_done;
491 }
492
493 while (sge_len) {
494 size_t plen = min((int)PAGE_SIZE - fp_off, sge_len);
495 void *kaddr;
496
497 if (!is_kva) {
498 struct page *p;
499
500 if (mem->is_pbl)
501 p = siw_get_pblpage(
502 mem, sge->laddr + sge_off,
503 &pbl_idx);
504 else
505 p = siw_get_upage(mem->umem,
506 sge->laddr + sge_off);
507 if (unlikely(!p)) {
508 siw_unmap_pages(iov, kmap_mask, seg);
509 wqe->processed -= c_tx->bytes_unsent;
510 rv = -EFAULT;
511 goto done_crc;
512 }
513 page_array[seg] = p;
514
515 if (!c_tx->use_sendpage) {
516 void *kaddr = kmap_local_page(p);
517
518 /* Remember for later kunmap() */
519 kmap_mask |= BIT(seg);
520 iov[seg].iov_base = kaddr + fp_off;
521 iov[seg].iov_len = plen;
522
523 if (do_crc)
524 crypto_shash_update(
525 c_tx->mpa_crc_hd,
526 iov[seg].iov_base,
527 plen);
528 } else if (do_crc) {
529 kaddr = kmap_local_page(p);
530 crypto_shash_update(c_tx->mpa_crc_hd,
531 kaddr + fp_off,
532 plen);
533 kunmap_local(kaddr);
534 }
535 } else {
536 u64 va = sge->laddr + sge_off;
537
538 /*
539 * virt_to_page() takes a (void *) pointer, and the va being uint64
540 * creates a special problem here needing a double cast to resolve the
541 * situation: first to (uintptr_t) to preserve all the 64 bits and from
542 * there to a (void *) meaning it will be 64 bits on a 64 bit platform
543 * and 32 bits on a 32 bit platform.
544 */
> 545 page_array[seg] = virt_to_page((void *)(unintptr_t)(va & PAGE_MASK));
546 if (do_crc)
547 crypto_shash_update(
548 c_tx->mpa_crc_hd,
549 (void *)(uintptr_t)va,
550 plen);
551 }
552
553 sge_len -= plen;
554 sge_off += plen;
555 data_len -= plen;
556 fp_off = 0;
557
558 if (++seg > (int)MAX_ARRAY) {
559 siw_dbg_qp(tx_qp(c_tx), "to many fragments\n");
560 siw_unmap_pages(iov, kmap_mask, seg-1);
561 wqe->processed -= c_tx->bytes_unsent;
562 rv = -EMSGSIZE;
563 goto done_crc;
564 }
565 }
566 sge_done:
567 /* Update SGE variables at end of SGE */
568 if (sge_off == sge->length &&
569 (data_len != 0 || wqe->processed < wqe->bytes)) {
570 sge_idx++;
571 sge++;
572 sge_off = 0;
573 }
574 }
575 /* trailer */
576 if (likely(c_tx->state != SIW_SEND_TRAILER)) {
577 iov[seg].iov_base = &c_tx->trailer.pad[4 - c_tx->pad];
578 iov[seg].iov_len = trl_len = MAX_TRAILER - (4 - c_tx->pad);
579 } else {
580 iov[seg].iov_base = &c_tx->trailer.pad[c_tx->ctrl_sent];
581 iov[seg].iov_len = trl_len = MAX_TRAILER - c_tx->ctrl_sent;
582 }
583
584 if (c_tx->pad) {
585 *(u32 *)c_tx->trailer.pad = 0;
586 if (do_crc)
587 crypto_shash_update(c_tx->mpa_crc_hd,
588 (u8 *)&c_tx->trailer.crc - c_tx->pad,
589 c_tx->pad);
590 }
591 if (!c_tx->mpa_crc_hd)
592 c_tx->trailer.crc = 0;
593 else if (do_crc)
594 crypto_shash_final(c_tx->mpa_crc_hd, (u8 *)&c_tx->trailer.crc);
595
596 data_len = c_tx->bytes_unsent;
597
598 if (c_tx->use_sendpage) {
599 rv = siw_0copy_tx(s, page_array, &wqe->sqe.sge[c_tx->sge_idx],
600 c_tx->sge_off, data_len);
601 if (rv == data_len) {
602 rv = kernel_sendmsg(s, &msg, &iov[seg], 1, trl_len);
603 if (rv > 0)
604 rv += data_len;
605 else
606 rv = data_len;
607 }
608 } else {
609 rv = kernel_sendmsg(s, &msg, iov, seg + 1,
610 hdr_len + data_len + trl_len);
611 siw_unmap_pages(iov, kmap_mask, seg);
612 }
613 if (rv < (int)hdr_len) {
614 /* Not even complete hdr pushed or negative rv */
615 wqe->processed -= data_len;
616 if (rv >= 0) {
617 c_tx->ctrl_sent += rv;
618 rv = -EAGAIN;
619 }
620 goto done_crc;
621 }
622 rv -= hdr_len;
623
624 if (rv >= (int)data_len) {
625 /* all user data pushed to TCP or no data to push */
626 if (data_len > 0 && wqe->processed < wqe->bytes) {
627 /* Save the current state for next tx */
628 c_tx->sge_idx = sge_idx;
629 c_tx->sge_off = sge_off;
630 c_tx->pbl_idx = pbl_idx;
631 }
632 rv -= data_len;
633
634 if (rv == trl_len) /* all pushed */
635 rv = 0;
636 else {
637 c_tx->state = SIW_SEND_TRAILER;
638 c_tx->ctrl_len = MAX_TRAILER;
639 c_tx->ctrl_sent = rv + 4 - c_tx->pad;
640 c_tx->bytes_unsent = 0;
641 rv = -EAGAIN;
642 }
643
644 } else if (data_len > 0) {
645 /* Maybe some user data pushed to TCP */
646 c_tx->state = SIW_SEND_DATA;
647 wqe->processed -= data_len - rv;
648
649 if (rv) {
650 /*
651 * Some bytes out. Recompute tx state based
652 * on old state and bytes pushed
653 */
654 unsigned int sge_unsent;
655
656 c_tx->bytes_unsent -= rv;
657 sge = &wqe->sqe.sge[c_tx->sge_idx];
658 sge_unsent = sge->length - c_tx->sge_off;
659
660 while (sge_unsent <= rv) {
661 rv -= sge_unsent;
662 c_tx->sge_idx++;
663 c_tx->sge_off = 0;
664 sge++;
665 sge_unsent = sge->length;
666 }
667 c_tx->sge_off += rv;
668 }
669 rv = -EAGAIN;
670 }
671 done_crc:
672 c_tx->do_crc = 0;
673 done:
674 return rv;
675 }
676
--
0-DAY CI Kernel Test Service
https://01.org/lkp
reply other threads:[~2022-05-31 2:24 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202205311028.2XN0vbvg-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
--cc=linus.walleij@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
/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.