* [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