All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Howells <dhowells@redhat.com>
To: akpm@osdl.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH] FRV Minix & ext2 bitops fixes
Date: Tue, 14 Dec 2004 16:13:57 +0000	[thread overview]
Message-ID: <9392.1103040837@redhat.com> (raw)


The attached patch does two things:

 (1) Implements the ext2/ext3 bitops in terms of the main bitops functions.

 (2) Changes the Minix bitops to use the ext2 bitops (LE) rather than the main
     bitops (BE).

Signed-Off-By: David Howells <dhowells@redhat.com>
---
warthog>diffstat frv-bitops-2610rc2mm3.diff 
 bitops.h |   71 +++++++++------------------------------------------------------
 1 files changed, 11 insertions(+), 60 deletions(-)

diff -uNr linux-2.6.10-rc3-mm1-mmcleanup/include/asm-frv/bitops.h linux-2.6.10-rc3-mm1-misc/include/asm-frv/bitops.h
--- linux-2.6.10-rc3-mm1-mmcleanup/include/asm-frv/bitops.h	2004-12-13 17:34:20.000000000 +0000
+++ linux-2.6.10-rc3-mm1-misc/include/asm-frv/bitops.h	2004-12-14 15:33:31.000000000 +0000
@@ -258,65 +258,16 @@
 #define hweight16(x) generic_hweight16(x)
 #define hweight8(x) generic_hweight8(x)
 
-static inline int ext2_set_bit(int nr, volatile void * addr)
-{
-	unsigned long old, tmp, mask;
-	volatile unsigned char *ptr = addr;
-	ptr += nr >> 3;
-
-	asm("0:						\n"
-	    "	setlos.p	#1,%3			\n"
-	    "	orcc		gr0,gr0,gr0,icc3	\n"	/* set ICC3.Z */
-	    "	sll%I4.p	%3,%4,%3		\n"
-	    "	ckeq		icc3,cc7		\n"
-	    "	ldub.p		%M0,%1			\n"	/* LDUB.P/ORCR must be atomic */
-	    "	orcr		cc7,cc7,cc3		\n"	/* set CC3 to true */
-	    "	or		%1,%3,%2		\n"
-	    "	cstb.p		%2,%M0		,cc3,#1	\n"
-	    "	corcc		gr29,gr29,gr0	,cc3,#1	\n"	/* clear ICC3.Z if store happens */
-	    "	beq		icc3,#0,0b		\n"
-	    : "+U"(*ptr), "=&r"(old), "=r"(tmp), "=&r"(mask)
-	    : "Ir"(nr & 7)
-	    : "memory", "cc7", "cc3", "icc3"
-	    );
-
-	return old & mask;
-}
-
-#define ext2_set_bit_atomic(lock,nr,addr) ext2_set_bit((nr), addr)
-
-static inline int ext2_clear_bit(int nr, volatile void * addr)
-{
-	unsigned long old, tmp, mask;
-	volatile unsigned char *ptr = addr;
-	ptr += nr >> 3;
-
-	asm("0:						\n"
-	    "	setlos.p	#1,%3			\n"
-	    "	orcc		gr0,gr0,gr0,icc3	\n"	/* set ICC3.Z */
-	    "	sll%I4.p	%3,%4,%3		\n"
-	    "	ckeq		icc3,cc7		\n"
-	    "	ldub.p		%M0,%1			\n"	/* LDUB.P/ORCR must be atomic */
-	    "	orcr		cc7,cc7,cc3		\n"	/* set CC3 to true */
-	    "	not		%3,%2			\n"
-	    "	and		%1,%2,%2		\n"
-	    "	cstb.p		%2,%M0		,cc3,#1	\n"
-	    "	corcc		gr29,gr29,gr0	,cc3,#1	\n"	/* clear ICC3.Z if store happens */
-	    "	beq		icc3,#0,0b		\n"
-	    : "+U"(*ptr), "=&r"(old), "=r"(tmp), "=&r"(mask)
-	    : "Ir"(nr & 7)
-	    : "memory", "cc7", "cc3", "icc3"
-	    );
-
-	return old & mask;
-}
+#define ext2_set_bit(nr, addr)		test_and_set_bit  ((nr) ^ 0x18, (addr))
+#define ext2_clear_bit(nr, addr)	test_and_clear_bit((nr) ^ 0x18, (addr))
 
-#define ext2_clear_bit_atomic(lock,nr,addr) ext2_clear_bit((nr), addr)
+#define ext2_set_bit_atomic(lock,nr,addr)	ext2_set_bit((nr), addr)
+#define ext2_clear_bit_atomic(lock,nr,addr)	ext2_clear_bit((nr), addr)
 
 static inline int ext2_test_bit(int nr, const volatile void * addr)
 {
-	int			mask;
-	const volatile unsigned char	*ADDR = (const unsigned char *) addr;
+	const volatile unsigned char *ADDR = (const unsigned char *) addr;
+	int mask;
 
 	ADDR += nr >> 3;
 	mask = 1 << (nr & 0x07);
@@ -379,11 +330,11 @@
 }
 
 /* Bitmap functions for the minix filesystem.  */
-#define minix_test_and_set_bit(nr,addr)		test_and_set_bit(nr,addr)
-#define minix_set_bit(nr,addr)			set_bit(nr,addr)
-#define minix_test_and_clear_bit(nr,addr)	test_and_clear_bit(nr,addr)
-#define minix_test_bit(nr,addr)			test_bit(nr,addr)
-#define minix_find_first_zero_bit(addr,size)	find_first_zero_bit(addr,size)
+#define minix_test_and_set_bit(nr,addr)		ext2_set_bit(nr,addr)
+#define minix_set_bit(nr,addr)			ext2_set_bit(nr,addr)
+#define minix_test_and_clear_bit(nr,addr)	ext2_clear_bit(nr,addr)
+#define minix_test_bit(nr,addr)			ext2_test_bit(nr,addr)
+#define minix_find_first_zero_bit(addr,size)	ext2_find_first_zero_bit(addr,size)
 
 #endif /* __KERNEL__ */
 

                 reply	other threads:[~2004-12-14 16:16 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9392.1103040837@redhat.com \
    --to=dhowells@redhat.com \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.