All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] um: Adjust current_thread_info() for gcc-4.6
@ 2011-04-20 11:34 Richard Weinberger
  2011-04-20 11:34 ` [uml-devel] [PATCH 2/3] um: Add support for 64 bit atomic operations Richard Weinberger
  2011-04-20 11:34 ` [PATCH 3/3] uml: fix hppfs build Richard Weinberger
  0 siblings, 2 replies; 8+ messages in thread
From: Richard Weinberger @ 2011-04-20 11:34 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, user-mode-linux-devel, Richard Weinberger

In some cases gcc-4.6 will optimize away current_thread_info().
To prevent gcc from doing so the stack address has to be obtained
via inline asm.

LKML-Reference: http://marc.info/?i=201104132150.05623.richard@nod.at

Signed-off-by: Richard Weinberger <richard@nod.at>
---
 arch/um/include/asm/thread_info.h |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/arch/um/include/asm/thread_info.h b/arch/um/include/asm/thread_info.h
index e2cf786..5bd1bad 100644
--- a/arch/um/include/asm/thread_info.h
+++ b/arch/um/include/asm/thread_info.h
@@ -49,7 +49,10 @@ static inline struct thread_info *current_thread_info(void)
 {
 	struct thread_info *ti;
 	unsigned long mask = THREAD_SIZE - 1;
-	ti = (struct thread_info *) (((unsigned long) &ti) & ~mask);
+	void *p;
+
+	asm volatile ("" : "=r" (p) : "0" (&ti));
+	ti = (struct thread_info *) (((unsigned long)p) & ~mask);
 	return ti;
 }
 
-- 
1.7.4.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [uml-devel] [PATCH 2/3] um: Add support for 64 bit atomic operations
  2011-04-20 11:34 [PATCH 1/3] um: Adjust current_thread_info() for gcc-4.6 Richard Weinberger
@ 2011-04-20 11:34 ` Richard Weinberger
  2011-04-20 14:27     ` Greg KH
  2011-04-20 11:34 ` [PATCH 3/3] uml: fix hppfs build Richard Weinberger
  1 sibling, 1 reply; 8+ messages in thread
From: Richard Weinberger @ 2011-04-20 11:34 UTC (permalink / raw)
  To: akpm
  Cc: user-mode-linux-devel, Richard Weinberger, linux-kernel, disable,
	stable

This adds support for 64 bit atomic operations on
32 bit UML systems.
XFS needs them since 2.6.38.

Reported-by: Martin Walch <walch.martin@web.de>
Tested-by: Martin Walch <walch.martin@web.de>
Cc: Martin Walch <walch.martin@web.de>
Cc: <stable@kernel.org> # .38.x 084189a: um: disable CONFIG_CMPXCHG_LOCAL
Signed-off-by: Richard Weinberger <richard@nod.at>
---
 arch/um/sys-i386/Makefile          |    2 +-
 arch/um/sys-i386/atomic64_cx8_32.S |  225 ++++++++++++++++++++++++++++++++++++
 2 files changed, 226 insertions(+), 1 deletions(-)
 create mode 100644 arch/um/sys-i386/atomic64_cx8_32.S

diff --git a/arch/um/sys-i386/Makefile b/arch/um/sys-i386/Makefile
index 804b28d..b1da91c 100644
--- a/arch/um/sys-i386/Makefile
+++ b/arch/um/sys-i386/Makefile
@@ -4,7 +4,7 @@
 
 obj-y = bug.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \
 	ptrace_user.o setjmp.o signal.o stub.o stub_segv.o syscalls.o sysrq.o \
-	sys_call_table.o tls.o
+	sys_call_table.o tls.o atomic64_cx8_32.o
 
 obj-$(CONFIG_BINFMT_ELF) += elfcore.o
 
diff --git a/arch/um/sys-i386/atomic64_cx8_32.S b/arch/um/sys-i386/atomic64_cx8_32.S
new file mode 100644
index 0000000..1e901d3
--- /dev/null
+++ b/arch/um/sys-i386/atomic64_cx8_32.S
@@ -0,0 +1,225 @@
+/*
+ * atomic64_t for 586+
+ *
+ * Copied from arch/x86/lib/atomic64_cx8_32.S
+ *
+ * Copyright © 2010  Luca Barbieri
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+#include <linux/linkage.h>
+#include <asm/alternative-asm.h>
+#include <asm/dwarf2.h>
+
+.macro SAVE reg
+	pushl_cfi %\reg
+	CFI_REL_OFFSET \reg, 0
+.endm
+
+.macro RESTORE reg
+	popl_cfi %\reg
+	CFI_RESTORE \reg
+.endm
+
+.macro read64 reg
+	movl %ebx, %eax
+	movl %ecx, %edx
+/* we need LOCK_PREFIX since otherwise cmpxchg8b always does the write */
+	LOCK_PREFIX
+	cmpxchg8b (\reg)
+.endm
+
+ENTRY(atomic64_read_cx8)
+	CFI_STARTPROC
+
+	read64 %ecx
+	ret
+	CFI_ENDPROC
+ENDPROC(atomic64_read_cx8)
+
+ENTRY(atomic64_set_cx8)
+	CFI_STARTPROC
+
+1:
+/* we don't need LOCK_PREFIX since aligned 64-bit writes
+ * are atomic on 586 and newer */
+	cmpxchg8b (%esi)
+	jne 1b
+
+	ret
+	CFI_ENDPROC
+ENDPROC(atomic64_set_cx8)
+
+ENTRY(atomic64_xchg_cx8)
+	CFI_STARTPROC
+
+	movl %ebx, %eax
+	movl %ecx, %edx
+1:
+	LOCK_PREFIX
+	cmpxchg8b (%esi)
+	jne 1b
+
+	ret
+	CFI_ENDPROC
+ENDPROC(atomic64_xchg_cx8)
+
+.macro addsub_return func ins insc
+ENTRY(atomic64_\func\()_return_cx8)
+	CFI_STARTPROC
+	SAVE ebp
+	SAVE ebx
+	SAVE esi
+	SAVE edi
+
+	movl %eax, %esi
+	movl %edx, %edi
+	movl %ecx, %ebp
+
+	read64 %ebp
+1:
+	movl %eax, %ebx
+	movl %edx, %ecx
+	\ins\()l %esi, %ebx
+	\insc\()l %edi, %ecx
+	LOCK_PREFIX
+	cmpxchg8b (%ebp)
+	jne 1b
+
+10:
+	movl %ebx, %eax
+	movl %ecx, %edx
+	RESTORE edi
+	RESTORE esi
+	RESTORE ebx
+	RESTORE ebp
+	ret
+	CFI_ENDPROC
+ENDPROC(atomic64_\func\()_return_cx8)
+.endm
+
+addsub_return add add adc
+addsub_return sub sub sbb
+
+.macro incdec_return func ins insc
+ENTRY(atomic64_\func\()_return_cx8)
+	CFI_STARTPROC
+	SAVE ebx
+
+	read64 %esi
+1:
+	movl %eax, %ebx
+	movl %edx, %ecx
+	\ins\()l $1, %ebx
+	\insc\()l $0, %ecx
+	LOCK_PREFIX
+	cmpxchg8b (%esi)
+	jne 1b
+
+10:
+	movl %ebx, %eax
+	movl %ecx, %edx
+	RESTORE ebx
+	ret
+	CFI_ENDPROC
+ENDPROC(atomic64_\func\()_return_cx8)
+.endm
+
+incdec_return inc add adc
+incdec_return dec sub sbb
+
+ENTRY(atomic64_dec_if_positive_cx8)
+	CFI_STARTPROC
+	SAVE ebx
+
+	read64 %esi
+1:
+	movl %eax, %ebx
+	movl %edx, %ecx
+	subl $1, %ebx
+	sbb $0, %ecx
+	js 2f
+	LOCK_PREFIX
+	cmpxchg8b (%esi)
+	jne 1b
+
+2:
+	movl %ebx, %eax
+	movl %ecx, %edx
+	RESTORE ebx
+	ret
+	CFI_ENDPROC
+ENDPROC(atomic64_dec_if_positive_cx8)
+
+ENTRY(atomic64_add_unless_cx8)
+	CFI_STARTPROC
+	SAVE ebp
+	SAVE ebx
+/* these just push these two parameters on the stack */
+	SAVE edi
+	SAVE esi
+
+	movl %ecx, %ebp
+	movl %eax, %esi
+	movl %edx, %edi
+
+	read64 %ebp
+1:
+	cmpl %eax, 0(%esp)
+	je 4f
+2:
+	movl %eax, %ebx
+	movl %edx, %ecx
+	addl %esi, %ebx
+	adcl %edi, %ecx
+	LOCK_PREFIX
+	cmpxchg8b (%ebp)
+	jne 1b
+
+	movl $1, %eax
+3:
+	addl $8, %esp
+	CFI_ADJUST_CFA_OFFSET -8
+	RESTORE ebx
+	RESTORE ebp
+	ret
+4:
+	cmpl %edx, 4(%esp)
+	jne 2b
+	xorl %eax, %eax
+	jmp 3b
+	CFI_ENDPROC
+ENDPROC(atomic64_add_unless_cx8)
+
+ENTRY(atomic64_inc_not_zero_cx8)
+	CFI_STARTPROC
+	SAVE ebx
+
+	read64 %esi
+1:
+	testl %eax, %eax
+	je 4f
+2:
+	movl %eax, %ebx
+	movl %edx, %ecx
+	addl $1, %ebx
+	adcl $0, %ecx
+	LOCK_PREFIX
+	cmpxchg8b (%esi)
+	jne 1b
+
+	movl $1, %eax
+3:
+	RESTORE ebx
+	ret
+4:
+	testl %edx, %edx
+	jne 2b
+	jmp 3b
+	CFI_ENDPROC
+ENDPROC(atomic64_inc_not_zero_cx8)
-- 
1.7.4.2


------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload 
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve 
application availability and disaster protection. Learn more about boosting 
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
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 related	[flat|nested] 8+ messages in thread

* [PATCH 3/3] uml: fix hppfs build
  2011-04-20 11:34 [PATCH 1/3] um: Adjust current_thread_info() for gcc-4.6 Richard Weinberger
  2011-04-20 11:34 ` [uml-devel] [PATCH 2/3] um: Add support for 64 bit atomic operations Richard Weinberger
@ 2011-04-20 11:34 ` Richard Weinberger
  1 sibling, 0 replies; 8+ messages in thread
From: Richard Weinberger @ 2011-04-20 11:34 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, user-mode-linux-devel, Randy Dunlap,
	Richard Weinberger

From: Randy Dunlap <randy.dunlap@oracle.com>

Make HoneyPot ProcFS depend on CONFIG_PROC_FS so that it will build.
Recommended by Christoph Hellwig.

Fixes kernel bugzilla #33692:
  https://bugzilla.kernel.org/show_bug.cgi?id=33692

Reported-by: Simon Danner <danner.simon@gmail.com>
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Cc:	Jeff Dike <jdike@addtoit.com>
Cc:	user-mode-linux-devel@lists.sourceforge.net
Cc:	Christoph Hellwig <hch@infradead.org>
Signed-off-by: Richard Weinberger <richard@nod.at>
---
 arch/um/Kconfig.um |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/um/Kconfig.um b/arch/um/Kconfig.um
index 90a438a..b5e675e 100644
--- a/arch/um/Kconfig.um
+++ b/arch/um/Kconfig.um
@@ -47,7 +47,7 @@ config HOSTFS
 
 config HPPFS
 	tristate "HoneyPot ProcFS (EXPERIMENTAL)"
-	depends on EXPERIMENTAL
+	depends on EXPERIMENTAL && PROC_FS
 	help
 	  hppfs (HoneyPot ProcFS) is a filesystem which allows UML /proc
 	  entries to be overridden, removed, or fabricated from the host.
-- 
1.7.4.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [uml-devel] [stable] [PATCH 2/3] um: Add support for 64 bit atomic operations
  2011-04-20 11:34 ` [uml-devel] [PATCH 2/3] um: Add support for 64 bit atomic operations Richard Weinberger
@ 2011-04-20 14:27     ` Greg KH
  0 siblings, 0 replies; 8+ messages in thread
From: Greg KH @ 2011-04-20 14:27 UTC (permalink / raw)
  To: Richard Weinberger; +Cc: stable, akpm, user-mode-linux-devel, linux-kernel

On Wed, Apr 20, 2011 at 01:34:25PM +0200, Richard Weinberger wrote:
> This adds support for 64 bit atomic operations on
> 32 bit UML systems.
> XFS needs them since 2.6.38.
> 
> Reported-by: Martin Walch <walch.martin@web.de>
> Tested-by: Martin Walch <walch.martin@web.de>
> Cc: Martin Walch <walch.martin@web.de>
> Cc: <stable@kernel.org> # .38.x 084189a: um: disable CONFIG_CMPXCHG_LOCAL

Why is this a stable patch?

confused,

greg k-h

------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload 
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve 
application availability and disaster protection. Learn more about boosting 
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
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] 8+ messages in thread

* Re: [stable] [PATCH 2/3] um: Add support for 64 bit atomic operations
@ 2011-04-20 14:27     ` Greg KH
  0 siblings, 0 replies; 8+ messages in thread
From: Greg KH @ 2011-04-20 14:27 UTC (permalink / raw)
  To: Richard Weinberger
  Cc: akpm, Martin Walch, linux-kernel, user-mode-linux-devel, stable

On Wed, Apr 20, 2011 at 01:34:25PM +0200, Richard Weinberger wrote:
> This adds support for 64 bit atomic operations on
> 32 bit UML systems.
> XFS needs them since 2.6.38.
> 
> Reported-by: Martin Walch <walch.martin@web.de>
> Tested-by: Martin Walch <walch.martin@web.de>
> Cc: Martin Walch <walch.martin@web.de>
> Cc: <stable@kernel.org> # .38.x 084189a: um: disable CONFIG_CMPXCHG_LOCAL

Why is this a stable patch?

confused,

greg k-h

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [stable] [PATCH 2/3] um: Add support for 64 bit atomic operations
  2011-04-20 14:27     ` Greg KH
  (?)
@ 2011-04-20 14:29     ` Richard Weinberger
  2011-04-20 14:34       ` Greg KH
  -1 siblings, 1 reply; 8+ messages in thread
From: Richard Weinberger @ 2011-04-20 14:29 UTC (permalink / raw)
  To: Greg KH; +Cc: akpm, Martin Walch, linux-kernel, user-mode-linux-devel, stable

Am Mittwoch 20 April 2011, 16:27:02 schrieb Greg KH:
> On Wed, Apr 20, 2011 at 01:34:25PM +0200, Richard Weinberger wrote:
> > This adds support for 64 bit atomic operations on
> > 32 bit UML systems.
> > XFS needs them since 2.6.38.
> > 
> > Reported-by: Martin Walch <walch.martin@web.de>
> > Tested-by: Martin Walch <walch.martin@web.de>
> > Cc: Martin Walch <walch.martin@web.de>
> > Cc: <stable@kernel.org> # .38.x 084189a: um: disable CONFIG_CMPXCHG_LOCAL
> 
> Why is this a stable patch?

Because it fixes a build error in 2.6.38.
See: https://bugzilla.kernel.org/show_bug.cgi?id=32812

Thanks,
//richard

> confused,
> 
> greg k-h


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [stable] [PATCH 2/3] um: Add support for 64 bit atomic operations
  2011-04-20 14:29     ` Richard Weinberger
@ 2011-04-20 14:34       ` Greg KH
  2011-04-20 14:36         ` Richard Weinberger
  0 siblings, 1 reply; 8+ messages in thread
From: Greg KH @ 2011-04-20 14:34 UTC (permalink / raw)
  To: Richard Weinberger
  Cc: akpm, Martin Walch, linux-kernel, user-mode-linux-devel, stable

On Wed, Apr 20, 2011 at 04:29:23PM +0200, Richard Weinberger wrote:
> Am Mittwoch 20 April 2011, 16:27:02 schrieb Greg KH:
> > On Wed, Apr 20, 2011 at 01:34:25PM +0200, Richard Weinberger wrote:
> > > This adds support for 64 bit atomic operations on
> > > 32 bit UML systems.
> > > XFS needs them since 2.6.38.
> > > 
> > > Reported-by: Martin Walch <walch.martin@web.de>
> > > Tested-by: Martin Walch <walch.martin@web.de>
> > > Cc: Martin Walch <walch.martin@web.de>
> > > Cc: <stable@kernel.org> # .38.x 084189a: um: disable CONFIG_CMPXCHG_LOCAL
> > 
> > Why is this a stable patch?
> 
> Because it fixes a build error in 2.6.38.
> See: https://bugzilla.kernel.org/show_bug.cgi?id=32812

Then why not put that in the changelog entry in the first place?

thanks,

greg "please save me time" k-h

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [stable] [PATCH 2/3] um: Add support for 64 bit atomic operations
  2011-04-20 14:34       ` Greg KH
@ 2011-04-20 14:36         ` Richard Weinberger
  0 siblings, 0 replies; 8+ messages in thread
From: Richard Weinberger @ 2011-04-20 14:36 UTC (permalink / raw)
  To: Greg KH; +Cc: akpm, Martin Walch, linux-kernel, user-mode-linux-devel, stable

Am Mittwoch 20 April 2011, 16:34:08 schrieb Greg KH:
> On Wed, Apr 20, 2011 at 04:29:23PM +0200, Richard Weinberger wrote:
> > Am Mittwoch 20 April 2011, 16:27:02 schrieb Greg KH:
> > > On Wed, Apr 20, 2011 at 01:34:25PM +0200, Richard Weinberger wrote:
> > > > This adds support for 64 bit atomic operations on
> > > > 32 bit UML systems.
> > > > XFS needs them since 2.6.38.
> > > > 
> > > > Reported-by: Martin Walch <walch.martin@web.de>
> > > > Tested-by: Martin Walch <walch.martin@web.de>
> > > > Cc: Martin Walch <walch.martin@web.de>
> > > > Cc: <stable@kernel.org> # .38.x 084189a: um: disable
> > > > CONFIG_CMPXCHG_LOCAL
> > > 
> > > Why is this a stable patch?
> > 
> > Because it fixes a build error in 2.6.38.
> > See: https://bugzilla.kernel.org/show_bug.cgi?id=32812
> 
> Then why not put that in the changelog entry in the first place?

Sorry, will do better next time!

Thanks,
//richard

> thanks,
> 
> greg "please save me time" k-h


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-04-20 14:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-20 11:34 [PATCH 1/3] um: Adjust current_thread_info() for gcc-4.6 Richard Weinberger
2011-04-20 11:34 ` [uml-devel] [PATCH 2/3] um: Add support for 64 bit atomic operations Richard Weinberger
2011-04-20 14:27   ` [uml-devel] [stable] " Greg KH
2011-04-20 14:27     ` Greg KH
2011-04-20 14:29     ` Richard Weinberger
2011-04-20 14:34       ` Greg KH
2011-04-20 14:36         ` Richard Weinberger
2011-04-20 11:34 ` [PATCH 3/3] uml: fix hppfs build Richard Weinberger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.