Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mm: memcontrol: use int for event/state parameter in several functions

Several functions use an enum type as parameter for an event/state, but
are called in some locations with an argument of a different enum type.
Adjust the interface of these functions to reality by changing the
parameter to int.

This fixes a ton of enum-conversion warnings that are generated when
building the kernel with clang.

[mka@chromium.org: also change parameter type of inc/dec/mod_memcg_page_state()]
Link: http://lkml.kernel.org/r/20170728213442.93823-1-mka@chromium.org
Link: http://lkml.kernel.org/r/20170727211004.34435-1-mka@chromium.org
Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: Doug Anderson <dianders@chromium.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Matthias Kaehlcke and committed by
Linus Torvalds
04fecbf5 67e5ed96

+35 -21
+32 -20
include/linux/memcontrol.h
··· 488 488 void __unlock_page_memcg(struct mem_cgroup *memcg); 489 489 void unlock_page_memcg(struct page *page); 490 490 491 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 491 492 static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, 492 - enum memcg_stat_item idx) 493 + int idx) 493 494 { 494 495 long val = 0; 495 496 int cpu; ··· 504 503 return val; 505 504 } 506 505 506 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 507 507 static inline void __mod_memcg_state(struct mem_cgroup *memcg, 508 - enum memcg_stat_item idx, int val) 508 + int idx, int val) 509 509 { 510 510 if (!mem_cgroup_disabled()) 511 511 __this_cpu_add(memcg->stat->count[idx], val); 512 512 } 513 513 514 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 514 515 static inline void mod_memcg_state(struct mem_cgroup *memcg, 515 - enum memcg_stat_item idx, int val) 516 + int idx, int val) 516 517 { 517 518 if (!mem_cgroup_disabled()) 518 519 this_cpu_add(memcg->stat->count[idx], val); ··· 538 535 * Kernel pages are an exception to this, since they'll never move. 539 536 */ 540 537 static inline void __mod_memcg_page_state(struct page *page, 541 - enum memcg_stat_item idx, int val) 538 + int idx, int val) 542 539 { 543 540 if (page->mem_cgroup) 544 541 __mod_memcg_state(page->mem_cgroup, idx, val); 545 542 } 546 543 547 544 static inline void mod_memcg_page_state(struct page *page, 548 - enum memcg_stat_item idx, int val) 545 + int idx, int val) 549 546 { 550 547 if (page->mem_cgroup) 551 548 mod_memcg_state(page->mem_cgroup, idx, val); ··· 635 632 this_cpu_add(memcg->stat->events[idx], count); 636 633 } 637 634 635 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 638 636 static inline void count_memcg_page_event(struct page *page, 639 - enum memcg_stat_item idx) 637 + int idx) 640 638 { 641 639 if (page->mem_cgroup) 642 640 count_memcg_events(page->mem_cgroup, idx, 1); ··· 850 846 } 851 847 852 848 static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, 853 - enum memcg_stat_item idx) 849 + int idx) 854 850 { 855 851 return 0; 856 852 } 857 853 858 854 static inline void __mod_memcg_state(struct mem_cgroup *memcg, 859 - enum memcg_stat_item idx, 855 + int idx, 860 856 int nr) 861 857 { 862 858 } 863 859 864 860 static inline void mod_memcg_state(struct mem_cgroup *memcg, 865 - enum memcg_stat_item idx, 861 + int idx, 866 862 int nr) 867 863 { 868 864 } 869 865 870 866 static inline void __mod_memcg_page_state(struct page *page, 871 - enum memcg_stat_item idx, 867 + int idx, 872 868 int nr) 873 869 { 874 870 } 875 871 876 872 static inline void mod_memcg_page_state(struct page *page, 877 - enum memcg_stat_item idx, 873 + int idx, 878 874 int nr) 879 875 { 880 876 } ··· 928 924 } 929 925 930 926 static inline void count_memcg_page_event(struct page *page, 931 - enum memcg_stat_item idx) 927 + int idx) 932 928 { 933 929 } 934 930 ··· 938 934 } 939 935 #endif /* CONFIG_MEMCG */ 940 936 937 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 941 938 static inline void __inc_memcg_state(struct mem_cgroup *memcg, 942 - enum memcg_stat_item idx) 939 + int idx) 943 940 { 944 941 __mod_memcg_state(memcg, idx, 1); 945 942 } 946 943 944 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 947 945 static inline void __dec_memcg_state(struct mem_cgroup *memcg, 948 - enum memcg_stat_item idx) 946 + int idx) 949 947 { 950 948 __mod_memcg_state(memcg, idx, -1); 951 949 } 952 950 951 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 953 952 static inline void __inc_memcg_page_state(struct page *page, 954 - enum memcg_stat_item idx) 953 + int idx) 955 954 { 956 955 __mod_memcg_page_state(page, idx, 1); 957 956 } 958 957 958 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 959 959 static inline void __dec_memcg_page_state(struct page *page, 960 - enum memcg_stat_item idx) 960 + int idx) 961 961 { 962 962 __mod_memcg_page_state(page, idx, -1); 963 963 } ··· 990 982 __mod_lruvec_page_state(page, idx, -1); 991 983 } 992 984 985 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 993 986 static inline void inc_memcg_state(struct mem_cgroup *memcg, 994 - enum memcg_stat_item idx) 987 + int idx) 995 988 { 996 989 mod_memcg_state(memcg, idx, 1); 997 990 } 998 991 992 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 999 993 static inline void dec_memcg_state(struct mem_cgroup *memcg, 1000 - enum memcg_stat_item idx) 994 + int idx) 1001 995 { 1002 996 mod_memcg_state(memcg, idx, -1); 1003 997 } 1004 998 999 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 1005 1000 static inline void inc_memcg_page_state(struct page *page, 1006 - enum memcg_stat_item idx) 1001 + int idx) 1007 1002 { 1008 1003 mod_memcg_page_state(page, idx, 1); 1009 1004 } 1010 1005 1006 + /* idx can be of type enum memcg_stat_item or node_stat_item */ 1011 1007 static inline void dec_memcg_page_state(struct page *page, 1012 - enum memcg_stat_item idx) 1008 + int idx) 1013 1009 { 1014 1010 mod_memcg_page_state(page, idx, -1); 1015 1011 }
+3 -1
mm/memcontrol.c
··· 550 550 * value, and reading all cpu value can be performance bottleneck in some 551 551 * common workload, threshold and synchronization as vmstat[] should be 552 552 * implemented. 553 + * 554 + * The parameter idx can be of type enum memcg_event_item or vm_event_item. 553 555 */ 554 556 555 557 static unsigned long memcg_sum_events(struct mem_cgroup *memcg, 556 - enum memcg_event_item event) 558 + int event) 557 559 { 558 560 unsigned long val = 0; 559 561 int cpu;