From 727a4b9f4a7105f6fb21623c896c69a6b148bf6f Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 20 Dec 2004 23:51:37 -0800 Subject: [PATCH] back out CPU clock additions to posix-timers This patch reverts the additions of an ABI supporting thread and process CPU clocks in the posix-timers code. This returns us to 2.6.9's condition, there is no support for any new clockid_t values for process CPU clocks. This also fixes the return value for clock_nanosleep when unsupported (I think this is used only by sgi-timer at the moment). The POSIX-specified code for valid clocks that don't support the sleep operation is ENOTSUP. On most architectures the kernel doesn't define ENOTSUP and this name is defined in userland the same as the kernel's EOPNOTSUPP. Signed-off-by: Roland McGrath Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- kernel/posix-timers.c | 119 ++++---------------------------------------------- 1 file changed, 8 insertions(+), 111 deletions(-) diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index f85765b9ba74..33a67e7ad826 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c @@ -10,10 +10,6 @@ * 2004-06-01 Fix CLOCK_REALTIME clock/timer TIMER_ABSTIME bug. * Copyright (C) 2004 Boris Hu * - * 2004-07-27 Provide POSIX compliant clocks - * CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID. - * by Christoph Lameter - * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at @@ -193,8 +189,6 @@ static int do_posix_gettime(struct k_clock *clock, struct timespec *tp); static u64 do_posix_clock_monotonic_gettime_parts( struct timespec *tp, struct timespec *mo); int do_posix_clock_monotonic_gettime(struct timespec *tp); -static int do_posix_clock_process_gettime(struct timespec *tp); -static int do_posix_clock_thread_gettime(struct timespec *tp); static struct k_itimer *lock_timer(timer_t timer_id, unsigned long *flags); static inline void unlock_timer(struct k_itimer *timr, unsigned long flags) @@ -215,25 +209,9 @@ static __init int init_posix_timers(void) .clock_get = do_posix_clock_monotonic_gettime, .clock_set = do_posix_clock_nosettime }; - struct k_clock clock_thread = {.res = CLOCK_REALTIME_RES, - .abs_struct = NULL, - .clock_get = do_posix_clock_thread_gettime, - .clock_set = do_posix_clock_nosettime, - .timer_create = do_posix_clock_notimer_create, - .nsleep = do_posix_clock_nonanosleep - }; - struct k_clock clock_process = {.res = CLOCK_REALTIME_RES, - .abs_struct = NULL, - .clock_get = do_posix_clock_process_gettime, - .clock_set = do_posix_clock_nosettime, - .timer_create = do_posix_clock_notimer_create, - .nsleep = do_posix_clock_nonanosleep - }; register_posix_clock(CLOCK_REALTIME, &clock_realtime); register_posix_clock(CLOCK_MONOTONIC, &clock_monotonic); - register_posix_clock(CLOCK_PROCESS_CPUTIME_ID, &clock_process); - register_posix_clock(CLOCK_THREAD_CPUTIME_ID, &clock_thread); posix_timers_cache = kmem_cache_create("posix_timers_cache", sizeof (struct k_itimer), 0, 0, NULL, NULL); @@ -1220,69 +1198,18 @@ int do_posix_clock_nosettime(struct timespec *tp) return -EINVAL; } -int do_posix_clock_notimer_create(struct k_itimer *timer) { - return -EINVAL; -} - -int do_posix_clock_nonanosleep(int which_lock, int flags,struct timespec * t) { -/* Single Unix specficiation says to return ENOTSUP but we do not have that */ - return -EINVAL; -} - -static unsigned long process_ticks(task_t *p) { - unsigned long ticks; - task_t *t; - - spin_lock(&p->sighand->siglock); - /* The signal structure is shared between all threads */ - ticks = p->signal->utime + p->signal->stime; - - /* Add up the cpu time for all the still running threads of this process */ - t = p; - do { - ticks += t->utime + t->stime; - t = next_thread(t); - } while (t != p); - - spin_unlock(&p->sighand->siglock); - return ticks; -} - -static inline unsigned long thread_ticks(task_t *p) { - return p->utime + current->stime; -} - -/* - * Single Unix Specification V3: - * - * Implementations shall also support the special clockid_t value - * CLOCK_THREAD_CPUTIME_ID, which represents the CPU-time clock of the calling - * thread when invoking one of the clock_*() or timer_*() functions. For these - * clock IDs, the values returned by clock_gettime() and specified by - * clock_settime() shall represent the amount of execution time of the thread - * associated with the clock. - */ -static int do_posix_clock_thread_gettime(struct timespec *tp) +int do_posix_clock_notimer_create(struct k_itimer *timer) { - jiffies_to_timespec(thread_ticks(current), tp); - return 0; + return -EINVAL; } -/* - * Single Unix Specification V3: - * - * Implementations shall also support the special clockid_t value - * CLOCK_PROCESS_CPUTIME_ID, which represents the CPU-time clock of the - * calling process when invoking one of the clock_*() or timer_*() functions. - * For these clock IDs, the values returned by clock_gettime() and specified - * by clock_settime() represent the amount of execution time of the process - * associated with the clock. - */ - -static int do_posix_clock_process_gettime(struct timespec *tp) +int do_posix_clock_nonanosleep(int which_clock, int flags, struct timespec *t) { - jiffies_to_timespec(process_ticks(current), tp); - return 0; +#ifndef ENOTSUP + return -EOPNOTSUPP; /* aka ENOTSUP in userland for POSIX */ +#else /* parisc does define it separately. */ + return -ENOTSUP; +#endif } asmlinkage long @@ -1290,10 +1217,6 @@ sys_clock_settime(clockid_t which_clock, const struct timespec __user *tp) { struct timespec new_tp; - /* Cannot set process specific clocks */ - if (which_clock<0) - return -EINVAL; - if ((unsigned) which_clock >= MAX_CLOCKS || !posix_clocks[which_clock].res) return -EINVAL; @@ -1307,29 +1230,6 @@ sys_clock_settime(clockid_t which_clock, const struct timespec __user *tp) static int do_clock_gettime(clockid_t which_clock, struct timespec *tp) { - /* Process process specific clocks */ - if (which_clock < 0) { - task_t *t; - int pid = -which_clock; - - if (pid < PID_MAX_LIMIT) { - if ((t = find_task_by_pid(pid))) { - jiffies_to_timespec(process_ticks(t), tp); - return 0; - } - return -EINVAL; - } - if (pid < 2*PID_MAX_LIMIT) { - if ((t = find_task_by_pid(pid - PID_MAX_LIMIT))) { - jiffies_to_timespec(thread_ticks(t), tp); - return 0; - } - return -EINVAL; - } - /* More process specific clocks could follow here */ - return -EINVAL; - } - if ((unsigned) which_clock >= MAX_CLOCKS || !posix_clocks[which_clock].res) return -EINVAL; @@ -1356,9 +1256,6 @@ sys_clock_getres(clockid_t which_clock, struct timespec __user *tp) { struct timespec rtn_tp; - /* All process clocks have the resolution of CLOCK_PROCESS_CPUTIME_ID */ - if (which_clock < 0 ) which_clock = CLOCK_PROCESS_CPUTIME_ID; - if ((unsigned) which_clock >= MAX_CLOCKS || !posix_clocks[which_clock].res) return -EINVAL; -- cgit v1.2.3 From e3513367414b3d5750e77f0f35f1c6f8582c4507 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Mon, 20 Dec 2004 23:51:50 -0800 Subject: [PATCH] vm: disable thrashing control by default It's causing a few as-yet-not-understood problems. So make a zero value of /proc/sys/vm/swap_token_timeout disable the feature, and make the default be zero. Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- mm/rmap.c | 3 +++ mm/thrash.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/mm/rmap.c b/mm/rmap.c index 83c86c2de4e5..a30ebc47127b 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -395,6 +395,9 @@ int page_referenced(struct page *page, int is_locked, int ignore_token) { int referenced = 0; + if (!swap_token_default_timeout) + ignore_token = 1; + if (page_test_and_clear_young(page)) referenced++; diff --git a/mm/thrash.c b/mm/thrash.c index b6b7360a8b34..985b6bbe964d 100644 --- a/mm/thrash.c +++ b/mm/thrash.c @@ -19,7 +19,10 @@ unsigned long swap_token_check; struct mm_struct * swap_token_mm = &init_mm; #define SWAP_TOKEN_CHECK_INTERVAL (HZ * 2) -#define SWAP_TOKEN_TIMEOUT (HZ * 300) +#define SWAP_TOKEN_TIMEOUT 0 +/* + * Currently disabled; Needs further code to work at HZ * 300. + */ unsigned long swap_token_default_timeout = SWAP_TOKEN_TIMEOUT; /* -- cgit v1.2.3 From 87f3243f8739f229fb38847b4fb84ca0d312efbe Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 21 Dec 2004 00:25:03 -0800 Subject: [PATCH] USB: fix Scheduling while atomic warning when resuming. This fixes a warning when resuming the USB EHCI host controller driver. From: David Brownell Signed-off-by: Greg Kroah-Hartman Signed-off-by: Linus Torvalds --- drivers/usb/host/ehci-hub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index a9695086304f..6affe7d373ed 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c @@ -122,7 +122,7 @@ static int ehci_hub_resume (struct usb_hcd *hcd) writel (temp, &ehci->regs->port_status [i]); } i = HCS_N_PORTS (ehci->hcs_params); - msleep (20); + mdelay (20); while (i--) { temp = readl (&ehci->regs->port_status [i]); if ((temp & PORT_SUSPEND) == 0) -- cgit v1.2.3