From: kernel test robot <lkp@intel.com>
To: Lorenzo Stoakes <lstoakes@gmail.com>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
Andrew Morton <akpm@linux-foundation.org>,
Linux Memory Management List <linux-mm@kvack.org>
Subject: [akpm-mm:mm-unstable 288/290] mm/vmalloc.c:3448:8: warning: no previous prototype for function 'zero_iter'
Date: Thu, 23 Mar 2023 10:48:09 +0800 [thread overview]
Message-ID: <202303231055.DeninwHS-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-unstable
head: 39aca4f17e02ee4076b6ab327577c9b1be23775d
commit: d9cab54f77377439e766e1c5916f79ec2ee27a6c [288/290] mm: vmalloc: convert vread() to vread_iter()
config: i386-randconfig-a002 (https://download.01.org/0day-ci/archive/20230323/202303231055.DeninwHS-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
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/akpm/mm.git/commit/?id=d9cab54f77377439e766e1c5916f79ec2ee27a6c
git remote add akpm-mm https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git
git fetch --no-tags akpm-mm mm-unstable
git checkout d9cab54f77377439e766e1c5916f79ec2ee27a6c
# 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=i386 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303231055.DeninwHS-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> mm/vmalloc.c:3448:8: warning: no previous prototype for function 'zero_iter' [-Wmissing-prototypes]
size_t zero_iter(struct iov_iter *iter, size_t count)
^
mm/vmalloc.c:3448:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
size_t zero_iter(struct iov_iter *iter, size_t count)
^
static
>> mm/vmalloc.c:3543:6: warning: variable 'remains' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (bitmap_empty(vb->used_map, VMAP_BBMAP_BITS)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/vmalloc.c:3587:17: note: uninitialized use occurs here
return count - remains + zero_iter(iter, remains);
^~~~~~~
mm/vmalloc.c:3543:2: note: remove the 'if' if its condition is always false
if (bitmap_empty(vb->used_map, VMAP_BBMAP_BITS)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/vmalloc.c:3539:6: warning: variable 'remains' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (!vb)
^~~
mm/vmalloc.c:3587:17: note: uninitialized use occurs here
return count - remains + zero_iter(iter, remains);
^~~~~~~
mm/vmalloc.c:3539:2: note: remove the 'if' if its condition is always false
if (!vb)
^~~~~~~~
mm/vmalloc.c:3524:16: note: initialize the variable 'remains' to silence this warning
size_t remains, n;
^
= 0
3 warnings generated.
vim +/zero_iter +3448 mm/vmalloc.c
3442
3443 /*
3444 * Atomically zero bytes in the iterator.
3445 *
3446 * Returns the number of zeroed bytes.
3447 */
> 3448 size_t zero_iter(struct iov_iter *iter, size_t count)
3449 {
3450 size_t remains = count;
3451
3452 while (remains > 0) {
3453 size_t num, copied;
3454
3455 num = remains < PAGE_SIZE ? remains : PAGE_SIZE;
3456 copied = copy_page_to_iter_atomic(ZERO_PAGE(0), 0, num, iter);
3457 remains -= copied;
3458
3459 if (copied < num)
3460 break;
3461 }
3462
3463 return count - remains;
3464 }
3465
3466 /*
3467 * small helper routine, copy contents to iter from addr.
3468 * If the page is not present, fill zero.
3469 *
3470 * Returns the number of copied bytes.
3471 */
3472 static size_t aligned_vread_iter(struct iov_iter *iter,
3473 const char *addr, size_t count)
3474 {
3475 size_t remains = count;
3476 struct page *page;
3477
3478 while (remains > 0) {
3479 unsigned long offset, length;
3480 size_t copied = 0;
3481
3482 offset = offset_in_page(addr);
3483 length = PAGE_SIZE - offset;
3484 if (length > remains)
3485 length = remains;
3486 page = vmalloc_to_page(addr);
3487 /*
3488 * To do safe access to this _mapped_ area, we need lock. But
3489 * adding lock here means that we need to add overhead of
3490 * vmalloc()/vfree() calls for this _debug_ interface, rarely
3491 * used. Instead of that, we'll use an local mapping via
3492 * copy_page_to_iter_atomic() and accept a small overhead in
3493 * this access function.
3494 */
3495 if (page)
3496 copied = copy_page_to_iter_atomic(page, offset, length,
3497 iter);
3498
3499 /* Zero anything we were unable to copy. */
3500 copied += zero_iter(iter, length - copied);
3501
3502 addr += copied;
3503 remains -= copied;
3504
3505 if (copied != length)
3506 break;
3507 }
3508
3509 return count - remains;
3510 }
3511
3512 /*
3513 * Read from a vm_map_ram region of memory.
3514 *
3515 * Returns the number of copied bytes.
3516 */
3517 static size_t vmap_ram_vread_iter(struct iov_iter *iter, const char *addr,
3518 size_t count, unsigned long flags)
3519 {
3520 char *start;
3521 struct vmap_block *vb;
3522 unsigned long offset;
3523 unsigned int rs, re;
3524 size_t remains, n;
3525
3526 /*
3527 * If it's area created by vm_map_ram() interface directly, but
3528 * not further subdividing and delegating management to vmap_block,
3529 * handle it here.
3530 */
3531 if (!(flags & VMAP_BLOCK))
3532 return aligned_vread_iter(iter, addr, count);
3533
3534 /*
3535 * Area is split into regions and tracked with vmap_block, read out
3536 * each region and zero fill the hole between regions.
3537 */
3538 vb = xa_load(&vmap_blocks, addr_to_vb_idx((unsigned long)addr));
3539 if (!vb)
3540 goto finished_zero;
3541
3542 spin_lock(&vb->lock);
> 3543 if (bitmap_empty(vb->used_map, VMAP_BBMAP_BITS)) {
3544 spin_unlock(&vb->lock);
3545 goto finished_zero;
3546 }
3547
3548 remains = count;
3549 for_each_set_bitrange(rs, re, vb->used_map, VMAP_BBMAP_BITS) {
3550 size_t copied;
3551
3552 if (remains == 0)
3553 goto finished;
3554
3555 start = vmap_block_vaddr(vb->va->va_start, rs);
3556
3557 if (addr < start) {
3558 size_t to_zero = min_t(size_t, start - addr, remains);
3559 size_t zeroed = zero_iter(iter, to_zero);
3560
3561 addr += zeroed;
3562 remains -= zeroed;
3563
3564 if (remains == 0 || zeroed != to_zero)
3565 goto finished;
3566 }
3567
3568 /*it could start reading from the middle of used region*/
3569 offset = offset_in_page(addr);
3570 n = ((re - rs + 1) << PAGE_SHIFT) - offset;
3571 if (n > remains)
3572 n = remains;
3573
3574 copied = aligned_vread_iter(iter, start + offset, n);
3575
3576 addr += copied;
3577 remains -= copied;
3578
3579 if (copied != n)
3580 goto finished;
3581 }
3582
3583 spin_unlock(&vb->lock);
3584
3585 finished_zero:
3586 /* zero-fill the left dirty or free regions */
3587 return count - remains + zero_iter(iter, remains);
3588 finished:
3589 /* We couldn't copy/zero everything */
3590 spin_unlock(&vb->lock);
3591 return count - remains;
3592 }
3593
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
next reply other threads:[~2023-03-23 2:49 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-23 2:48 kernel test robot [this message]
2023-03-23 9:52 ` [akpm-mm:mm-unstable 288/290] mm/vmalloc.c:3448:8: warning: no previous prototype for function 'zero_iter' Lorenzo Stoakes
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=202303231055.DeninwHS-lkp@intel.com \
--to=lkp@intel.com \
--cc=akpm@linux-foundation.org \
--cc=linux-mm@kvack.org \
--cc=llvm@lists.linux.dev \
--cc=lstoakes@gmail.com \
--cc=oe-kbuild-all@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.