Messages in this thread Patch in this message | | | Date | Thu, 11 Oct 2007 09:27:12 -0400 | From | Mathieu Desnoyers <> | Subject | Re: [patch 4/5] Linux Kernel Markers - Samples |
| |
* Andrew Morton (akpm@linux-foundation.org) wrote: > On Fri, 28 Sep 2007 10:28:49 -0400 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> wrote: > > > Module example showing how to use the Linux Kernel Markers. > > s390: > > samples/markers/marker-example.c: In function 'my_open': > samples/markers/marker-example.c:22: warning: asm operand 0 probably doesn't match constraints > samples/markers/marker-example.c:24: warning: asm operand 0 probably doesn't match constraints > samples/markers/marker-example.c:22: error: impossible constraint in 'asm' > samples/markers/marker-example.c:24: error: impossible constraint in 'asm'
Hrm, I have s390 gcc-4.1.1 here and cannot reproduce the problem with it.
What compiler are you using ?
This is clearly caused by the : asm volatile ("" : : "i" (&__mark_##name));
It is there to specify that the __mark_##name variable is used. In the first implementations, I did not pass it as a parameter to the following function call, so I had to find a way to tell gcc that it should not go away. I first planned to use a "__used" attribute, but Jeremy said it was buggy on some gcc versions. (http://lkml.org/lkml/2006/10/17/235)
He suggested the following: asm volatile("" : : "m" (thing));
But I guess it ended up not working so well, since I changed it for a "i" operand. However, if some s390 gccs do not like it, it's better to figure out another solution.
Well, as a very very simple solution, let's just remove the asm. It is not needed anymore since the pointer is passed as parameter to the called function.
The patch follows.
Mathieu
Linux Kernel Markers - Remove Unneeded asm
On s390 (with some compiler) :
> samples/markers/marker-example.c: In function 'my_open': > samples/markers/marker-example.c:22: warning: asm operand 0 probably doesn't > match constraints > samples/markers/marker-example.c:24: warning: asm operand 0 probably doesn't > match constraints > samples/markers/marker-example.c:22: error: impossible constraint in 'asm' > samples/markers/marker-example.c:24: error: impossible constraint in 'asm'
It is there to specify that the __mark_##name variable is used. In the first implementations, I did not pass it as a parameter to the following function call, so I had to find a way to tell gcc that it should not go away. I first planned to use a "__used" attribute, but Jeremy said it was buggy on some gcc versions. (http://lkml.org/lkml/2006/10/17/235)
He suggested the following: asm volatile("" : : "m" (thing));
But I guess it ended up not working so well, since I changed it for a "i" operand. However, if some s390 gccs do not like it, it's better to figure out another solution.
Well, as a very very simple solution, let's just remove the asm. It is not needed anymore since the pointer is passed as parameter to the called function.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> --- include/linux/marker.h | 1 - 1 file changed, 1 deletion(-)
Index: linux-2.6-lttng/include/linux/marker.h =================================================================== --- linux-2.6-lttng.orig/include/linux/marker.h 2007-10-11 09:20:04.000000000 -0400 +++ linux-2.6-lttng/include/linux/marker.h 2007-10-11 09:20:23.000000000 -0400 @@ -61,7 +61,6 @@ struct marker { __attribute__((section("__markers"), aligned(8))) = \ { __mstrtab_name_##name, __mstrtab_format_##name, \ 0, __mark_empty_function, NULL }; \ - asm volatile ("" : : "i" (&__mark_##name)); \ __mark_check_format(format, ## args); \ if (unlikely(__mark_##name.state)) { \ preempt_disable(); \ -- Mathieu Desnoyers Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |