All of lore.kernel.org
 help / color / mirror / Atom feed
* [arm-integrator:kernel-in-vmalloc-v5.18-rc1 17/17] drivers/infiniband/sw/siw/siw_qp_tx.c:538:64: warning: cast to pointer from integer of different size
@ 2022-05-23 12:26 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-05-23 12:26 UTC (permalink / raw)
  To: Linus Walleij; +Cc: kbuild-all, linux-kernel

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git kernel-in-vmalloc-v5.18-rc1
head:   a9b76a04739b5b4dbad86664342c8945e83d8e95
commit: a9b76a04739b5b4dbad86664342c8945e83d8e95 [17/17] RDMA/siw: Pass a pointer to virt_to_page()
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20220523/202205232058.LX5UfEJ1-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 11.3.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://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git/commit/?id=a9b76a04739b5b4dbad86664342c8945e83d8e95
        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 a9b76a04739b5b4dbad86664342c8945e83d8e95
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash drivers/infiniband/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   In file included from arch/m68k/include/asm/page_mm.h:137,
                    from arch/m68k/include/asm/page.h:60,
                    from arch/m68k/include/asm/thread_info.h:6,
                    from include/linux/thread_info.h:60,
                    from include/asm-generic/preempt.h:5,
                    from ./arch/m68k/include/generated/asm/preempt.h:1,
                    from include/linux/preempt.h:78,
                    from arch/m68k/include/asm/irqflags.h:6,
                    from include/linux/irqflags.h:16,
                    from arch/m68k/include/asm/atomic.h:6,
                    from include/linux/atomic.h:7,
                    from include/linux/jump_label.h:256,
                    from include/linux/once.h:6,
                    from include/linux/random.h:9,
                    from include/linux/net.h:18,
                    from drivers/infiniband/sw/siw/siw_qp_tx.c:8:
   drivers/infiniband/sw/siw/siw_qp_tx.c: In function 'siw_tx_hdt':
>> drivers/infiniband/sw/siw/siw_qp_tx.c:538:64: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     538 |                                 page_array[seg] = virt_to_page((void *)(va & PAGE_MASK));
         |                                                                ^
   include/asm-generic/memory_model.h:18:46: note: in definition of macro '__pfn_to_page'
      18 | #define __pfn_to_page(pfn)      (mem_map + ((pfn) - ARCH_PFN_OFFSET))
         |                                              ^~~
   arch/m68k/include/asm/page_mm.h:124:34: note: in expansion of macro '__pa'
     124 | #define virt_to_pfn(kaddr)      (__pa(kaddr) >> PAGE_SHIFT)
         |                                  ^~~~
   arch/m68k/include/asm/page_mm.h:130:21: note: in expansion of macro 'virt_to_pfn'
     130 |         pfn_to_page(virt_to_pfn(addr));                                 \
         |                     ^~~~~~~~~~~
   drivers/infiniband/sw/siw/siw_qp_tx.c:538:51: note: in expansion of macro 'virt_to_page'
     538 |                                 page_array[seg] = virt_to_page((void *)(va & PAGE_MASK));
         |                                                   ^~~~~~~~~~~~


vim +538 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					page_array[seg] = virt_to_page((void *)(va & PAGE_MASK));
   539					if (do_crc)
   540						crypto_shash_update(
   541							c_tx->mpa_crc_hd,
   542							(void *)(uintptr_t)va,
   543							plen);
   544				}
   545	
   546				sge_len -= plen;
   547				sge_off += plen;
   548				data_len -= plen;
   549				fp_off = 0;
   550	
   551				if (++seg > (int)MAX_ARRAY) {
   552					siw_dbg_qp(tx_qp(c_tx), "to many fragments\n");
   553					siw_unmap_pages(iov, kmap_mask, seg-1);
   554					wqe->processed -= c_tx->bytes_unsent;
   555					rv = -EMSGSIZE;
   556					goto done_crc;
   557				}
   558			}
   559	sge_done:
   560			/* Update SGE variables at end of SGE */
   561			if (sge_off == sge->length &&
   562			    (data_len != 0 || wqe->processed < wqe->bytes)) {
   563				sge_idx++;
   564				sge++;
   565				sge_off = 0;
   566			}
   567		}
   568		/* trailer */
   569		if (likely(c_tx->state != SIW_SEND_TRAILER)) {
   570			iov[seg].iov_base = &c_tx->trailer.pad[4 - c_tx->pad];
   571			iov[seg].iov_len = trl_len = MAX_TRAILER - (4 - c_tx->pad);
   572		} else {
   573			iov[seg].iov_base = &c_tx->trailer.pad[c_tx->ctrl_sent];
   574			iov[seg].iov_len = trl_len = MAX_TRAILER - c_tx->ctrl_sent;
   575		}
   576	
   577		if (c_tx->pad) {
   578			*(u32 *)c_tx->trailer.pad = 0;
   579			if (do_crc)
   580				crypto_shash_update(c_tx->mpa_crc_hd,
   581					(u8 *)&c_tx->trailer.crc - c_tx->pad,
   582					c_tx->pad);
   583		}
   584		if (!c_tx->mpa_crc_hd)
   585			c_tx->trailer.crc = 0;
   586		else if (do_crc)
   587			crypto_shash_final(c_tx->mpa_crc_hd, (u8 *)&c_tx->trailer.crc);
   588	
   589		data_len = c_tx->bytes_unsent;
   590	
   591		if (c_tx->use_sendpage) {
   592			rv = siw_0copy_tx(s, page_array, &wqe->sqe.sge[c_tx->sge_idx],
   593					  c_tx->sge_off, data_len);
   594			if (rv == data_len) {
   595				rv = kernel_sendmsg(s, &msg, &iov[seg], 1, trl_len);
   596				if (rv > 0)
   597					rv += data_len;
   598				else
   599					rv = data_len;
   600			}
   601		} else {
   602			rv = kernel_sendmsg(s, &msg, iov, seg + 1,
   603					    hdr_len + data_len + trl_len);
   604			siw_unmap_pages(iov, kmap_mask, seg);
   605		}
   606		if (rv < (int)hdr_len) {
   607			/* Not even complete hdr pushed or negative rv */
   608			wqe->processed -= data_len;
   609			if (rv >= 0) {
   610				c_tx->ctrl_sent += rv;
   611				rv = -EAGAIN;
   612			}
   613			goto done_crc;
   614		}
   615		rv -= hdr_len;
   616	
   617		if (rv >= (int)data_len) {
   618			/* all user data pushed to TCP or no data to push */
   619			if (data_len > 0 && wqe->processed < wqe->bytes) {
   620				/* Save the current state for next tx */
   621				c_tx->sge_idx = sge_idx;
   622				c_tx->sge_off = sge_off;
   623				c_tx->pbl_idx = pbl_idx;
   624			}
   625			rv -= data_len;
   626	
   627			if (rv == trl_len) /* all pushed */
   628				rv = 0;
   629			else {
   630				c_tx->state = SIW_SEND_TRAILER;
   631				c_tx->ctrl_len = MAX_TRAILER;
   632				c_tx->ctrl_sent = rv + 4 - c_tx->pad;
   633				c_tx->bytes_unsent = 0;
   634				rv = -EAGAIN;
   635			}
   636	
   637		} else if (data_len > 0) {
   638			/* Maybe some user data pushed to TCP */
   639			c_tx->state = SIW_SEND_DATA;
   640			wqe->processed -= data_len - rv;
   641	
   642			if (rv) {
   643				/*
   644				 * Some bytes out. Recompute tx state based
   645				 * on old state and bytes pushed
   646				 */
   647				unsigned int sge_unsent;
   648	
   649				c_tx->bytes_unsent -= rv;
   650				sge = &wqe->sqe.sge[c_tx->sge_idx];
   651				sge_unsent = sge->length - c_tx->sge_off;
   652	
   653				while (sge_unsent <= rv) {
   654					rv -= sge_unsent;
   655					c_tx->sge_idx++;
   656					c_tx->sge_off = 0;
   657					sge++;
   658					sge_unsent = sge->length;
   659				}
   660				c_tx->sge_off += rv;
   661			}
   662			rv = -EAGAIN;
   663		}
   664	done_crc:
   665		c_tx->do_crc = 0;
   666	done:
   667		return rv;
   668	}
   669	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-23 12:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-23 12:26 [arm-integrator:kernel-in-vmalloc-v5.18-rc1 17/17] drivers/infiniband/sw/siw/siw_qp_tx.c:538:64: warning: cast to pointer from integer of different size kernel test robot

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.