linux-um archives
 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; 7+ 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] 7+ 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   ` [uml-devel] [stable] " Greg KH
  2011-04-20 11:34 ` [PATCH 3/3] uml: fix hppfs build Richard Weinberger
  1 sibling, 1 reply; 7+ 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] 7+ 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; 7+ 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] 7+ 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
  2011-04-20 14:29     ` Richard Weinberger
  0 siblings, 1 reply; 7+ 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] 7+ messages in thread

* Re: [stable] [PATCH 2/3] um: Add support for 64 bit atomic operations
  2011-04-20 14:27   ` [uml-devel] [stable] " Greg KH
@ 2011-04-20 14:29     ` Richard Weinberger
  2011-04-20 14:34       ` Greg KH
  0 siblings, 1 reply; 7+ 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] 7+ 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; 7+ 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] 7+ 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; 7+ 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] 7+ messages in thread

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

Thread overview: 7+ 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: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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox