* [uml-devel] [patch 27/49] uml: fix build when SLOB is enabled
[not found] ` <20080818191834.GA10350@suse.de>
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 28/49] uml: fix bad NTP interaction with clock Greg KH
` (12 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Theodore Ts'o, Zwane Mwaikambo, uml-devel, WANG Cong,
Eugene Teo, Justin Forbes, Domenico Andreoli, Chris Wedgwood,
Jake Edge, Randy Dunlap, Michael Krufky, alan, Chuck Ebbert,
Dave Jones, Chuck Wolber, akpm, Jeff Dike, torvalds,
Willy Tarreau, Rodrigo Rubira Branco
[-- Attachment #1: uml-fix-build-when-slob-is-enabled.patch --]
[-- Type: text/plain, Size: 9450 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit 43f5b3085fdd27c4edf535d938b2cb0ccead4f75 upstream
Reintroduce uml_kmalloc for the benefit of UML libc code. The
previous tactic of declaring __kmalloc so it could be called directly
from the libc side of the house turned out to be getting too intimate
with slab, and it doesn't work with slob.
So, the uml_kmalloc wrapper is back. It calls kmalloc or whatever
that translates into, and libc code calls it.
kfree is left alone since that still works, leaving a somewhat
inconsistent API.
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Cc: WANG Cong <xiyou.wangcong@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/drivers/chan_user.c | 1 +
arch/um/drivers/cow_sys.h | 2 +-
arch/um/drivers/daemon_user.c | 4 ++--
arch/um/drivers/fd.c | 2 +-
arch/um/drivers/mcast_user.c | 3 ++-
arch/um/drivers/net_user.c | 2 +-
arch/um/drivers/port_user.c | 2 +-
arch/um/drivers/pty.c | 2 +-
arch/um/drivers/slip_user.c | 2 +-
arch/um/drivers/tty.c | 2 +-
arch/um/drivers/xterm.c | 2 +-
arch/um/include/um_malloc.h | 9 +++------
arch/um/kernel/mem.c | 5 +++++
arch/um/os-Linux/drivers/ethertap_user.c | 4 ++--
arch/um/os-Linux/helper.c | 4 ++--
arch/um/os-Linux/main.c | 2 +-
arch/um/os-Linux/sigio.c | 4 ++--
17 files changed, 28 insertions(+), 24 deletions(-)
--- a/arch/um/drivers/chan_user.c
+++ b/arch/um/drivers/chan_user.c
@@ -11,6 +11,7 @@
#include <termios.h>
#include <sys/ioctl.h>
#include "chan_user.h"
+#include "kern_constants.h"
#include "os.h"
#include "um_malloc.h"
#include "user.h"
--- a/arch/um/drivers/cow_sys.h
+++ b/arch/um/drivers/cow_sys.h
@@ -8,7 +8,7 @@
static inline void *cow_malloc(int size)
{
- return kmalloc(size, UM_GFP_KERNEL);
+ return uml_kmalloc(size, UM_GFP_KERNEL);
}
static inline void cow_free(void *ptr)
--- a/arch/um/drivers/daemon_user.c
+++ b/arch/um/drivers/daemon_user.c
@@ -34,7 +34,7 @@ static struct sockaddr_un *new_addr(void
{
struct sockaddr_un *sun;
- sun = kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
+ sun = uml_kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
if (sun == NULL) {
printk(UM_KERN_ERR "new_addr: allocation of sockaddr_un "
"failed\n");
@@ -83,7 +83,7 @@ static int connect_to_switch(struct daem
goto out_close;
}
- sun = kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
+ sun = uml_kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
if (sun == NULL) {
printk(UM_KERN_ERR "new_addr: allocation of sockaddr_un "
"failed\n");
--- a/arch/um/drivers/fd.c
+++ b/arch/um/drivers/fd.c
@@ -40,7 +40,7 @@ static void *fd_init(char *str, int devi
return NULL;
}
- data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
+ data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
if (data == NULL)
return NULL;
--- a/arch/um/drivers/mcast_user.c
+++ b/arch/um/drivers/mcast_user.c
@@ -15,6 +15,7 @@
#include <unistd.h>
#include <errno.h>
#include <netinet/in.h>
+#include "kern_constants.h"
#include "mcast.h"
#include "net_user.h"
#include "um_malloc.h"
@@ -24,7 +25,7 @@ static struct sockaddr_in *new_addr(char
{
struct sockaddr_in *sin;
- sin = kmalloc(sizeof(struct sockaddr_in), UM_GFP_KERNEL);
+ sin = uml_kmalloc(sizeof(struct sockaddr_in), UM_GFP_KERNEL);
if (sin == NULL) {
printk(UM_KERN_ERR "new_addr: allocation of sockaddr_in "
"failed\n");
--- a/arch/um/drivers/net_user.c
+++ b/arch/um/drivers/net_user.c
@@ -222,7 +222,7 @@ static void change(char *dev, char *what
netmask[2], netmask[3]);
output_len = UM_KERN_PAGE_SIZE;
- output = kmalloc(output_len, UM_GFP_KERNEL);
+ output = uml_kmalloc(output_len, UM_GFP_KERNEL);
if (output == NULL)
printk(UM_KERN_ERR "change : failed to allocate output "
"buffer\n");
--- a/arch/um/drivers/port_user.c
+++ b/arch/um/drivers/port_user.c
@@ -47,7 +47,7 @@ static void *port_init(char *str, int de
if (kern_data == NULL)
return NULL;
- data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
+ data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
if (data == NULL)
goto err;
--- a/arch/um/drivers/pty.c
+++ b/arch/um/drivers/pty.c
@@ -29,7 +29,7 @@ static void *pty_chan_init(char *str, in
{
struct pty_chan *data;
- data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
+ data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
if (data == NULL)
return NULL;
--- a/arch/um/drivers/slip_user.c
+++ b/arch/um/drivers/slip_user.c
@@ -96,7 +96,7 @@ static int slip_tramp(char **argv, int f
pid = err;
output_len = UM_KERN_PAGE_SIZE;
- output = kmalloc(output_len, UM_GFP_KERNEL);
+ output = uml_kmalloc(output_len, UM_GFP_KERNEL);
if (output == NULL) {
printk(UM_KERN_ERR "slip_tramp : failed to allocate output "
"buffer\n");
--- a/arch/um/drivers/tty.c
+++ b/arch/um/drivers/tty.c
@@ -29,7 +29,7 @@ static void *tty_chan_init(char *str, in
}
str++;
- data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
+ data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
if (data == NULL)
return NULL;
*data = ((struct tty_chan) { .dev = str,
--- a/arch/um/drivers/xterm.c
+++ b/arch/um/drivers/xterm.c
@@ -30,7 +30,7 @@ static void *xterm_init(char *str, int d
{
struct xterm_chan *data;
- data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
+ data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
if (data == NULL)
return NULL;
*data = ((struct xterm_chan) { .pid = -1,
--- a/arch/um/include/um_malloc.h
+++ b/arch/um/include/um_malloc.h
@@ -8,15 +8,12 @@
#include "kern_constants.h"
-extern void *__kmalloc(int size, int flags);
-static inline void *kmalloc(int size, int flags)
-{
- return __kmalloc(size, flags);
-}
-
+extern void *uml_kmalloc(int size, int flags);
extern void kfree(const void *ptr);
extern void *vmalloc(unsigned long size);
extern void vfree(void *ptr);
#endif /* __UM_MALLOC_H__ */
+
+
--- a/arch/um/kernel/mem.c
+++ b/arch/um/kernel/mem.c
@@ -375,3 +375,8 @@ pmd_t *pmd_alloc_one(struct mm_struct *m
return pmd;
}
#endif
+
+void *uml_kmalloc(int size, int flags)
+{
+ return kmalloc(size, flags);
+}
--- a/arch/um/os-Linux/drivers/ethertap_user.c
+++ b/arch/um/os-Linux/drivers/ethertap_user.c
@@ -52,7 +52,7 @@ static void etap_change(int op, unsigned
return;
}
- output = kmalloc(UM_KERN_PAGE_SIZE, UM_GFP_KERNEL);
+ output = uml_kmalloc(UM_KERN_PAGE_SIZE, UM_GFP_KERNEL);
if (output == NULL)
printk(UM_KERN_ERR "etap_change : Failed to allocate output "
"buffer\n");
@@ -165,7 +165,7 @@ static int etap_open(void *data)
err = etap_tramp(pri->dev_name, pri->gate_addr, control_fds[0],
control_fds[1], data_fds[0], data_fds[1]);
output_len = UM_KERN_PAGE_SIZE;
- output = kmalloc(output_len, UM_GFP_KERNEL);
+ output = uml_kmalloc(output_len, UM_GFP_KERNEL);
read_output(control_fds[0], output, output_len);
if (output == NULL)
--- a/arch/um/os-Linux/helper.c
+++ b/arch/um/os-Linux/helper.c
@@ -70,8 +70,8 @@ int run_helper(void (*pre_exec)(void *),
data.pre_data = pre_data;
data.argv = argv;
data.fd = fds[1];
- data.buf = __cant_sleep() ? kmalloc(PATH_MAX, UM_GFP_ATOMIC) :
- kmalloc(PATH_MAX, UM_GFP_KERNEL);
+ data.buf = __cant_sleep() ? uml_kmalloc(PATH_MAX, UM_GFP_ATOMIC) :
+ uml_kmalloc(PATH_MAX, UM_GFP_KERNEL);
pid = clone(helper_child, (void *) sp, CLONE_VM, &data);
if (pid < 0) {
ret = -errno;
--- a/arch/um/os-Linux/main.c
+++ b/arch/um/os-Linux/main.c
@@ -199,7 +199,7 @@ void *__wrap_malloc(int size)
return __real_malloc(size);
else if (size <= UM_KERN_PAGE_SIZE)
/* finding contiguous pages can be hard*/
- ret = kmalloc(size, UM_GFP_KERNEL);
+ ret = uml_kmalloc(size, UM_GFP_KERNEL);
else ret = vmalloc(size);
/*
--- a/arch/um/os-Linux/sigio.c
+++ b/arch/um/os-Linux/sigio.c
@@ -109,7 +109,7 @@ static int need_poll(struct pollfds *pol
if (n <= polls->size)
return 0;
- new = kmalloc(n * sizeof(struct pollfd), UM_GFP_ATOMIC);
+ new = uml_kmalloc(n * sizeof(struct pollfd), UM_GFP_ATOMIC);
if (new == NULL) {
printk(UM_KERN_ERR "need_poll : failed to allocate new "
"pollfds\n");
@@ -243,7 +243,7 @@ static struct pollfd *setup_initial_poll
{
struct pollfd *p;
- p = kmalloc(sizeof(struct pollfd), UM_GFP_KERNEL);
+ p = uml_kmalloc(sizeof(struct pollfd), UM_GFP_KERNEL);
if (p == NULL) {
printk(UM_KERN_ERR "setup_initial_poll : failed to allocate "
"poll\n");
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 28/49] uml: fix bad NTP interaction with clock
[not found] ` <20080818191834.GA10350@suse.de>
2008-08-18 19:20 ` [uml-devel] [patch 27/49] uml: fix build when SLOB is enabled Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 29/49] uml: physical memory shouldnt include initial stack Greg KH
` (11 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Theodore Ts'o, Zwane Mwaikambo, uml-devel, WANG Cong,
Eugene Teo, Justin Forbes, Domenico Andreoli, Chris Wedgwood,
Jake Edge, Randy Dunlap, Michael Krufky, alan, Chuck Ebbert,
Dave Jones, Chuck Wolber, akpm, Jeff Dike, torvalds,
Willy Tarreau, Rodrigo Rubira Branco
[-- Attachment #1: uml-fix-bad-ntp-interaction-with-clock.patch --]
[-- Type: text/plain, Size: 1954 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit cfd28f6695d0fc047478480791a21bdd4967f98e upstream
UML's supposed nanosecond clock interacts badly with NTP when NTP
decides that the clock has drifted ahead and needs to be slowed down.
Slowing down the clock is done by decrementing the cycle-to-nanosecond
multiplier, which is 1. Decrementing that gives you 0 and time is
stopped.
This is fixed by switching to a microsecond clock, with a multiplier
of 1000.
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Cc: WANG Cong <xiyou.wangcong@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/kernel/time.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/arch/um/kernel/time.c
+++ b/arch/um/kernel/time.c
@@ -74,7 +74,7 @@ static irqreturn_t um_timer(int irq, voi
static cycle_t itimer_read(void)
{
- return os_nsecs();
+ return os_nsecs() / 1000;
}
static struct clocksource itimer_clocksource = {
@@ -82,7 +82,7 @@ static struct clocksource itimer_clockso
.rating = 300,
.read = itimer_read,
.mask = CLOCKSOURCE_MASK(64),
- .mult = 1,
+ .mult = 1000,
.shift = 0,
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 29/49] uml: physical memory shouldnt include initial stack
[not found] ` <20080818191834.GA10350@suse.de>
2008-08-18 19:20 ` [uml-devel] [patch 27/49] uml: fix build when SLOB is enabled Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 28/49] uml: fix bad NTP interaction with clock Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 30/49] uml: track and make up lost ticks Greg KH
` (10 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Jeff Dike, Theodore Ts'o, Zwane Mwaikambo, uml-devel,
WANG Cong, Eugene Teo, Justin Forbes, Domenico Andreoli,
Chris Wedgwood, Jake Edge, Randy Dunlap, Michael Krufky, alan,
Chuck Ebbert, Dave Jones, Chuck Wolber, akpm, Christopher S. Aker,
torvalds, Willy Tarreau, Rodrigo Rubira Branco
[-- Attachment #1: uml-physical-memory-shouldn-t-include-initial-stack.patch --]
[-- Type: text/plain, Size: 1961 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit 60a2988aea701a6424809a5432bf068667aac177 upstream
The top of physical memory should be below the initial process stack, not the
top of the address space, at least for as long as the stack isn't known to the
kernel VM system and appropriately reserved.
Cc: "Christopher S. Aker" <caker@theshore.net>
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Cc: WANG Cong <xiyou.wangcong@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/kernel/um_arch.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -259,6 +259,7 @@ int __init linux_main(int argc, char **a
unsigned long avail, diff;
unsigned long virtmem_size, max_physmem;
unsigned int i, add;
+ unsigned long stack;
char * mode;
for (i = 1; i < argc; i++) {
@@ -347,7 +348,9 @@ int __init linux_main(int argc, char **a
}
virtmem_size = physmem_size;
- avail = TASK_SIZE - start_vm;
+ stack = (unsigned long) argv;
+ stack &= ~(1024 * 1024 - 1);
+ avail = stack - start_vm;
if (physmem_size > avail)
virtmem_size = avail;
end_vm = start_vm + virtmem_size;
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 30/49] uml: track and make up lost ticks
[not found] ` <20080818191834.GA10350@suse.de>
` (2 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 29/49] uml: physical memory shouldnt include initial stack Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 31/49] uml: missed kmalloc() in pcap_user.c Greg KH
` (9 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Theodore Ts'o, Zwane Mwaikambo, uml-devel, Eugene Teo,
Justin Forbes, Domenico Andreoli, Chris Wedgwood, Jake Edge, Nix,
Randy Dunlap, Michael Krufky, alan, Chuck Ebbert, Dave Jones,
Chuck Wolber, akpm, Jeff Dike, torvalds, Willy Tarreau,
Rodrigo Rubira Branco
[-- Attachment #1: uml-track-and-make-up-lost-ticks.patch --]
[-- Type: text/plain, Size: 4685 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit fe2cc53ee013a4d4d0317d418e7019fe6533a5a8 upstream
Alarm delivery could be noticably late in the !CONFIG_NOHZ case because lost
ticks weren't being taken into account. This is now treated more carefully,
with the time between ticks being calculated and the appropriate number of
ticks delivered to the timekeeping system.
Cc: Nix <nix@esperi.org.uk>
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/include/process.h | 4 +--
arch/um/os-Linux/signal.c | 1
arch/um/os-Linux/time.c | 54 ++++++++++++++++++++++++++++++++++++++++++----
3 files changed, 53 insertions(+), 6 deletions(-)
--- a/arch/um/include/process.h
+++ b/arch/um/include/process.h
@@ -8,8 +8,8 @@
#include <signal.h>
-extern void sig_handler(int sig, struct sigcontext sc);
-extern void alarm_handler(int sig, struct sigcontext sc);
+extern void sig_handler(int sig, struct sigcontext *sc);
+extern void alarm_handler(int sig, struct sigcontext *sc);
#endif
--- a/arch/um/os-Linux/signal.c
+++ b/arch/um/os-Linux/signal.c
@@ -12,6 +12,7 @@
#include "as-layout.h"
#include "kern_util.h"
#include "os.h"
+#include "process.h"
#include "sysdep/barrier.h"
#include "sysdep/sigcontext.h"
#include "user.h"
--- a/arch/um/os-Linux/time.c
+++ b/arch/um/os-Linux/time.c
@@ -9,7 +9,9 @@
#include <time.h>
#include <sys/time.h>
#include "kern_constants.h"
+#include "kern_util.h"
#include "os.h"
+#include "process.h"
#include "user.h"
int set_interval(void)
@@ -58,12 +60,17 @@ static inline long long timeval_to_ns(co
long long disable_timer(void)
{
struct itimerval time = ((struct itimerval) { { 0, 0 }, { 0, 0 } });
+ int remain, max = UM_NSEC_PER_SEC / UM_HZ;
if (setitimer(ITIMER_VIRTUAL, &time, &time) < 0)
printk(UM_KERN_ERR "disable_timer - setitimer failed, "
"errno = %d\n", errno);
- return timeval_to_ns(&time.it_value);
+ remain = timeval_to_ns(&time.it_value);
+ if (remain > max)
+ remain = max;
+
+ return remain;
}
long long os_nsecs(void)
@@ -79,7 +86,44 @@ static int after_sleep_interval(struct t
{
return 0;
}
+
+static void deliver_alarm(void)
+{
+ alarm_handler(SIGVTALRM, NULL);
+}
+
+static unsigned long long sleep_time(unsigned long long nsecs)
+{
+ return nsecs;
+}
+
#else
+unsigned long long last_tick;
+unsigned long long skew;
+
+static void deliver_alarm(void)
+{
+ unsigned long long this_tick = os_nsecs();
+ int one_tick = UM_NSEC_PER_SEC / UM_HZ;
+
+ if (last_tick == 0)
+ last_tick = this_tick - one_tick;
+
+ skew += this_tick - last_tick;
+
+ while (skew >= one_tick) {
+ alarm_handler(SIGVTALRM, NULL);
+ skew -= one_tick;
+ }
+
+ last_tick = this_tick;
+}
+
+static unsigned long long sleep_time(unsigned long long nsecs)
+{
+ return nsecs > skew ? nsecs - skew : 0;
+}
+
static inline long long timespec_to_us(const struct timespec *ts)
{
return ((long long) ts->tv_sec * UM_USEC_PER_SEC) +
@@ -102,6 +146,8 @@ static int after_sleep_interval(struct t
*/
if (start_usecs > usec)
start_usecs = usec;
+
+ start_usecs -= skew / UM_NSEC_PER_USEC;
tv = ((struct timeval) { .tv_sec = start_usecs / UM_USEC_PER_SEC,
.tv_usec = start_usecs % UM_USEC_PER_SEC });
interval = ((struct itimerval) { { 0, usec }, tv });
@@ -113,8 +159,6 @@ static int after_sleep_interval(struct t
}
#endif
-extern void alarm_handler(int sig, struct sigcontext *sc);
-
void idle_sleep(unsigned long long nsecs)
{
struct timespec ts;
@@ -126,10 +170,12 @@ void idle_sleep(unsigned long long nsecs
*/
if (nsecs == 0)
nsecs = UM_NSEC_PER_SEC / UM_HZ;
+
+ nsecs = sleep_time(nsecs);
ts = ((struct timespec) { .tv_sec = nsecs / UM_NSEC_PER_SEC,
.tv_nsec = nsecs % UM_NSEC_PER_SEC });
if (nanosleep(&ts, &ts) == 0)
- alarm_handler(SIGVTALRM, NULL);
+ deliver_alarm();
after_sleep_interval(&ts);
}
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 31/49] uml: missed kmalloc() in pcap_user.c
[not found] ` <20080818191834.GA10350@suse.de>
` (3 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 30/49] uml: track and make up lost ticks Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 32/49] uml: deal with host time going backwards Greg KH
` (8 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Theodore Ts'o, Zwane Mwaikambo, uml-devel, Jeff Dike,
Eugene Teo, Justin Forbes, Domenico Andreoli, Chris Wedgwood,
Jake Edge, Randy Dunlap, Michael Krufky, alan, Chuck Ebbert,
Dave Jones, Chuck Wolber, akpm, torvalds, Willy Tarreau,
Rodrigo Rubira Branco, Al Viro
[-- Attachment #1: uml-missed-kmalloc-in-pcap_user.c.patch --]
[-- Type: text/plain, Size: 1422 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Al Viro <viro@ftp.linux.org.uk>
commit 296cd66f7f6e130fe08e6880ecb13c3fc615a8db upstream
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/drivers/pcap_user.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/um/drivers/pcap_user.c
+++ b/arch/um/drivers/pcap_user.c
@@ -50,7 +50,7 @@ static int pcap_open(void *data)
return -EIO;
}
- pri->compiled = kmalloc(sizeof(struct bpf_program),
+ pri->compiled = uml_kmalloc(sizeof(struct bpf_program),
UM_GFP_KERNEL);
if (pri->compiled == NULL) {
printk(UM_KERN_ERR "pcap_open : kmalloc failed\n");
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 32/49] uml: deal with host time going backwards
[not found] ` <20080818191834.GA10350@suse.de>
` (4 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 31/49] uml: missed kmalloc() in pcap_user.c Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 33/49] uml: deal with inaccessible address space start Greg KH
` (7 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Theodore Ts'o, Zwane Mwaikambo, uml-devel, Eugene Teo,
Justin Forbes, Domenico Andreoli, Chris Wedgwood, Jake Edge, Nix,
Randy Dunlap, Michael Krufky, alan, Chuck Ebbert, Dave Jones,
Chuck Wolber, akpm, Jeff Dike, torvalds, Willy Tarreau,
Rodrigo Rubira Branco
[-- Attachment #1: uml-deal-with-host-time-going-backwards.patch --]
[-- Type: text/plain, Size: 2051 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit 06e1e4ffbd1932e288839b3140cda6b8141eb684 upstream
Protection against the host's time going backwards (eg, ntp activity on
the host) by keeping track of the time at the last tick and if it's
greater than the current time, keep time stopped until the host catches
up.
Cc: Nix <nix@esperi.org.uk>
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/os-Linux/time.c | 7 +++++++
1 file changed, 7 insertions(+)
--- a/arch/um/os-Linux/time.c
+++ b/arch/um/os-Linux/time.c
@@ -106,6 +106,10 @@ static void deliver_alarm(void)
unsigned long long this_tick = os_nsecs();
int one_tick = UM_NSEC_PER_SEC / UM_HZ;
+ /* Protection against the host's time going backwards */
+ if ((last_tick != 0) && (this_tick < last_tick))
+ this_tick = last_tick;
+
if (last_tick == 0)
last_tick = this_tick - one_tick;
@@ -148,6 +152,9 @@ static int after_sleep_interval(struct t
start_usecs = usec;
start_usecs -= skew / UM_NSEC_PER_USEC;
+ if (start_usecs < 0)
+ start_usecs = 0;
+
tv = ((struct timeval) { .tv_sec = start_usecs / UM_USEC_PER_SEC,
.tv_usec = start_usecs % UM_USEC_PER_SEC });
interval = ((struct itimerval) { { 0, usec }, tv });
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 33/49] uml: deal with inaccessible address space start
[not found] ` <20080818191834.GA10350@suse.de>
` (5 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 32/49] uml: deal with host time going backwards Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 34/49] uml: missing export of csum_partial() on uml/amd64 Greg KH
` (6 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Tom Spink, Theodore Ts'o, Zwane Mwaikambo, uml-devel,
Eugene Teo, Justin Forbes, Domenico Andreoli, Chris Wedgwood,
Jake Edge, Randy Dunlap, Michael Krufky, alan, Chuck Ebbert,
Dave Jones, Chuck Wolber, akpm, Jeff Dike, torvalds,
Willy Tarreau, Rodrigo Rubira Branco
[-- Attachment #1: uml-deal-with-inaccessible-address-space-start.patch --]
[-- Type: text/plain, Size: 4836 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Tom Spink <tspink@gmail.com>
commit 40fb16a360d9c6459afee91dc793c1e3374feb94 upstream
This patch makes os_get_task_size locate the bottom of the address space,
as well as the top. This is for systems which put a lower limit on mmap
addresses. It works by manually scanning pages from zero onwards until a
valid page is found.
Because the bottom of the address space may not be zero, it's not
sufficient to assume the top of the address space is the size of the
address space. The size is the difference between the top address and
bottom address.
[jdike@addtoit.com: changed the name to reflect that this function is
supposed to return the top of the process address space, not its size and
changed the return value to reflect that. Also some minor formatting
changes]
Signed-off-by: Tom Spink <tspink@gmail.com>
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/include/os.h | 2 -
arch/um/kernel/um_arch.c | 2 -
arch/um/os-Linux/sys-i386/task_size.c | 38 ++++++++++++++++++++++++--------
arch/um/os-Linux/sys-x86_64/task_size.c | 2 -
4 files changed, 32 insertions(+), 12 deletions(-)
--- a/arch/um/include/os.h
+++ b/arch/um/include/os.h
@@ -298,6 +298,6 @@ extern int os_arch_prctl(int pid, int co
extern int get_pty(void);
/* sys-$ARCH/task_size.c */
-extern unsigned long os_get_task_size(void);
+extern unsigned long os_get_top_address(void);
#endif
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -273,7 +273,7 @@ int __init linux_main(int argc, char **a
if (have_root == 0)
add_arg(DEFAULT_COMMAND_LINE);
- host_task_size = os_get_task_size();
+ host_task_size = os_get_top_address();
/*
* TASK_SIZE needs to be PGDIR_SIZE aligned or else exit_mmap craps
* out
--- a/arch/um/os-Linux/sys-i386/task_size.c
+++ b/arch/um/os-Linux/sys-i386/task_size.c
@@ -63,7 +63,7 @@ static int page_ok(unsigned long page)
return ok;
}
-unsigned long os_get_task_size(void)
+unsigned long os_get_top_address(void)
{
struct sigaction sa, old;
unsigned long bottom = 0;
@@ -76,9 +76,9 @@ unsigned long os_get_task_size(void)
* hosts, but shouldn't hurt otherwise.
*/
unsigned long top = 0xffffd000 >> UM_KERN_PAGE_SHIFT;
- unsigned long test;
+ unsigned long test, original;
- printf("Locating the top of the address space ... ");
+ printf("Locating the bottom of the address space ... ");
fflush(stdout);
/*
@@ -88,14 +88,32 @@ unsigned long os_get_task_size(void)
sa.sa_handler = segfault;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_NODEFER;
- sigaction(SIGSEGV, &sa, &old);
+ if (sigaction(SIGSEGV, &sa, &old)) {
+ perror("os_get_top_address");
+ exit(1);
+ }
- if (!page_ok(bottom)) {
- fprintf(stderr, "Address 0x%x no good?\n",
- bottom << UM_KERN_PAGE_SHIFT);
+ /* Manually scan the address space, bottom-up, until we find
+ * the first valid page (or run out of them).
+ */
+ for (bottom = 0; bottom < top; bottom++) {
+ if (page_ok(bottom))
+ break;
+ }
+
+ /* If we've got this far, we ran out of pages. */
+ if (bottom == top) {
+ fprintf(stderr, "Unable to determine bottom of address "
+ "space.\n");
exit(1);
}
+ printf("0x%x\n", bottom << UM_KERN_PAGE_SHIFT);
+ printf("Locating the top of the address space ... ");
+ fflush(stdout);
+
+ original = bottom;
+
/* This could happen with a 4G/4G split */
if (page_ok(top))
goto out;
@@ -110,8 +128,10 @@ unsigned long os_get_task_size(void)
out:
/* Restore the old SIGSEGV handling */
- sigaction(SIGSEGV, &old, NULL);
-
+ if (sigaction(SIGSEGV, &old, NULL)) {
+ perror("os_get_top_address");
+ exit(1);
+ }
top <<= UM_KERN_PAGE_SHIFT;
printf("0x%x\n", top);
fflush(stdout);
--- a/arch/um/os-Linux/sys-x86_64/task_size.c
+++ b/arch/um/os-Linux/sys-x86_64/task_size.c
@@ -1,4 +1,4 @@
-unsigned long os_get_task_size(unsigned long shift)
+unsigned long os_get_top_address(unsigned long shift)
{
/* The old value of CONFIG_TOP_ADDR */
return 0x7fc0000000;
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 34/49] uml: missing export of csum_partial() on uml/amd64
[not found] ` <20080818191834.GA10350@suse.de>
` (6 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 33/49] uml: deal with inaccessible address space start Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 35/49] uml: memcpy export needs to follow host declaration Greg KH
` (5 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Theodore Ts'o, Zwane Mwaikambo, uml-devel, Jeff Dike,
Eugene Teo, Justin Forbes, Domenico Andreoli, Chris Wedgwood,
Jake Edge, Randy Dunlap, Michael Krufky, alan, Chuck Ebbert,
Dave Jones, Chuck Wolber, akpm, torvalds, Willy Tarreau,
Rodrigo Rubira Branco, Al Viro
[-- Attachment #1: uml-missing-export-of-csum_partial-on-uml-amd64.patch --]
[-- Type: text/plain, Size: 1267 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Al Viro <viro@ftp.linux.org.uk>
commit 3e3b48e5198544dd90e27265a70c1a834139e025 upstream
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/sys-x86_64/ksyms.c | 1 +
1 file changed, 1 insertion(+)
--- a/arch/um/sys-x86_64/ksyms.c
+++ b/arch/um/sys-x86_64/ksyms.c
@@ -14,3 +14,4 @@ EXPORT_SYMBOL(__up_wakeup);
/*XXX: we need them because they would be exported by x86_64 */
EXPORT_SYMBOL(__memcpy);
+EXPORT_SYMBOL(csum_partial);
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 35/49] uml: memcpy export needs to follow host declaration
[not found] ` <20080818191834.GA10350@suse.de>
` (7 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 34/49] uml: missing export of csum_partial() on uml/amd64 Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 36/49] uml: stub needs to tolerate SIGWINCH Greg KH
` (4 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Gabriel C, Theodore Ts'o, Zwane Mwaikambo, uml-devel,
Eugene Teo, Justin Forbes, Domenico Andreoli, Chris Wedgwood,
Jake Edge, Randy Dunlap, Michael Krufky, alan, Chuck Ebbert,
Dave Jones, Chuck Wolber, akpm, Jeff Dike, torvalds,
Willy Tarreau, Rodrigo Rubira Branco
[-- Attachment #1: uml-memcpy-export-needs-to-follow-host-declaration.patch --]
[-- Type: text/plain, Size: 1605 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit 8bfd04b974689f700bbd053ad6e66b0a95fb80c9 upstream
x86_64 defines either memcpy or __memcpy depending on the gcc version, and
it looks like UML needs to follow that in its exporting.
Cc: Gabriel C <nix.or.die@googlemail.com>
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/sys-x86_64/ksyms.c | 4 ++++
1 file changed, 4 insertions(+)
--- a/arch/um/sys-x86_64/ksyms.c
+++ b/arch/um/sys-x86_64/ksyms.c
@@ -13,5 +13,9 @@ EXPORT_SYMBOL(__down_failed_trylock);
EXPORT_SYMBOL(__up_wakeup);
/*XXX: we need them because they would be exported by x86_64 */
+#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) || __GNUC__ > 4
+EXPORT_SYMBOL(memcpy);
+#else
EXPORT_SYMBOL(__memcpy);
+#endif
EXPORT_SYMBOL(csum_partial);
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 36/49] uml: stub needs to tolerate SIGWINCH
[not found] ` <20080818191834.GA10350@suse.de>
` (8 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 35/49] uml: memcpy export needs to follow host declaration Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 37/49] uml: work around broken host PTRACE_SYSEMU Greg KH
` (3 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Theodore Ts'o, Zwane Mwaikambo, uml-devel, Benedict Verheyen,
Eugene Teo, Justin Forbes, Domenico Andreoli, Chris Wedgwood,
Jake Edge, Randy Dunlap, Michael Krufky, alan, Chuck Ebbert,
Dave Jones, Chuck Wolber, akpm, Jeff Dike, torvalds,
Willy Tarreau, Rodrigo Rubira Branco
[-- Attachment #1: uml-stub-needs-to-tolerate-sigwinch.patch --]
[-- Type: text/plain, Size: 1728 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit 3d5ede6f776bdb1483bcd086f79c3bf41fed3865 upstream
We lost the marking of SIGWINCH as being OK to receive during stub
execution, causing a panic should that happen.
Cc: Benedict Verheyen <benedict.verheyen@gmail.com>
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/os-Linux/skas/process.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/um/os-Linux/skas/process.c
+++ b/arch/um/os-Linux/skas/process.c
@@ -55,7 +55,7 @@ static int ptrace_dump_regs(int pid)
* Signals that are OK to receive in the stub - we'll just continue it.
* SIGWINCH will happen when UML is inside a detached screen.
*/
-#define STUB_SIG_MASK (1 << SIGVTALRM)
+#define STUB_SIG_MASK ((1 << SIGVTALRM) | (1 << SIGWINCH))
/* Signals that the stub will finish with - anything else is an error */
#define STUB_DONE_MASK (1 << SIGTRAP)
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 37/49] uml: work around broken host PTRACE_SYSEMU
[not found] ` <20080818191834.GA10350@suse.de>
` (9 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 36/49] uml: stub needs to tolerate SIGWINCH Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 38/49] uml: fix gcc ICEs and unresolved externs Greg KH
` (2 subsequent siblings)
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Theodore Ts'o, Zwane Mwaikambo, uml-devel, Eugene Teo,
Justin Forbes, Domenico Andreoli, Chris Wedgwood, Jake Edge,
Randy Dunlap, Michael Krufky, alan, Chuck Ebbert, Dave Jones,
Chuck Wolber, akpm, Jeff Dike, torvalds, Willy Tarreau,
Rodrigo Rubira Branco
[-- Attachment #1: uml-work-around-broken-host-ptrace_sysemu.patch --]
[-- Type: text/plain, Size: 3091 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit f1ef9167ca4494a8c6d71d0031c73e9c8841eadd upstream
Fedora broke PTRACE_SYSEMU again, and UML crashes as a result when it
doesn't need to. This patch makes the PTRACE_SYSEMU check fail gracefully
and makes UML fall back to PTRACE_SYSCALL.
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/os-Linux/start_up.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
--- a/arch/um/os-Linux/start_up.c
+++ b/arch/um/os-Linux/start_up.c
@@ -122,8 +122,10 @@ static int stop_ptraced_child(int pid, i
{
int status, n, ret = 0;
- if (ptrace(PTRACE_CONT, pid, 0, 0) < 0)
- fatal_perror("stop_ptraced_child : ptrace failed");
+ if (ptrace(PTRACE_CONT, pid, 0, 0) < 0) {
+ perror("stop_ptraced_child : ptrace failed");
+ return -1;
+ }
CATCH_EINTR(n = waitpid(pid, &status, 0));
if (!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) {
int exit_with = WEXITSTATUS(status);
@@ -203,7 +205,7 @@ static void __init check_sysemu(void)
if (n < 0)
fatal_perror("check_sysemu : wait failed");
if (!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP))
- fatal("check_sysemu : expected SIGTRAP, got status = %d",
+ fatal("check_sysemu : expected SIGTRAP, got status = %d\n",
status);
if (ptrace(PTRACE_GETREGS, pid, 0, regs) < 0)
@@ -245,9 +247,11 @@ static void __init check_sysemu(void)
if (WIFSTOPPED(status) &&
(WSTOPSIG(status) == (SIGTRAP|0x80))) {
- if (!count)
- fatal("check_ptrace : SYSEMU_SINGLESTEP "
- "doesn't singlestep");
+ if (!count) {
+ non_fatal("check_ptrace : SYSEMU_SINGLESTEP "
+ "doesn't singlestep");
+ goto fail;
+ }
n = ptrace(PTRACE_POKEUSR, pid, PT_SYSCALL_RET_OFFSET,
os_getpid());
if (n < 0)
@@ -257,9 +261,12 @@ static void __init check_sysemu(void)
}
else if (WIFSTOPPED(status) && (WSTOPSIG(status) == SIGTRAP))
count++;
- else
- fatal("check_ptrace : expected SIGTRAP or "
- "(SIGTRAP | 0x80), got status = %d", status);
+ else {
+ non_fatal("check_ptrace : expected SIGTRAP or "
+ "(SIGTRAP | 0x80), got status = %d\n",
+ status);
+ goto fail;
+ }
}
if (stop_ptraced_child(pid, 0, 0) < 0)
goto fail_stopped;
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 38/49] uml: fix gcc ICEs and unresolved externs
[not found] ` <20080818191834.GA10350@suse.de>
` (10 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 37/49] uml: work around broken host PTRACE_SYSEMU Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 39/49] uml: Fix boot crash Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 40/49] uml: PATH_MAX needs limits.h Greg KH
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Justin Forbes, Domenico Andreoli, Randy Dunlap, alan, Eugene Teo,
Chris Wedgwood, Michael Krufky, Ingo Molnar,
Rodrigo Rubira Branco, Chuck Wolber, Zwane Mwaikambo, uml-devel,
Jake Edge, Dave Jones, Jeff Dike, akpm, Theodore Ts'o,
Ulrich Drepper, Chuck Ebbert, Benny Halevy, torvalds,
Willy Tarreau
[-- Attachment #1: uml-fix-gcc-ices-and-unresolved-externs.patch --]
[-- Type: text/plain, Size: 3270 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit 4f81c5350b44bcc501ab6f8a089b16d064b4d2f6 upstream
There are various constraints on the use of unit-at-a-time:
- i386 uses no-unit-at-a-time for pre-4.0 (not 4.3)
- x86_64 uses unit-at-a-time always
Uli reported a crash on x86_64 with gcc 4.1.2 with unit-at-a-time,
resulting in commit c0a18111e571138747a98af18b3a2124df56a0d1
Ingo reported a gcc internal error with gcc 4.3 with no-unit-at-a-timem,
resulting in 22eecde2f9034764a3fd095eecfa3adfb8ec9a98
Benny Halevy is seeing extern inlines not resolved with gcc 4.3 with
no-unit-at-a-time
This patch reintroduces unit-at-a-time for gcc >= 4.0, bringing back the
possibility of Uli's crash. If that happens, we'll debug it.
I started seeing both the internal compiler errors and unresolved
inlines on Fedora 9. This patch fixes both problems, without so far
reintroducing the crash reported by Uli.
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Cc: Benny Halevy <bhalevy@panasas.com>
Cc: Adrian Bunk <bunk@kernel.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Ulrich Drepper <drepper@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/Makefile | 1 -
arch/um/Makefile-i386 | 7 +++++++
arch/um/Makefile-x86_64 | 3 +++
3 files changed, 10 insertions(+), 1 deletion(-)
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -77,7 +77,6 @@ include $(srctree)/$(ARCH_DIR)/Makefile-
KERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \
-Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES))
KBUILD_CFLAGS += $(KERNEL_DEFINES)
-KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time,)
PHONY += linux
--- a/arch/um/Makefile-i386
+++ b/arch/um/Makefile-i386
@@ -32,4 +32,11 @@ cflags-y += $(call cc-option,-mpreferred
# an unresolved reference.
cflags-y += -ffreestanding
+# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
+# a lot more stack due to the lack of sharing of stacklots. Also, gcc
+# 4.3.0 needs -funit-at-a-time for extern inline functions.
+KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then \
+ echo $(call cc-option,-fno-unit-at-a-time); \
+ else echo $(call cc-option,-funit-at-a-time); fi ;)
+
KBUILD_CFLAGS += $(cflags-y)
--- a/arch/um/Makefile-x86_64
+++ b/arch/um/Makefile-x86_64
@@ -21,3 +21,6 @@ HEADER_ARCH := x86
LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib64
LINK-y += -m64
+
+# Do unit-at-a-time unconditionally on x86_64, following the host
+KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time)
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 39/49] uml: Fix boot crash
[not found] ` <20080818191834.GA10350@suse.de>
` (11 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 38/49] uml: fix gcc ICEs and unresolved externs Greg KH
@ 2008-08-18 19:20 ` Greg KH
2008-08-18 19:20 ` [uml-devel] [patch 40/49] uml: PATH_MAX needs limits.h Greg KH
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Theodore Ts'o, Zwane Mwaikambo, uml-devel, Eugene Teo,
Justin Forbes, Domenico Andreoli, Chris Wedgwood, Jake Edge,
Randy Dunlap, Michael Krufky, alan, Chuck Ebbert, Dave Jones,
Chuck Wolber, akpm, Jeff Dike, torvalds, Willy Tarreau,
Rodrigo Rubira Branco
[-- Attachment #1: uml-fix-boot-crash.patch --]
[-- Type: text/plain, Size: 1894 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Dike <jdike@addtoit.com>
commit 7c1fed03b9fa32d4323d5caa6a9c7dcdd7eba767 upstream
My copying of linux/init.h didn't go far enough. The definition of
__used singled out gcc minor version 3, but didn't care what the major
version was. This broke when unit-at-a-time was added and gcc started
throwing out initcalls.
This results in an early boot crash when ptrace tries to initialize a
process with an empty, uninitialized register set.
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/include/init.h | 8 ++++++++
1 file changed, 8 insertions(+)
--- a/arch/um/include/init.h
+++ b/arch/um/include/init.h
@@ -45,6 +45,8 @@ typedef void (*exitcall_t)(void);
# define __section(S) __attribute__ ((__section__(#S)))
#endif
+#if __GNUC__ == 3
+
#if __GNUC_MINOR__ >= 3
# define __used __attribute__((__used__))
#else
@@ -52,6 +54,12 @@ typedef void (*exitcall_t)(void);
#endif
#else
+#if __GNUC__ == 4
+# define __used __attribute__((__used__))
+#endif
+#endif
+
+#else
#include <linux/compiler.h>
#endif
/* These are for everybody (although not all archs will actually
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread* [uml-devel] [patch 40/49] uml: PATH_MAX needs limits.h
[not found] ` <20080818191834.GA10350@suse.de>
` (12 preceding siblings ...)
2008-08-18 19:20 ` [uml-devel] [patch 39/49] uml: Fix boot crash Greg KH
@ 2008-08-18 19:20 ` Greg KH
13 siblings, 0 replies; 14+ messages in thread
From: Greg KH @ 2008-08-18 19:20 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Ingo Molnar, Theodore Ts'o, Zwane Mwaikambo, uml-devel,
Eugene Teo, Justin Forbes, Domenico Andreoli, Chris Wedgwood,
Jake Edge, Randy Dunlap, Michael Krufky, alan, Chuck Ebbert,
Dave Jones, Chuck Wolber, akpm, Jeff Dike, torvalds,
Willy Tarreau, Rodrigo Rubira Branco
[-- Attachment #1: uml-path_max-needs-limits.h.patch --]
[-- Type: text/plain, Size: 1390 bytes --]
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Ingo Molnar <mingo@elte.hu>
commit b6d8adf477439e7086224bc9674c6b6638780783 upstream.
Include limits.h to get a definition of PATH_MAX.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/os-Linux/helper.c | 1 +
1 file changed, 1 insertion(+)
--- a/arch/um/os-Linux/helper.c
+++ b/arch/um/os-Linux/helper.c
@@ -7,6 +7,7 @@
#include <unistd.h>
#include <errno.h>
#include <sched.h>
+#include <linux/limits.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include "kern_constants.h"
--
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 14+ messages in thread