Hi Cindy, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on mst-vhost/linux-next] [also build test WARNING on linux/master linus/master v5.18-rc6] [cannot apply to next-20220506] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/intel-lab-lkp/linux/commits/Cindy-Lu/vdpa-Do-not-count-the-pages-that-were-already-pinned-in-the-vhost-vDPA/20220509-152644 base: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next config: s390-randconfig-r044-20220509 (https://download.01.org/0day-ci/archive/20220509/202205091928.dheTGNAt-lkp@xxxxxxxxx/config) compiler: s390-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://github.com/intel-lab-lkp/linux/commit/4225cc2a756b75d1e0ff7ca2a593bada42def380 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Cindy-Lu/vdpa-Do-not-count-the-pages-that-were-already-pinned-in-the-vhost-vDPA/20220509-152644 git checkout 4225cc2a756b75d1e0ff7ca2a593bada42def380 # 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=s390 SHELL=/bin/bash drivers/vhost/ 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/vhost/vdpa.c:542:5: warning: no previous prototype for 'vhost_vdpa_add_range_ctx' [-Wmissing-prototypes] 542 | int vhost_vdpa_add_range_ctx(struct rb_root_cached *root, u64 start, u64 last) | ^~~~~~~~~~~~~~~~~~~~~~~~ >> drivers/vhost/vdpa.c:571:6: warning: no previous prototype for 'vhost_vdpa_del_range' [-Wmissing-prototypes] 571 | void vhost_vdpa_del_range(struct rb_root_cached *root, u64 start, u64 last) | ^~~~~~~~~~~~~~~~~~~~ >> drivers/vhost/vdpa.c:581:28: warning: no previous prototype for 'vhost_vdpa_search_range' [-Wmissing-prototypes] 581 | struct interval_tree_node *vhost_vdpa_search_range(struct rb_root_cached *root, | ^~~~~~~~~~~~~~~~~~~~~~~ vim +/vhost_vdpa_add_range_ctx +542 drivers/vhost/vdpa.c 464 465 static long vhost_vdpa_unlocked_ioctl(struct file *filep, 466 unsigned int cmd, unsigned long arg) 467 { 468 struct vhost_vdpa *v = filep->private_data; 469 struct vhost_dev *d = &v->vdev; 470 void __user *argp = (void __user *)arg; 471 u64 __user *featurep = argp; 472 u64 features; 473 long r = 0; 474 475 if (cmd == VHOST_SET_BACKEND_FEATURES) { 476 if (copy_from_user(&features, featurep, sizeof(features))) 477 return -EFAULT; 478 if (features & ~VHOST_VDPA_BACKEND_FEATURES) 479 return -EOPNOTSUPP; 480 vhost_set_backend_features(&v->vdev, features); 481 return 0; 482 } 483 484 mutex_lock(&d->mutex); 485 486 switch (cmd) { 487 case VHOST_VDPA_GET_DEVICE_ID: 488 r = vhost_vdpa_get_device_id(v, argp); 489 break; 490 case VHOST_VDPA_GET_STATUS: 491 r = vhost_vdpa_get_status(v, argp); 492 break; 493 case VHOST_VDPA_SET_STATUS: 494 r = vhost_vdpa_set_status(v, argp); 495 break; 496 case VHOST_VDPA_GET_CONFIG: 497 r = vhost_vdpa_get_config(v, argp); 498 break; 499 case VHOST_VDPA_SET_CONFIG: 500 r = vhost_vdpa_set_config(v, argp); 501 break; 502 case VHOST_GET_FEATURES: 503 r = vhost_vdpa_get_features(v, argp); 504 break; 505 case VHOST_SET_FEATURES: 506 r = vhost_vdpa_set_features(v, argp); 507 break; 508 case VHOST_VDPA_GET_VRING_NUM: 509 r = vhost_vdpa_get_vring_num(v, argp); 510 break; 511 case VHOST_SET_LOG_BASE: 512 case VHOST_SET_LOG_FD: 513 r = -ENOIOCTLCMD; 514 break; 515 case VHOST_VDPA_SET_CONFIG_CALL: 516 r = vhost_vdpa_set_config_call(v, argp); 517 break; 518 case VHOST_GET_BACKEND_FEATURES: 519 features = VHOST_VDPA_BACKEND_FEATURES; 520 if (copy_to_user(featurep, &features, sizeof(features))) 521 r = -EFAULT; 522 break; 523 case VHOST_VDPA_GET_IOVA_RANGE: 524 r = vhost_vdpa_get_iova_range(v, argp); 525 break; 526 case VHOST_VDPA_GET_CONFIG_SIZE: 527 r = vhost_vdpa_get_config_size(v, argp); 528 break; 529 case VHOST_VDPA_GET_VQS_COUNT: 530 r = vhost_vdpa_get_vqs_count(v, argp); 531 break; 532 default: 533 r = vhost_dev_ioctl(&v->vdev, cmd, argp); 534 if (r == -ENOIOCTLCMD) 535 r = vhost_vdpa_vring_ioctl(v, cmd, argp); 536 break; 537 } 538 539 mutex_unlock(&d->mutex); 540 return r; 541 } > 542 int vhost_vdpa_add_range_ctx(struct rb_root_cached *root, u64 start, u64 last) 543 { 544 struct interval_tree_node *new_node; 545 546 if (last < start) 547 return -EFAULT; 548 549 /* If the range being mapped is [0, ULONG_MAX], split it into two entries 550 * otherwise its size would overflow u64. 551 */ 552 if (start == 0 && last == ULONG_MAX) { 553 u64 mid = last / 2; 554 555 vhost_vdpa_add_range_ctx(root, start, mid); 556 start = mid + 1; 557 } 558 559 new_node = kmalloc(sizeof(struct interval_tree_node), GFP_ATOMIC); 560 if (!new_node) 561 return -ENOMEM; 562 563 new_node->start = start; 564 new_node->last = last; 565 566 interval_tree_insert(new_node, root); 567 568 return 0; 569 } 570 > 571 void vhost_vdpa_del_range(struct rb_root_cached *root, u64 start, u64 last) 572 { 573 struct interval_tree_node *new_node; 574 575 while ((new_node = interval_tree_iter_first(root, start, last))) { 576 interval_tree_remove(new_node, root); 577 kfree(new_node); 578 } 579 } 580 > 581 struct interval_tree_node *vhost_vdpa_search_range(struct rb_root_cached *root, 582 u64 start, u64 last) 583 { 584 return interval_tree_iter_first(root, start, last); 585 } 586 -- 0-DAY CI Kernel Test Service https://01.org/lkp