From: Mathieu Desnoyers 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 Signed-off-by: Andrew Morton --- include/linux/marker.h | 1 - 1 file changed, 1 deletion(-) diff -puN include/linux/marker.h~linux-kernel-markers-samples-remove-asm include/linux/marker.h --- a/include/linux/marker.h~linux-kernel-markers-samples-remove-asm +++ a/include/linux/marker.h @@ -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(); \ _