* ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] [not found] <20031113124510.GZ643@openzaurus.ucw.cz> @ 2003-11-21 15:39 ` Pavel Machek 2003-11-21 20:14 ` Jens Axboe 2003-11-21 22:45 ` Linus Torvalds 0 siblings, 2 replies; 10+ messages in thread From: Pavel Machek @ 2003-11-21 15:39 UTC (permalink / raw) To: Jens Axboe, Linux Kernel Hi! > > I'm attaching the simple ionice tool. It's used as follows: > > Here's one that works, sorry about that. To compile: > > # gcc -Wall -D__X86 -o ionice ionice.c > > or other define for PPC or X86_64. Well, did that, run it on vanilla kernel, and it kills the machine. Can someone reproduce it? Pavel [What is needed to start using cfq? Is your patch, this utility and elevator=cfq enough?] #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <getopt.h> #include <unistd.h> #include <sys/ptrace.h> #include <asm/unistd.h> extern int sys_ioprio_set(int); extern int sys_ioprio_get(void); #ifdef __X86 #define __NR_ioprio_set 274 #define __NR_ioprio_get 275 #endif #ifdef __X86_64 #define __NR_ioprio_set 237 #define __NR_ioprio_get 238 #endif #ifdef __PPC #define __NR_ioprio_set 255 #define __NR_ioprio_get 256 #endif #ifndef __NR_ioprio_set #error set arch #endif _syscall1(int, ioprio_set, int, ioprio); _syscall0(int, ioprio_get); int main(int argc, char *argv[]) { int ioprio = 2, set = 0; int c; while ((c = getopt(argc, argv, "+n:")) != EOF) { switch (c) { case 'n': ioprio = strtol(optarg, NULL, 10); set = 1; break; } } if (!set) printf("%d\n", ioprio_get()); else if (argv[optind]) { if (ioprio_set(ioprio) == -1) { perror("ioprio_set"); return 1; } execvp(argv[optind], &argv[optind]); } return 0; } ----- End forwarded message ----- -- Pavel Written on sharp zaurus, because my Velo1 broke. If you have Velo you don't need... -- When do you have a heart between your knees? [Johanka's followup: and *two* hearts?] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] 2003-11-21 15:39 ` ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] Pavel Machek @ 2003-11-21 20:14 ` Jens Axboe 2003-11-24 3:44 ` Benjamin Herrenschmidt 2003-11-21 22:45 ` Linus Torvalds 1 sibling, 1 reply; 10+ messages in thread From: Jens Axboe @ 2003-11-21 20:14 UTC (permalink / raw) To: Pavel Machek; +Cc: Linux Kernel On Fri, Nov 21 2003, Pavel Machek wrote: > Hi! > > > > I'm attaching the simple ionice tool. It's used as follows: > > > > Here's one that works, sorry about that. To compile: > > > > # gcc -Wall -D__X86 -o ionice ionice.c > > > > or other define for PPC or X86_64. > > Well, did that, run it on vanilla kernel, and it kills the > machine. Can someone reproduce it? I saw that on ppc too, btw, didn't trace it yet. But there definitely is a problem with calling syscalls that don't exist. > [What is needed to start using cfq? Is your patch, this utility and > elevator=cfq enough?] Yes, that is it. Your result may vary though, I have a newer cfq that's almost ready for release that fixes varies performance problems. -- Jens Axboe ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] 2003-11-21 20:14 ` Jens Axboe @ 2003-11-24 3:44 ` Benjamin Herrenschmidt 0 siblings, 0 replies; 10+ messages in thread From: Benjamin Herrenschmidt @ 2003-11-24 3:44 UTC (permalink / raw) To: Jens Axboe; +Cc: Pavel Machek, Linux Kernel list > I saw that on ppc too, btw, didn't trace it yet. But there definitely is > a problem with calling syscalls that don't exist. > > > [What is needed to start using cfq? Is your patch, this utility and > > elevator=cfq enough?] We had an additional bug on PPC with signals above NR_signal that paulus recent patches should have fixed Ben. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] 2003-11-21 15:39 ` ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] Pavel Machek 2003-11-21 20:14 ` Jens Axboe @ 2003-11-21 22:45 ` Linus Torvalds 2003-11-21 23:05 ` Linus Torvalds 1 sibling, 1 reply; 10+ messages in thread From: Linus Torvalds @ 2003-11-21 22:45 UTC (permalink / raw) To: Pavel Machek; +Cc: Jens Axboe, Linux Kernel On Fri, 21 Nov 2003, Pavel Machek wrote: > > Well, did that, run it on vanilla kernel, and it kills the > machine. Can someone reproduce it? Ok, looks like a binutils bug to me. "nr_syscalls" is mis-assembled at least on x86. The code says nr_syscalls=(.-sys_call_table)/4 but if you actually look at the disassembly of entry.S, you'll notice that the constant used in the object file is the one without the division. Just do "gdb vmlinux" and do "disassemble system_call" to see this. It says something like cmp $0x448,%eax jae syscall_badsys and it _should_ use just 274 (0x112 rather than 0x448) on x86. Now, I wonder if this has ever worked, of which binutils version broke it.. Linus ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] 2003-11-21 22:45 ` Linus Torvalds @ 2003-11-21 23:05 ` Linus Torvalds 2003-11-21 23:33 ` Linus Torvalds ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: Linus Torvalds @ 2003-11-21 23:05 UTC (permalink / raw) To: Pavel Machek; +Cc: Jens Axboe, Linux Kernel, bug-binutils [ Trivial test input file included, and "bug-binutils" added to the CC ] On Fri, 21 Nov 2003, Linus Torvalds wrote: > > Just do "gdb vmlinux" and do "disassemble system_call" to see this. It > says something like > > cmp $0x448,%eax > jae syscall_badsys > > and it _should_ use just 274 (0x112 rather than 0x448) on x86. > > Now, I wonder if this has ever worked, of which binutils version broke > it.. Some looking around shows that it works correctly on a SuSE box with GNU assembler version 2.13.90.0.18 (i486-suse-linux) using BFD version 2.13.90.0.18 20030121 (SuSE Linux) GNU ld version 2.13.90.0.18 20030121 (SuSE Linux) but is broken on RH Fedora core 1: GNU assembler version 2.14.90.0.6 (i386-redhat-linux) using BFD version 2.14.90.0.6 20030820 GNU ld version 2.14.90.0.6 20030820 So it definitely _does_ work in some versions, and the bug appears to be new to binutils 2.14, with 2.13 doing the right thing. You can trivially see if with a simple assembly file like start: .long 1,2,3,a a=(.-start)/4 where 2.13.90 as shipped by SuSE will get it right (and generate a list of 1,2,3,4), while 2.14.90 from Fedora core will generate 1,2,3,16. Linus ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] 2003-11-21 23:05 ` Linus Torvalds @ 2003-11-21 23:33 ` Linus Torvalds 2003-11-22 11:04 ` Jamie Lokier 2003-11-22 4:42 ` Alan Modra 2003-11-26 20:06 ` Nick Clifton 2 siblings, 1 reply; 10+ messages in thread From: Linus Torvalds @ 2003-11-21 23:33 UTC (permalink / raw) To: Pavel Machek; +Cc: Jens Axboe, Linux Kernel, bug-binutils On Fri, 21 Nov 2003, Linus Torvalds wrote: > > So it definitely _does_ work in some versions, and the bug appears to be > new to binutils 2.14, with 2.13 doing the right thing. It looks like we can work around it with this silly syntactic sugar.. Does this work for you? Linus --- ===== arch/i386/kernel/entry.S 1.69 vs edited ===== --- 1.69/arch/i386/kernel/entry.S Wed Oct 1 06:53:17 2003 +++ edited/arch/i386/kernel/entry.S Fri Nov 21 15:32:00 2003 @@ -49,6 +49,8 @@ #include <asm/page.h> #include "irq_vectors.h" +#define nr_syscalls ((syscall_table_size)/4) + EBX = 0x00 ECX = 0x04 EDX = 0x08 @@ -881,4 +883,4 @@ .long sys_fadvise64_64 .long sys_ni_syscall /* sys_vserver */ -nr_syscalls=(.-sys_call_table)/4 +syscall_table_size=(.-sys_call_table) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] 2003-11-21 23:33 ` Linus Torvalds @ 2003-11-22 11:04 ` Jamie Lokier 0 siblings, 0 replies; 10+ messages in thread From: Jamie Lokier @ 2003-11-22 11:04 UTC (permalink / raw) To: Linus Torvalds; +Cc: Pavel Machek, Jens Axboe, Linux Kernel, bug-binutils Linus Torvalds wrote: > It looks like we can work around it with this silly syntactic sugar.. Does > this work for you? Or try this: nr_syscalls=(.-sys_call_table)>>2 -- Jamie ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] 2003-11-21 23:05 ` Linus Torvalds 2003-11-21 23:33 ` Linus Torvalds @ 2003-11-22 4:42 ` Alan Modra 2003-11-26 20:06 ` Nick Clifton 2 siblings, 0 replies; 10+ messages in thread From: Alan Modra @ 2003-11-22 4:42 UTC (permalink / raw) To: Linus Torvalds; +Cc: Pavel Machek, Jens Axboe, bug-binutils, Linux Kernel On Fri, Nov 21, 2003 at 03:05:23PM -0800, Linus Torvalds wrote: > So it definitely _does_ work in some versions, and the bug appears to be > new to binutils 2.14, with 2.13 doing the right thing. > > You can trivially see if with a simple assembly file like > > start: > .long 1,2,3,a > a=(.-start)/4 Broken with http://sources.redhat.com/ml/binutils/2003-04/msg00412.html and http://sources.redhat.com/ml/binutils/2003-04/msg00414.html. That '/' is being treated as a start of line comment char, thus trimming the rest of the line. I think gas/app.c:do_scrub_chars is such an awful mess that it's impossible to get right. Needs to be tossed out and rewritten. The fundamental problem is that you can't track which component of an assember input line you're preprocessing without more information on the particular target syntax. And most of the current complexity is just for deciding whether to remove whitespace! That at least needs to go. For now, I'm reverting HJ's patches and including your testcase in the gas testsuite. gas/ChangeLog * app.c (do_scrub_chars): Revert 2003-04-23 and 2003-04-22. gas/testsuite/ChangeLog * gas/i386/divide.s: New. * gas/i386/divide.d: New. * gas/i386/i386.exp (gas_32_check): Run it. Index: app.c =================================================================== RCS file: /cvs/src/src/gas/app.c,v retrieving revision 1.26 diff -u -p -r1.26 app.c --- app.c 21 Nov 2003 01:52:16 -0000 1.26 +++ app.c 22 Nov 2003 04:24:01 -0000 @@ -1308,13 +1308,11 @@ do_scrub_chars (int (*get) (char *, int) /* Some relatively `normal' character. */ if (state == 0) { - if (IS_SYMBOL_COMPONENT (ch)) - state = 11; /* Now seeing label definition. */ + state = 11; /* Now seeing label definition. */ } else if (state == 1) { - if (IS_SYMBOL_COMPONENT (ch)) - state = 2; /* Ditto. */ + state = 2; /* Ditto. */ } else if (state == 9) { Index: testsuite/gas/i386/divide.d =================================================================== RCS file: testsuite/gas/i386/divide.d diff -N testsuite/gas/i386/divide.d --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ testsuite/gas/i386/divide.d 22 Nov 2003 04:41:09 -0000 @@ -0,0 +1,8 @@ +#objdump: -s +#name: i386 divide + +.*: +file format .* + +Contents of section .* + 0000 01000000 02000000 03000000 04000000 .* + 0010 05000000 .* Index: testsuite/gas/i386/divide.s =================================================================== RCS file: testsuite/gas/i386/divide.s diff -N testsuite/gas/i386/divide.s --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ testsuite/gas/i386/divide.s 22 Nov 2003 04:41:09 -0000 @@ -0,0 +1,4 @@ +start: + .long 1,2,3,a,b + a=(.-start)/4-1 +b=(.-start)/4 Index: testsuite/gas/i386/i386.exp =================================================================== RCS file: /cvs/src/src/gas/testsuite/gas/i386/i386.exp,v retrieving revision 1.19 diff -u -p -r1.19 i386.exp --- testsuite/gas/i386/i386.exp 23 Jun 2003 20:15:33 -0000 1.19 +++ testsuite/gas/i386/i386.exp 22 Nov 2003 04:41:09 -0000 @@ -57,6 +57,7 @@ if [expr ([istarget "i*86-*-*"] || [ist run_dump_test "pcrel" run_dump_test "sub" run_dump_test "prescott" + run_dump_test "divide" # PIC is only supported on ELF targets. if { ([istarget "*-*-elf*"] || [istarget "*-*-linux*"] ) -- Alan Modra IBM OzLabs - Linux Technology Centre ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] 2003-11-21 23:05 ` Linus Torvalds 2003-11-21 23:33 ` Linus Torvalds 2003-11-22 4:42 ` Alan Modra @ 2003-11-26 20:06 ` Nick Clifton 2003-11-26 20:23 ` Jakub Jelinek 2 siblings, 1 reply; 10+ messages in thread From: Nick Clifton @ 2003-11-26 20:06 UTC (permalink / raw) To: torvalds; +Cc: pavel, axboe, bug-binutils, linux-kernel Hi Linus, > You can trivially see if with a simple assembly file like > > start: > .long 1,2,3,a > a=(.-start)/4 > > where 2.13.90 as shipped by SuSE will get it right (and generate a > list of 1,2,3,4), while 2.14.90 from Fedora core will generate > 1,2,3,16. It appears that the 2.14.90.0.6 release of binutils used with the Fedora code needs the patch below applied. This patch has been committed to the 2_14 branch and the mainline binutils sources. Cheers Nick Clifton Binutils Maintainer ----------------------------------------------------------------------- gas/ChangeLog 2003-04-30 Alan Modra <amodra@bigpond.net.au> * app.c (do_scrub_chars): Revert 2003-04-23 and 2003-04-22 changes. Index: gas/app.c =================================================================== RCS file: /repositories/repositories/sourceware/src/gas/app.c,v retrieving revision 1.23 diff -c -3 -p -r1.23 app.c *** gas/app.c 23 Apr 2003 17:51:41 -0000 1.23 --- gas/app.c 26 Nov 2003 20:02:32 -0000 *************** do_scrub_chars (get, tostart, tolen) *** 1294,1300 **** } else if (state == 1) { - if (IS_SYMBOL_COMPONENT (ch)) state = 2; /* Ditto. */ } else if (state == 9) --- 1294,1299 ---- ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] 2003-11-26 20:06 ` Nick Clifton @ 2003-11-26 20:23 ` Jakub Jelinek 0 siblings, 0 replies; 10+ messages in thread From: Jakub Jelinek @ 2003-11-26 20:23 UTC (permalink / raw) To: Nick Clifton; +Cc: torvalds, pavel, axboe, linux-kernel On Wed, Nov 26, 2003 at 08:06:00PM +0000, Nick Clifton wrote: > Hi Linus, > > > You can trivially see if with a simple assembly file like > > > > start: > > .long 1,2,3,a > > a=(.-start)/4 > > > > where 2.13.90 as shipped by SuSE will get it right (and generate a > > list of 1,2,3,4), while 2.14.90 from Fedora core will generate > > 1,2,3,16. > > It appears that the 2.14.90.0.6 release of binutils used with the > Fedora code needs the patch below applied. This patch has been > committed to the 2_14 branch and the mainline binutils sources. That's not the only change needed. https://www.redhat.com/archives/fedora-test-list/2003-November/msg01380.html Jakub ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2003-11-26 20:24 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20031113124510.GZ643@openzaurus.ucw.cz>
2003-11-21 15:39 ` ionice kills vanilla 2.6.0-test9 was [Re: [PATCH] cfq + io priorities (fwd)] Pavel Machek
2003-11-21 20:14 ` Jens Axboe
2003-11-24 3:44 ` Benjamin Herrenschmidt
2003-11-21 22:45 ` Linus Torvalds
2003-11-21 23:05 ` Linus Torvalds
2003-11-21 23:33 ` Linus Torvalds
2003-11-22 11:04 ` Jamie Lokier
2003-11-22 4:42 ` Alan Modra
2003-11-26 20:06 ` Nick Clifton
2003-11-26 20:23 ` Jakub Jelinek
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox