Loading arch/s390/mm/cmm.c +29 −53 Original line number Original line Diff line number Diff line /* /* * arch/s390/mm/cmm.c * Collaborative memory management interface. * * * S390 version * Copyright IBM Corp 2003,2010 * Copyright (C) 2003 IBM Deutschland Entwicklung GmbH, IBM Corporation * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) * * * Collaborative memory management interface. */ */ #include <linux/errno.h> #include <linux/errno.h> Loading @@ -20,9 +18,9 @@ #include <linux/kthread.h> #include <linux/kthread.h> #include <linux/oom.h> #include <linux/oom.h> #include <linux/suspend.h> #include <linux/suspend.h> #include <linux/uaccess.h> #include <asm/pgalloc.h> #include <asm/pgalloc.h> #include <asm/uaccess.h> #include <asm/diag.h> #include <asm/diag.h> static char *sender = "VMRMSVM"; static char *sender = "VMRMSVM"; Loading Loading @@ -59,8 +57,8 @@ static DEFINE_TIMER(cmm_timer, NULL, 0, 0); static void cmm_timer_fn(unsigned long); static void cmm_timer_fn(unsigned long); static void cmm_set_timer(void); static void cmm_set_timer(void); static long static long cmm_alloc_pages(long nr, long *counter, cmm_alloc_pages(long nr, long *counter, struct cmm_page_array **list) struct cmm_page_array **list) { { struct cmm_page_array *pa, *npa; struct cmm_page_array *pa, *npa; unsigned long addr; unsigned long addr; Loading Loading @@ -99,8 +97,7 @@ cmm_alloc_pages(long nr, long *counter, struct cmm_page_array **list) return nr; return nr; } } static long static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list) cmm_free_pages(long nr, long *counter, struct cmm_page_array **list) { { struct cmm_page_array *pa; struct cmm_page_array *pa; unsigned long addr; unsigned long addr; Loading Loading @@ -140,11 +137,10 @@ static int cmm_oom_notify(struct notifier_block *self, } } static struct notifier_block cmm_oom_nb = { static struct notifier_block cmm_oom_nb = { .notifier_call = cmm_oom_notify .notifier_call = cmm_oom_notify, }; }; static int static int cmm_thread(void *dummy) cmm_thread(void *dummy) { { int rc; int rc; Loading Loading @@ -178,14 +174,12 @@ cmm_thread(void *dummy) return 0; return 0; } } static void static void cmm_kick_thread(void) cmm_kick_thread(void) { { wake_up(&cmm_thread_wait); wake_up(&cmm_thread_wait); } } static void static void cmm_set_timer(void) cmm_set_timer(void) { { if (cmm_timed_pages_target <= 0 || cmm_timeout_seconds <= 0) { if (cmm_timed_pages_target <= 0 || cmm_timeout_seconds <= 0) { if (timer_pending(&cmm_timer)) if (timer_pending(&cmm_timer)) Loading @@ -202,8 +196,7 @@ cmm_set_timer(void) add_timer(&cmm_timer); add_timer(&cmm_timer); } } static void static void cmm_timer_fn(unsigned long ignored) cmm_timer_fn(unsigned long ignored) { { long nr; long nr; Loading @@ -216,46 +209,41 @@ cmm_timer_fn(unsigned long ignored) cmm_set_timer(); cmm_set_timer(); } } void static void cmm_set_pages(long nr) cmm_set_pages(long nr) { { cmm_pages_target = nr; cmm_pages_target = nr; cmm_kick_thread(); cmm_kick_thread(); } } long static long cmm_get_pages(void) cmm_get_pages(void) { { return cmm_pages; return cmm_pages; } } void static void cmm_add_timed_pages(long nr) cmm_add_timed_pages(long nr) { { cmm_timed_pages_target += nr; cmm_timed_pages_target += nr; cmm_kick_thread(); cmm_kick_thread(); } } long static long cmm_get_timed_pages(void) cmm_get_timed_pages(void) { { return cmm_timed_pages; return cmm_timed_pages; } } void static void cmm_set_timeout(long nr, long seconds) cmm_set_timeout(long nr, long seconds) { { cmm_timeout_pages = nr; cmm_timeout_pages = nr; cmm_timeout_seconds = seconds; cmm_timeout_seconds = seconds; cmm_set_timer(); cmm_set_timer(); } } static int static int cmm_skip_blanks(char *cp, char **endp) cmm_skip_blanks(char *cp, char **endp) { { char *str; char *str; for (str = cp; *str == ' ' || *str == '\t'; str++); for (str = cp; *str == ' ' || *str == '\t'; str++) ; *endp = str; *endp = str; return str != cp; return str != cp; } } Loading @@ -264,9 +252,8 @@ cmm_skip_blanks(char *cp, char **endp) static struct ctl_table cmm_table[]; static struct ctl_table cmm_table[]; static int static int cmm_pages_handler(ctl_table *ctl, int write, void __user *buffer, cmm_pages_handler(ctl_table *ctl, int write, size_t *lenp, loff_t *ppos) void __user *buffer, size_t *lenp, loff_t *ppos) { { char buf[16], *p; char buf[16], *p; long nr; long nr; Loading Loading @@ -305,9 +292,8 @@ cmm_pages_handler(ctl_table *ctl, int write, return 0; return 0; } } static int static int cmm_timeout_handler(ctl_table *ctl, int write, void __user *buffer, cmm_timeout_handler(ctl_table *ctl, int write, size_t *lenp, loff_t *ppos) void __user *buffer, size_t *lenp, loff_t *ppos) { { char buf[64], *p; char buf[64], *p; long nr, seconds; long nr, seconds; Loading Loading @@ -374,8 +360,7 @@ static struct ctl_table cmm_dir_table[] = { #ifdef CONFIG_CMM_IUCV #ifdef CONFIG_CMM_IUCV #define SMSG_PREFIX "CMM" #define SMSG_PREFIX "CMM" static void static void cmm_smsg_target(const char *from, char *msg) cmm_smsg_target(const char *from, char *msg) { { long nr, seconds; long nr, seconds; Loading Loading @@ -445,8 +430,7 @@ static struct notifier_block cmm_power_notifier = { .notifier_call = cmm_power_event, .notifier_call = cmm_power_event, }; }; static int static int cmm_init(void) cmm_init (void) { { int rc = -ENOMEM; int rc = -ENOMEM; Loading Loading @@ -488,9 +472,9 @@ cmm_init (void) del_timer_sync(&cmm_timer); del_timer_sync(&cmm_timer); return rc; return rc; } } module_init(cmm_init); static void static void cmm_exit(void) cmm_exit(void) { { #ifdef CONFIG_CMM_PROC #ifdef CONFIG_CMM_PROC unregister_sysctl_table(cmm_sysctl_header); unregister_sysctl_table(cmm_sysctl_header); Loading @@ -505,14 +489,6 @@ cmm_exit(void) cmm_free_pages(cmm_pages, &cmm_pages, &cmm_page_list); cmm_free_pages(cmm_pages, &cmm_pages, &cmm_page_list); cmm_free_pages(cmm_timed_pages, &cmm_timed_pages, &cmm_timed_page_list); cmm_free_pages(cmm_timed_pages, &cmm_timed_pages, &cmm_timed_page_list); } } module_init(cmm_init); module_exit(cmm_exit); module_exit(cmm_exit); EXPORT_SYMBOL(cmm_set_pages); EXPORT_SYMBOL(cmm_get_pages); EXPORT_SYMBOL(cmm_add_timed_pages); EXPORT_SYMBOL(cmm_get_timed_pages); EXPORT_SYMBOL(cmm_set_timeout); MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL"); Loading
arch/s390/mm/cmm.c +29 −53 Original line number Original line Diff line number Diff line /* /* * arch/s390/mm/cmm.c * Collaborative memory management interface. * * * S390 version * Copyright IBM Corp 2003,2010 * Copyright (C) 2003 IBM Deutschland Entwicklung GmbH, IBM Corporation * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) * * * Collaborative memory management interface. */ */ #include <linux/errno.h> #include <linux/errno.h> Loading @@ -20,9 +18,9 @@ #include <linux/kthread.h> #include <linux/kthread.h> #include <linux/oom.h> #include <linux/oom.h> #include <linux/suspend.h> #include <linux/suspend.h> #include <linux/uaccess.h> #include <asm/pgalloc.h> #include <asm/pgalloc.h> #include <asm/uaccess.h> #include <asm/diag.h> #include <asm/diag.h> static char *sender = "VMRMSVM"; static char *sender = "VMRMSVM"; Loading Loading @@ -59,8 +57,8 @@ static DEFINE_TIMER(cmm_timer, NULL, 0, 0); static void cmm_timer_fn(unsigned long); static void cmm_timer_fn(unsigned long); static void cmm_set_timer(void); static void cmm_set_timer(void); static long static long cmm_alloc_pages(long nr, long *counter, cmm_alloc_pages(long nr, long *counter, struct cmm_page_array **list) struct cmm_page_array **list) { { struct cmm_page_array *pa, *npa; struct cmm_page_array *pa, *npa; unsigned long addr; unsigned long addr; Loading Loading @@ -99,8 +97,7 @@ cmm_alloc_pages(long nr, long *counter, struct cmm_page_array **list) return nr; return nr; } } static long static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list) cmm_free_pages(long nr, long *counter, struct cmm_page_array **list) { { struct cmm_page_array *pa; struct cmm_page_array *pa; unsigned long addr; unsigned long addr; Loading Loading @@ -140,11 +137,10 @@ static int cmm_oom_notify(struct notifier_block *self, } } static struct notifier_block cmm_oom_nb = { static struct notifier_block cmm_oom_nb = { .notifier_call = cmm_oom_notify .notifier_call = cmm_oom_notify, }; }; static int static int cmm_thread(void *dummy) cmm_thread(void *dummy) { { int rc; int rc; Loading Loading @@ -178,14 +174,12 @@ cmm_thread(void *dummy) return 0; return 0; } } static void static void cmm_kick_thread(void) cmm_kick_thread(void) { { wake_up(&cmm_thread_wait); wake_up(&cmm_thread_wait); } } static void static void cmm_set_timer(void) cmm_set_timer(void) { { if (cmm_timed_pages_target <= 0 || cmm_timeout_seconds <= 0) { if (cmm_timed_pages_target <= 0 || cmm_timeout_seconds <= 0) { if (timer_pending(&cmm_timer)) if (timer_pending(&cmm_timer)) Loading @@ -202,8 +196,7 @@ cmm_set_timer(void) add_timer(&cmm_timer); add_timer(&cmm_timer); } } static void static void cmm_timer_fn(unsigned long ignored) cmm_timer_fn(unsigned long ignored) { { long nr; long nr; Loading @@ -216,46 +209,41 @@ cmm_timer_fn(unsigned long ignored) cmm_set_timer(); cmm_set_timer(); } } void static void cmm_set_pages(long nr) cmm_set_pages(long nr) { { cmm_pages_target = nr; cmm_pages_target = nr; cmm_kick_thread(); cmm_kick_thread(); } } long static long cmm_get_pages(void) cmm_get_pages(void) { { return cmm_pages; return cmm_pages; } } void static void cmm_add_timed_pages(long nr) cmm_add_timed_pages(long nr) { { cmm_timed_pages_target += nr; cmm_timed_pages_target += nr; cmm_kick_thread(); cmm_kick_thread(); } } long static long cmm_get_timed_pages(void) cmm_get_timed_pages(void) { { return cmm_timed_pages; return cmm_timed_pages; } } void static void cmm_set_timeout(long nr, long seconds) cmm_set_timeout(long nr, long seconds) { { cmm_timeout_pages = nr; cmm_timeout_pages = nr; cmm_timeout_seconds = seconds; cmm_timeout_seconds = seconds; cmm_set_timer(); cmm_set_timer(); } } static int static int cmm_skip_blanks(char *cp, char **endp) cmm_skip_blanks(char *cp, char **endp) { { char *str; char *str; for (str = cp; *str == ' ' || *str == '\t'; str++); for (str = cp; *str == ' ' || *str == '\t'; str++) ; *endp = str; *endp = str; return str != cp; return str != cp; } } Loading @@ -264,9 +252,8 @@ cmm_skip_blanks(char *cp, char **endp) static struct ctl_table cmm_table[]; static struct ctl_table cmm_table[]; static int static int cmm_pages_handler(ctl_table *ctl, int write, void __user *buffer, cmm_pages_handler(ctl_table *ctl, int write, size_t *lenp, loff_t *ppos) void __user *buffer, size_t *lenp, loff_t *ppos) { { char buf[16], *p; char buf[16], *p; long nr; long nr; Loading Loading @@ -305,9 +292,8 @@ cmm_pages_handler(ctl_table *ctl, int write, return 0; return 0; } } static int static int cmm_timeout_handler(ctl_table *ctl, int write, void __user *buffer, cmm_timeout_handler(ctl_table *ctl, int write, size_t *lenp, loff_t *ppos) void __user *buffer, size_t *lenp, loff_t *ppos) { { char buf[64], *p; char buf[64], *p; long nr, seconds; long nr, seconds; Loading Loading @@ -374,8 +360,7 @@ static struct ctl_table cmm_dir_table[] = { #ifdef CONFIG_CMM_IUCV #ifdef CONFIG_CMM_IUCV #define SMSG_PREFIX "CMM" #define SMSG_PREFIX "CMM" static void static void cmm_smsg_target(const char *from, char *msg) cmm_smsg_target(const char *from, char *msg) { { long nr, seconds; long nr, seconds; Loading Loading @@ -445,8 +430,7 @@ static struct notifier_block cmm_power_notifier = { .notifier_call = cmm_power_event, .notifier_call = cmm_power_event, }; }; static int static int cmm_init(void) cmm_init (void) { { int rc = -ENOMEM; int rc = -ENOMEM; Loading Loading @@ -488,9 +472,9 @@ cmm_init (void) del_timer_sync(&cmm_timer); del_timer_sync(&cmm_timer); return rc; return rc; } } module_init(cmm_init); static void static void cmm_exit(void) cmm_exit(void) { { #ifdef CONFIG_CMM_PROC #ifdef CONFIG_CMM_PROC unregister_sysctl_table(cmm_sysctl_header); unregister_sysctl_table(cmm_sysctl_header); Loading @@ -505,14 +489,6 @@ cmm_exit(void) cmm_free_pages(cmm_pages, &cmm_pages, &cmm_page_list); cmm_free_pages(cmm_pages, &cmm_pages, &cmm_page_list); cmm_free_pages(cmm_timed_pages, &cmm_timed_pages, &cmm_timed_page_list); cmm_free_pages(cmm_timed_pages, &cmm_timed_pages, &cmm_timed_page_list); } } module_init(cmm_init); module_exit(cmm_exit); module_exit(cmm_exit); EXPORT_SYMBOL(cmm_set_pages); EXPORT_SYMBOL(cmm_get_pages); EXPORT_SYMBOL(cmm_add_timed_pages); EXPORT_SYMBOL(cmm_get_timed_pages); EXPORT_SYMBOL(cmm_set_timeout); MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");