* [sj:damon/next 18/20] mm/damon/core.c:752:44: warning: variable 'goal' used in loop condition not modified in loop body @ 2024-02-26 0:33 kernel test robot 2024-02-26 19:39 ` SeongJae Park 0 siblings, 1 reply; 2+ messages in thread From: kernel test robot @ 2024-02-26 0:33 UTC (permalink / raw) To: SeongJae Park; +Cc: llvm, oe-kbuild-all tree: https://git.kernel.org/pub/scm/linux/kernel/git/sj/linux.git damon/next head: a9e8680aa284cf5fd994087542cfa9e6f5f491b4 commit: 74d79c7a174ab26a8f99bc482dd6b067c93bc554 [18/20] mm/damon: implement DAMON context input-only update function config: i386-buildonly-randconfig-003-20240226 (https://download.01.org/0day-ci/archive/20240226/202402260800.F3OIgZl9-lkp@intel.com/config) compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240226/202402260800.F3OIgZl9-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202402260800.F3OIgZl9-lkp@intel.com/ All warnings (new ones prefixed by >>): >> mm/damon/core.c:752:44: warning: variable 'goal' used in loop condition not modified in loop body [-Wfor-loop-analysis] 752 | for (goal = damos_nth_quota_goal(i, src); goal; ) | ^~~~ >> mm/damon/core.c:799:42: warning: variable 'filter' used in loop condition not modified in loop body [-Wfor-loop-analysis] 799 | for (filter = damos_nth_filter(i, src); filter;) | ^~~~~~ >> mm/damon/core.c:853:42: warning: variable 'scheme' used in loop condition not modified in loop body [-Wfor-loop-analysis] 853 | for (scheme = damon_nth_scheme(i, src); scheme;) | ^~~~~~ >> mm/damon/core.c:841:13: warning: variable 'err' set but not used [-Wunused-but-set-variable] 841 | int i = 0, err; | ^ >> mm/damon/core.c:929:37: warning: variable 't' used in loop condition not modified in loop body [-Wfor-loop-analysis] 929 | for (t = damon_nth_target(i, src); t;) | ^ 5 warnings generated. vim +/goal +752 mm/damon/core.c 731 732 733 static void damos_update_quota_goals(struct damos_quota *dst, 734 struct damos_quota *src) 735 { 736 struct damos_quota_goal *goal, *next; 737 int i = 0; 738 739 damos_for_each_quota_goal_safe(goal, next, dst) { 740 struct damos_quota_goal *src_goal = 741 damos_nth_quota_goal(i++, src); 742 743 if (src_goal) { 744 goal->metric = src_goal->metric; 745 goal->target_value = src_goal->target_value; 746 goal->current_value = src_goal->current_value; 747 goal->last_psi_total = src_goal->last_psi_total; 748 continue; 749 } 750 damos_destroy_quota_goal(goal); 751 } > 752 for (goal = damos_nth_quota_goal(i, src); goal; ) 753 damos_move_quota_goal(dst, goal); 754 } 755 756 static struct damos_filter *damos_nth_filter(int n, struct damos *s) 757 { 758 struct damos_filter *filter; 759 int i = 0; 760 761 damos_for_each_filter(filter, s) { 762 if (i++ == n) 763 return filter; 764 } 765 return NULL; 766 } 767 768 static int damos_update_filters(struct damos *dst, struct damos *src) 769 { 770 struct damos_filter *filter, *next; 771 int i = 0; 772 773 damos_for_each_filter_safe(filter, next, dst) { 774 struct damos_filter *src_filter = damos_nth_filter(i++, src); 775 776 if (src_filter) { 777 filter->type = src_filter->type; 778 filter->matching = src_filter->matching; 779 switch (src_filter->type) { 780 case DAMOS_FILTER_TYPE_ANON: 781 break; 782 case DAMOS_FILTER_TYPE_MEMCG: 783 filter->memcg_id = src_filter->memcg_id; 784 break; 785 case DAMOS_FILTER_TYPE_ADDR: 786 filter->addr_range = src_filter->addr_range; 787 break; 788 case DAMOS_FILTER_TYPE_TARGET: 789 filter->target_idx = src_filter->target_idx; 790 break; 791 default: 792 break; 793 } 794 continue; 795 } 796 damos_destroy_filter(filter); 797 } 798 > 799 for (filter = damos_nth_filter(i, src); filter;) 800 damos_move_filter(dst, filter); 801 return 0; 802 } 803 804 static struct damos *damon_nth_scheme(int n, struct damon_ctx *ctx) 805 { 806 struct damos *s; 807 int i = 0; 808 809 damon_for_each_scheme(s, ctx) { 810 if (i++ == n) 811 return s; 812 } 813 return NULL; 814 } 815 816 static int damon_update_scheme(struct damos *dst, struct damos *src) 817 { 818 int err; 819 820 dst->pattern = src->pattern; 821 dst->action = src->action; 822 dst->apply_interval_us = src->apply_interval_us; 823 dst->quota.ms = src->quota.ms; 824 dst->quota.sz = src->quota.sz; 825 dst->quota.reset_interval = src->quota.reset_interval; 826 dst->quota.weight_sz = src->quota.weight_sz; 827 dst->quota.weight_nr_accesses = src->quota.weight_nr_accesses; 828 dst->quota.weight_age = src->quota.weight_age; 829 830 damos_update_quota_goals(&dst->quota, &src->quota); 831 832 dst->wmarks = src->wmarks; 833 834 err = damos_update_filters(dst, src); 835 return err; 836 } 837 838 static int damon_update_schemes(struct damon_ctx *dst, struct damon_ctx *src) 839 { 840 struct damos *scheme, *next; > 841 int i = 0, err; 842 843 damon_for_each_scheme_safe(scheme, next, dst) { 844 struct damos *src_scheme = damon_nth_scheme(i++, src); 845 846 if (src_scheme) { 847 err = damon_update_scheme(scheme, src_scheme); 848 continue; 849 } 850 damon_destroy_scheme(scheme); 851 } 852 > 853 for (scheme = damon_nth_scheme(i, src); scheme;) 854 damon_move_scheme(dst, scheme); 855 return 0; 856 } 857 858 static int damon_update_target_regions(struct damon_target *dst, 859 struct damon_target *src) 860 { 861 struct damon_addr_range *ranges; 862 int i = 0, err; 863 struct damon_region *r; 864 865 damon_for_each_region(r, src) 866 i++; 867 if (!i) 868 return 0; 869 ranges = kmalloc_array(i, sizeof(*ranges), GFP_KERNEL | __GFP_NOWARN); 870 if (!ranges) 871 return -ENOMEM; 872 i = 0; 873 damon_for_each_region(r, src) { 874 if (r->ar.start > r->ar.end) { 875 err = -EINVAL; 876 goto out; 877 } 878 ranges[i].start = r->ar.start; 879 ranges[i++].end = r->ar.end; 880 if (i == 1) 881 continue; 882 if (ranges[i - 2].end > ranges[i - 1].start) { 883 err = -EINVAL; 884 goto out; 885 } 886 } 887 err = damon_set_regions(dst, ranges, i); 888 out: 889 kfree(ranges); 890 return err; 891 } 892 893 static struct damon_target *damon_nth_target(int n, struct damon_ctx *ctx) 894 { 895 struct damon_target *t; 896 int i = 0; 897 898 damon_for_each_target(t, ctx) { 899 if (i++ == n) 900 return t; 901 } 902 return NULL; 903 } 904 905 static int damon_update_targets(struct damon_ctx *dst, struct damon_ctx *src) 906 { 907 struct damon_target *t, *next; 908 int i = 0, err; 909 910 damon_for_each_target_safe(t, next, dst) { 911 struct damon_target *src_target = damon_nth_target(i++, src); 912 913 if (damon_target_has_pid(dst)) 914 put_pid(t->pid); 915 916 if (src_target) { 917 if (damon_target_has_pid(src)) 918 get_pid(src_target->pid); 919 t->pid = src_target->pid; 920 921 err = damon_update_target_regions(t, src_target); 922 if (err) 923 return err; 924 continue; 925 } 926 damon_destroy_target(t); 927 } 928 > 929 for (t = damon_nth_target(i, src); t;) 930 damon_move_target(dst, t); 931 return 0; 932 } 933 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [sj:damon/next 18/20] mm/damon/core.c:752:44: warning: variable 'goal' used in loop condition not modified in loop body 2024-02-26 0:33 [sj:damon/next 18/20] mm/damon/core.c:752:44: warning: variable 'goal' used in loop condition not modified in loop body kernel test robot @ 2024-02-26 19:39 ` SeongJae Park 0 siblings, 0 replies; 2+ messages in thread From: SeongJae Park @ 2024-02-26 19:39 UTC (permalink / raw) To: kernel test robot; +Cc: SeongJae Park, llvm, oe-kbuild-all On Mon, 26 Feb 2024 08:33:16 +0800 kernel test robot <lkp@intel.com> wrote: > tree: https://git.kernel.org/pub/scm/linux/kernel/git/sj/linux.git damon/next > head: a9e8680aa284cf5fd994087542cfa9e6f5f491b4 > commit: 74d79c7a174ab26a8f99bc482dd6b067c93bc554 [18/20] mm/damon: implement DAMON context input-only update function > config: i386-buildonly-randconfig-003-20240226 (https://download.01.org/0day-ci/archive/20240226/202402260800.F3OIgZl9-lkp@intel.com/config) > compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240226/202402260800.F3OIgZl9-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Closes: https://lore.kernel.org/oe-kbuild-all/202402260800.F3OIgZl9-lkp@intel.com/ > > All warnings (new ones prefixed by >>): > > >> mm/damon/core.c:752:44: warning: variable 'goal' used in loop condition not modified in loop body [-Wfor-loop-analysis] > 752 | for (goal = damos_nth_quota_goal(i, src); goal; ) > | ^~~~ > >> mm/damon/core.c:799:42: warning: variable 'filter' used in loop condition not modified in loop body [-Wfor-loop-analysis] > 799 | for (filter = damos_nth_filter(i, src); filter;) > | ^~~~~~ > >> mm/damon/core.c:853:42: warning: variable 'scheme' used in loop condition not modified in loop body [-Wfor-loop-analysis] > 853 | for (scheme = damon_nth_scheme(i, src); scheme;) > | ^~~~~~ > >> mm/damon/core.c:841:13: warning: variable 'err' set but not used [-Wunused-but-set-variable] > 841 | int i = 0, err; > | ^ > >> mm/damon/core.c:929:37: warning: variable 't' used in loop condition not modified in loop body [-Wfor-loop-analysis] > 929 | for (t = damon_nth_target(i, src); t;) > | ^ > 5 warnings generated. Thank you for this nice report! I fixed the warnings with below changes, and squashed the diff on the problem-caused commit. I confirmed the warning is disappeared after the change using the awesome reproducer that you provided :) --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -734,7 +734,7 @@ static void damos_update_quota_goals(struct damos_quota *dst, struct damos_quota *src) { struct damos_quota_goal *goal, *next; - int i = 0; + int i = 0, j = 0; damos_for_each_quota_goal_safe(goal, next, dst) { struct damos_quota_goal *src_goal = @@ -749,8 +749,11 @@ static void damos_update_quota_goals(struct damos_quota *dst, } damos_destroy_quota_goal(goal); } - for (goal = damos_nth_quota_goal(i, src); goal; ) + damos_for_each_quota_goal_safe(goal, next, src) { + if (j++ < i) + continue; damos_move_quota_goal(dst, goal); + } } static struct damos_filter *damos_nth_filter(int n, struct damos *s) @@ -768,7 +771,7 @@ static struct damos_filter *damos_nth_filter(int n, struct damos *s) static int damos_update_filters(struct damos *dst, struct damos *src) { struct damos_filter *filter, *next; - int i = 0; + int i = 0, j = 0; damos_for_each_filter_safe(filter, next, dst) { struct damos_filter *src_filter = damos_nth_filter(i++, src); @@ -783,8 +786,11 @@ static int damos_update_filters(struct damos *dst, struct damos *src) damos_destroy_filter(filter); } - for (filter = damos_nth_filter(i, src); filter;) + damos_for_each_filter_safe(filter, next, src) { + if (j++ < i) + continue; damos_move_filter(dst, filter); + } return 0; } @@ -825,20 +831,25 @@ static int damon_update_scheme(struct damos *dst, struct damos *src) static int damon_update_schemes(struct damon_ctx *dst, struct damon_ctx *src) { struct damos *scheme, *next; - int i = 0, err; + int i = 0, j = 0, err; damon_for_each_scheme_safe(scheme, next, dst) { struct damos *src_scheme = damon_nth_scheme(i++, src); if (src_scheme) { err = damon_update_scheme(scheme, src_scheme); + if (err) + return err; continue; } damon_destroy_scheme(scheme); } - for (scheme = damon_nth_scheme(i, src); scheme;) + damon_for_each_scheme_safe(scheme, next, src) { + if (j++ < i) + continue; damon_move_scheme(dst, scheme); + } return 0; } @@ -892,7 +903,7 @@ static struct damon_target *damon_nth_target(int n, struct damon_ctx *ctx) static int damon_update_targets(struct damon_ctx *dst, struct damon_ctx *src) { struct damon_target *t, *next; - int i = 0, err; + int i = 0, j = 0, err; damon_for_each_target_safe(t, next, dst) { struct damon_target *src_target = damon_nth_target(i++, src); @@ -913,8 +924,11 @@ static int damon_update_targets(struct damon_ctx *dst, struct damon_ctx *src) damon_destroy_target(t); } - for (t = damon_nth_target(i, src); t;) + damon_for_each_target_safe(t, next, src) { + if (j++ < i) + continue; damon_move_target(dst, t); + } return 0; } [...] ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-02-26 19:39 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-02-26 0:33 [sj:damon/next 18/20] mm/damon/core.c:752:44: warning: variable 'goal' used in loop condition not modified in loop body kernel test robot 2024-02-26 19:39 ` SeongJae Park
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox