* 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 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: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: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 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 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;
as well as URLs for NNTP newsgroup(s).