On Wednesday 16 February 2005 17:09, Alex Zarochentsev wrote:
> On Wed, Feb 16, 2005 at 02:17:49PM +0100, [EMAIL PROTECTED] wrote:
> > Hi,
> >
> > i just wondered about reiser4fs working on SPARC64? I use Gentoo Sparc64
> > and it is working fine with kernel 2.4.28. But is the Reiser4 code
> > SPARC64 ready?
>
> It would be nice if you try it :) we have no reiser4/sparc64 reports yet.
>
> Reiser4 code is included into AKPM's -mm kernels.  mkfs and other utils are
> in the ftp://ftp.namesys.com/pub/reiser4progs/
>
> At least 3 additional patches are needed for running reiser4 on sparc64.
> They not yet included into -mm kernels.  I am attaching them to this
> e-mail.

and at least these 2 patches needs to applied also.

-- 
Thanks,
Vitaly Fertman
diff -rup libaal-1.0.3/include/aal/Makefile.am libaal-1.0.3-1/include/aal/Makefile.am
--- libaal-1.0.3/include/aal/Makefile.am	2004-01-08 15:49:40.000000000 +0100
+++ libaal-1.0.3-1/include/aal/Makefile.am	2005-01-16 22:18:51.000000000 +0100
@@ -2,4 +2,4 @@ aalincludedir		= $(includedir)/aal
 
 aalinclude_HEADERS   	= libaal.h device.h file.h exception.h list.h malloc.h \
 			  print.h string.h math.h endian.h debug.h bitops.h \
-                          gauge.h block.h ui.h stream.h hash.h types.h
+                          gauge.h block.h ui.h stream.h hash.h types.h unaligned.h
diff -rup libaal-1.0.3/include/aal/Makefile.in libaal-1.0.3-1/include/aal/Makefile.in
--- libaal-1.0.3/include/aal/Makefile.in	2004-12-06 19:04:14.000000000 +0100
+++ libaal-1.0.3-1/include/aal/Makefile.in	2005-01-16 15:24:49.000000000 +0100
@@ -146,7 +146,7 @@ aalincludedir = $(includedir)/aal
 
 aalinclude_HEADERS = libaal.h device.h file.h exception.h list.h malloc.h \
 			  print.h string.h math.h endian.h debug.h bitops.h \
-                          gauge.h block.h ui.h stream.h hash.h types.h
+                          gauge.h block.h ui.h stream.h hash.h types.h unaligned.h
 
 subdir = include/aal
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
diff -rup libaal-1.0.3/include/aal/endian.h libaal-1.0.3-1/include/aal/endian.h
--- libaal-1.0.3/include/aal/endian.h	2003-07-27 10:55:29.000000000 +0200
+++ libaal-1.0.3-1/include/aal/endian.h	2005-01-16 22:29:19.000000000 +0100
@@ -75,8 +75,8 @@
 
 #endif
 
-#define aal_get_leXX(xx, p, field)	(LE##xx##_TO_CPU ((p)->field))
-#define aal_set_leXX(xx, p, field, val)	((p)->field = CPU_TO_LE##xx(val))
+#define aal_get_leXX(xx, p, field)	(LE##xx##_TO_CPU (get_unaligned(&(p)->field)))
+#define aal_set_leXX(xx, p, field, val)	put_unaligned(&(p)->field, CPU_TO_LE##xx(val))
 
 #define aal_get_le16(p, field) 		aal_get_leXX(16, p, field)
 #define aal_set_le16(p, field, val) 	aal_set_leXX(16, p, field, val)
diff -rup libaal-1.0.3/include/aal/libaal.h libaal-1.0.3-1/include/aal/libaal.h
--- libaal-1.0.3/include/aal/libaal.h	2004-09-22 14:27:23.000000000 +0200
+++ libaal-1.0.3-1/include/aal/libaal.h	2005-01-16 22:18:51.000000000 +0100
@@ -26,6 +26,7 @@ extern "C" {
 #include "math.h"
 #include "bitops.h"
 #include "endian.h"
+#include "unaligned.h"
 #include "debug.h"
 #include "gauge.h"
 #include "block.h"
diff -rup libaal-1.0.3/include/aal/unaligned.h libaal-1.0.3-1/include/aal/unaligned.h
--- libaal-1.0.3/include/aal/unaligned.h	2005-01-16 23:09:05.000000000 +0100
+++ libaal-1.0.3-1/include/aal/unaligned.h	2005-01-16 22:18:51.000000000 +0100
@@ -0,0 +1,26 @@
+/* Copyright (C) 2001-2005 by Hans Reiser, licensing governed by libaal/COPYING.
+         
+   unaligned.h -- libaal unalignment declaration. */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#ifndef AAL_UNALIGNED_H
+#define AAL_UNALIGNED_H
+
+#define get_unaligned(ptr)				\
+({							\
+	__typeof__(*(ptr)) __tmp;			\
+	aal_memcpy(&__tmp, (ptr), sizeof(*(ptr)));	\
+	__tmp;						\
+})
+
+#define put_unaligned(ptr, val)				\
+({							\
+	__typeof__(*(ptr)) __tmp = (val);		\
+	aal_memcpy((ptr), &__tmp, sizeof(*(ptr)));	\
+	(void)0;					\
+})
+
+#endif
diff -rup reiser4progs-1.0.3/plugin/item/cde40/cde40.h reiser4progs-1.0.3-1/plugin/item/cde40/cde40.h
--- reiser4progs-1.0.3/plugin/item/cde40/cde40.h	2004-06-30 01:42:33.000000000 +0200
+++ reiser4progs-1.0.3-1/plugin/item/cde40/cde40.h	2005-01-16 22:57:58.000000000 +0100
@@ -33,6 +33,7 @@ struct objid3 {
 
 typedef struct objid3 objid3_t;
 
+
 struct hash3 {
 	d8_t objectid[8];
 	d8_t offset[8];
@@ -130,71 +131,76 @@ extern uint32_t cde40_cut(reiser4_place_
 extern uint16_t cde40_overhead();
 
 #if defined(ENABLE_SHORT_KEYS) && defined(ENABLE_LARGE_KEYS)
+
+/* objidN_t macroses. */
+#define ob_loc(ob, pol)							\
+	((pol == 3) ?							\
+	 ((objid3_t *)(ob))->locality :					\
+	 ((objid4_t *)(ob))->locality)
+ 
 #define ob_get_locality(ob, pol)					\
-        ((pol == 3) ?							\
-	 LE64_TO_CPU(*((d64_t *)((objid3_t *)(ob))->locality)) :	\
-	 LE64_TO_CPU(*((d64_t *)((objid4_t *)(ob))->locality)))
+	LE64_TO_CPU(get_unaligned((d64_t *)ob_loc(ob, pol)))
 
 #define ob_set_locality(ob, val, pol)					\
-        ((pol == 3) ?							\
-	 (*(d64_t *)((objid3_t *)(ob))->locality) = CPU_TO_LE64(val) :	\
-	 (*(d64_t *)((objid4_t *)(ob))->locality) = CPU_TO_LE64(val))
+	put_unaligned((d64_t *)ob_loc(ob, pol), CPU_TO_LE64(val))
+
+#define ob_oid(ob, pol)							\
+	((pol == 3) ?							\
+	 ((objid3_t *)(ob))->objectid :					\
+	 ((objid4_t *)(ob))->objectid)
 
 #define ob_get_objectid(ob, pol)					\
-        ((pol == 3) ?							\
-	 LE64_TO_CPU(*((d64_t *)((objid3_t *)(ob))->objectid)) :	\
-	 LE64_TO_CPU(*((d64_t *)((objid4_t *)(ob))->objectid)))
+	LE64_TO_CPU(get_unaligned((d64_t *)ob_oid(ob, pol)))
 
 #define ob_set_objectid(ob, val, pol)					\
-        ({if (pol == 3)							\
-	 (*(d64_t *)((objid3_t *)(ob))->objectid) = CPU_TO_LE64(val);	\
-         else								\
-	 (*(d64_t *)((objid4_t *)(ob))->objectid) = CPU_TO_LE64(val);})
+	put_unaligned((d64_t *)ob_oid(ob, pol), CPU_TO_LE64(val))
+
+#define ob_ord(ob, pol) ((pol == 3) ? 0 : ((objid4_t *)(ob))->ordering)
 
 #define ob_get_ordering(ob, pol)					\
-        ((pol == 3) ? 0 :						\
-	 LE64_TO_CPU(*((d64_t *)((objid4_t *)(ob))->ordering)))
+	LE64_TO_CPU(get_unaligned((d64_t *)ob_ord(ob, pol)))
 
 #define ob_set_ordering(ob, val, pol)					\
-        ({if (pol == 3) do {} while(0); else				\
-	 (*(d64_t *)((objid4_t *)(ob))->ordering) = CPU_TO_LE64(val);})
+	({if (pol == 3) do {} while(0); else				\
+	 put_unaligned((d64_t *)ob_ord(ob, pol), CPU_TO_LE64(val));})
 
-#define ob_size(pol)							\
-        ((pol == 3) ? sizeof(objid3_t) : sizeof(objid4_t))
+#define ob_size(pol) ((pol == 3) ? sizeof(objid3_t) : sizeof(objid4_t))
+
+/* hashN_t macroses.  */
+#define ha_oid(ha, pol)							\
+	((pol == 3) ?							\
+	 ((hash3_t *)(ha))->objectid :					\
+	 ((hash4_t *)(ha))->objectid)
 
 #define ha_get_objectid(ha, pol)					\
-        ((pol == 3) ?							\
-	 LE64_TO_CPU(*((d64_t *)((hash3_t *)(ha))->objectid)) :		\
-	 LE64_TO_CPU(*((d64_t *)((hash4_t *)(ha))->objectid)))
+	LE64_TO_CPU(get_unaligned((d64_t *)ha_oid(ha, pol)))
 
 #define ha_set_objectid(ha, val, pol)					\
-        ({if (pol == 3)							\
-         (*(d64_t *)((hash3_t *)(ha))->objectid) = CPU_TO_LE64(val);	\
-	 else								\
-	 (*(d64_t *)((hash4_t *)(ha))->objectid) = CPU_TO_LE64(val);})
+	put_unaligned((d64_t *)ha_oid(ha, pol),  CPU_TO_LE64(val))
+
+#define ha_off(ha, pol)							\
+	((pol == 3) ?							\
+	 ((hash3_t *)(ha))->offset :					\
+	 ((hash4_t *)(ha))->offset)
 
 #define ha_get_offset(ha, pol)						\
-        ((pol == 3) ?							\
-         LE64_TO_CPU(*((d64_t *)((hash3_t *)(ha))->offset)) :		\
-	 LE64_TO_CPU(*((d64_t *)((hash4_t *)(ha))->offset)))
-	 
+	LE64_TO_CPU(get_unaligned((d64_t *)ha_off(ha, pol)))
+
 #define ha_set_offset(ha, val, pol)					\
-        ({if (pol == 3)							\
-        (*(d64_t *)((hash3_t *)(ha))->offset) = CPU_TO_LE64(val);	\
-        else								\
-        (*(d64_t *)((hash4_t *)(ha))->offset) = CPU_TO_LE64(val);})
+	put_unaligned((d64_t *)ha_off(ha, pol), CPU_TO_LE64(val))
+
+#define ha_ord(ha, pol) ((pol == 3) ? 0 : ((hash4_t *)(ha))->ordering)
 
 #define ha_get_ordering(ha, pol)					\
-        ((pol == 3) ? 0 :						\
-	 LE64_TO_CPU(*((d64_t *)((hash4_t *)(ha))->ordering)))
-	 
+	LE64_TO_CPU(get_unaligned((d64_t *)ha_ord(ha, pol)))
+
 #define ha_set_ordering(ha, val, pol)					\
-        ({if (pol == 3) do {} while(0); else				\
-        (*(d64_t *)((hash4_t *)(ha))->ordering) = CPU_TO_LE64(val);})
+	({if (pol == 3) do {} while(0); else				\
+	 put_unaligned((d64_t *)ha_ord(ha, pol), CPU_TO_LE64(val));})
 
-#define ha_size(pol)							\
-        ((pol == 3) ? sizeof(hash3_t) : sizeof(hash4_t))
+#define ha_size(pol) ((pol == 3) ? sizeof(hash3_t) : sizeof(hash4_t))
 
+/* entryN_t macroses */
 #define en_get_offset(en, pol)						\
         ((pol == 3) ?							\
 	 aal_get_le16(((entry3_t *)(en)), offset) :			\
@@ -214,97 +220,108 @@ extern uint16_t cde40_overhead();
 	 (void *)(&((cde403_t *)(pl)->body)->entry[pos]) :		\
 	 (void *)(&((cde404_t *)(pl)->body)->entry[pos]))
 
-#else
-#if defined(ENABLE_SHORT_KEYS)
+#elif defined(ENABLE_SHORT_KEYS)
+
+/* objidN_t macroses.  */
 #define ob_get_locality(ob, pol)					\
-	 LE64_TO_CPU(*((d64_t *)((objid3_t *)(ob))->locality))
+	LE64_TO_CPU(get_unaligned((d64_t *)((objid3_t *)(ob))->locality))
 
 #define ob_set_locality(ob, val, pol)					\
-	 (*(d64_t *)((objid3_t *)(ob))->locality) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((objid3_t *)(ob))->locality,		\
+		      CPU_TO_LE64(val))
 
 #define ob_get_objectid(ob, pol)					\
-	 LE64_TO_CPU(*((d64_t *)((objid3_t *)(ob))->objectid))
+	LE64_TO_CPU(get_unaligned((d64_t *)((objid3_t *)(ob))->objectid))
 
 #define ob_set_objectid(ob, val, pol)					\
-	 (*(d64_t *)((objid3_t *)(ob))->objectid) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((objid3_t *)(ob))->objectid,		\
+		      CPU_TO_LE64(val))
 
 #define ob_get_ordering(ob, pol) (0)
 #define ob_set_ordering(ob, val, pol) do {} while(0)
 
-#define ob_size(pol)							\
-        (sizeof(objid3_t))
+#define ob_size(pol) (sizeof(objid3_t))
 
+/* hashN_t macroses.  */
 #define ha_get_objectid(ha, pol)					\
-	 LE64_TO_CPU(*((d64_t *)((hash3_t *)(ha))->objectid))
+	LE64_TO_CPU(get_unaligned((d64_t *)((hash3_t *)(ha))->objectid))
 
 #define ha_set_objectid(ha, val, pol)					\
-         (*(d64_t *)((hash3_t *)(ha))->objectid) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((hash3_t *)(ha))->objectid,		\
+		      CPU_TO_LE64(val))
 
 #define ha_get_offset(ha, pol)						\
-         LE64_TO_CPU(*((d64_t *)((hash3_t *)(ha))->offset))
-	 
+	LE64_TO_CPU(get_unaligned((d64_t *)((hash3_t *)(ha))->offset))
+
 #define ha_set_offset(ha, val, pol)					\
-        (*(d64_t *)((hash3_t *)(ha))->offset) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((hash3_t *)(ha))->offset,		\
+		      CPU_TO_LE64(val))
 
 #define ha_get_ordering(ha, pol) (0)
 #define ha_set_ordering(ha, val, pol) do {} while (0)
 
-#define ha_size(pol)							\
-        (sizeof(hash3_t))
+#define ha_size(pol) (sizeof(hash3_t))
 
+/* entryN_t macroses */
 #define en_get_offset(en, pol)						\
 	 aal_get_le16(((entry3_t *)(en)), offset)
 
 #define en_set_offset(en, val, pol)					\
          aal_set_le16(((entry3_t *)(en)), offset, val)
 
-#define en_size(pol)							\
-        (sizeof(entry3_t))
+#define en_size(pol) (sizeof(entry3_t))
 
 #define cde_get_entry(pl, pos, pol)					\
 	 ((void *)(&((cde403_t *)pl->body)->entry[pos]))
-#else
+
+#elif defined(ENABLE_LARGE_KEYS)
+/* objidN_t macroses. */
 #define ob_get_locality(ob, pol)					\
-	 LE64_TO_CPU(*((d64_t *)((objid4_t *)(ob))->locality))
+	LE64_TO_CPU(get_unaligned((d64_t *)((objid4_t *)(ob))->locality))
 
 #define ob_set_locality(ob, val, pol)					\
-	 (*(d64_t *)((objid4_t *)(ob))->locality) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((objid4_t *)(ob))->locality,		\
+		      CPU_TO_LE64(val))
 
 #define ob_get_objectid(ob, pol)					\
-	 LE64_TO_CPU(*((d64_t *)((objid4_t *)(ob))->objectid))
+	LE64_TO_CPU(get_unaligned((d64_t *)((objid4_t *)(ob))->objectid))
 
 #define ob_set_objectid(ob, val, pol)					\
-	 (*(d64_t *)((objid4_t *)(ob))->objectid) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((objid4_t *)(ob))->objectid,		\
+		      CPU_TO_LE64(val))
 
 #define ob_get_ordering(ob, pol)					\
-	 LE64_TO_CPU(*((d64_t *)((objid4_t *)(ob))->ordering))
+	LE64_TO_CPU(get_unaligned((d64_t *)((objid4_t *)(ob))->ordering))
 
 #define ob_set_ordering(ob, val, pol)					\
-	 (*(d64_t *)((objid4_t *)(ob))->ordering) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((objid4_t *)(ob))->ordering,		\
+		      CPU_TO_LE64(val))
 
-#define ob_size(pol)							\
-        (sizeof(objid4_t))
+#define ob_size(pol) (sizeof(objid4_t))
 
+/* hashN_t macroses.  */
 #define ha_get_objectid(ha, pol)					\
-	 LE64_TO_CPU(*((d64_t *)((hash4_t *)(ha))->objectid))
+	LE64_TO_CPU(get_unaligned((d64_t *)((hash4_t *)(ha))->objectid))
 
 #define ha_set_objectid(ha, val, pol)					\
-         (*(d64_t *)((hash4_t *)(ha))->objectid) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((hash4_t *)(ha))->objectid,		\
+		      CPU_TO_LE64(val))
 
 #define ha_get_offset(ha, pol)						\
-         LE64_TO_CPU(*((d64_t *)((hash4_t *)(ha))->offset))
+	LE64_TO_CPU(get_unaligned((d64_t *)((hash4_t *)(ha))->offset))
 	 
 #define ha_set_offset(ha, val, pol)					\
-        (*(d64_t *)((hash4_t *)(ha))->offset) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((hash4_t *)(ha))->offset,		\
+		      CPU_TO_LE64(val))
 
 #define ha_get_ordering(ha, pol)					\
-         LE64_TO_CPU(*((d64_t *)((hash4_t *)(ha))->ordering))
+	LE64_TO_CPU(get_unaligned((d64_t *)((hash4_t *)(ha))->ordering))
 
 #define ha_set_ordering(ha, val, pol)					\
-        (*(d64_t *)((hash4_t *)(ha))->ordering) = CPU_TO_LE64(val)
+	put_unaligned((d64_t *)((hash4_t *)(ha))->ordering,		\
+		      CPU_TO_LE64(val))
 
-#define ha_size(pol)							\
-        (sizeof(hash4_t))
+#define ha_size(pol) (sizeof(hash4_t))
 
 #define en_get_offset(en, pol)						\
 	 aal_get_le16(((entry4_t *)(en)), offset)
@@ -312,13 +329,11 @@ extern uint16_t cde40_overhead();
 #define en_set_offset(en, val, pol)					\
          aal_set_le16(((entry4_t *)(en)), offset, val)
 
-#define en_size(pol)							\
-        (sizeof(entry4_t))
+#define en_size(pol) (sizeof(entry4_t))
 
 #define cde_get_entry(pl, pos, pol)					\
 	 ((void *)(&((cde404_t *)pl->body)->entry[pos]))
 #endif
-#endif
 
 #define cde_get_units(pl)						\
         aal_get_le16(((cde40_t *)pl->body), units)
diff -rup reiser4progs-1.0.3/plugin/key/key_large/key_large.h reiser4progs-1.0.3-1/plugin/key/key_large/key_large.h
--- reiser4progs-1.0.3/plugin/key/key_large/key_large.h	2004-09-22 14:35:47.000000000 +0200
+++ reiser4progs-1.0.3-1/plugin/key/key_large/key_large.h	2005-01-16 22:57:58.000000000 +0100
@@ -120,14 +120,14 @@ extern uint64_t key_large_get_fobjectid(
 static inline uint64_t kl_get_el(const key_large_t *key,
 				 key_large_field_t off)
 {
-	return LE64_TO_CPU(key->el[off]);
+	return LE64_TO_CPU(get_unaligned(key->el + off));
 }
 
 static inline void kl_set_el(key_large_t *key,
 			     key_large_field_t off,
 			     uint64_t value)
 {
-	key->el[off] = CPU_TO_LE64(value);
+	put_unaligned(key->el + off, CPU_TO_LE64(value));
 }
 
 static inline int kl_comp_el(void *k1, void *k2, int off) {
diff -rup reiser4progs-1.0.3/plugin/key/key_short/key_short.h reiser4progs-1.0.3-1/plugin/key/key_short/key_short.h
--- reiser4progs-1.0.3/plugin/key/key_short/key_short.h	2004-09-22 14:35:54.000000000 +0200
+++ reiser4progs-1.0.3-1/plugin/key/key_short/key_short.h	2005-01-16 22:57:58.000000000 +0100
@@ -108,14 +108,14 @@ extern uint64_t key_short_get_fobjectid(
 static inline uint64_t ks_get_el(const key_short_t *key,
 				 key_short_field_t off)
 {
-	return LE64_TO_CPU(key->el[off]);
+	return LE64_TO_CPU(get_unaligned(key->el + off));
 }
 
 static inline void ks_set_el(key_short_t *key,
 			     key_short_field_t off,
 			     uint64_t value)
 {
-	key->el[off] = CPU_TO_LE64(value);
+	put_unaligned(key->el + off, CPU_TO_LE64(value));
 }
 
 static inline int ks_comp_el(void *k1, void *k2, int off) {
diff -rup reiser4progs-1.0.3/plugin/sdext/sdext_plug/sdext_plug.h reiser4progs-1.0.3-1/plugin/sdext/sdext_plug/sdext_plug.h
--- reiser4progs-1.0.3/plugin/sdext/sdext_plug/sdext_plug.h	2004-06-03 22:00:12.000000000 +0200
+++ reiser4progs-1.0.3-1/plugin/sdext/sdext_plug/sdext_plug.h	2005-01-16 22:57:58.000000000 +0100
@@ -27,14 +27,14 @@ typedef struct sdext_plug sdext_plug_t;
 
 extern reiser4_core_t *sdext_plug_core;
 
-#define sdext_plug_get_count(ext)		aal_get_le16(ext, count)
-#define sdext_plug_set_count(ext, val)		aal_set_le16(ext, count, val)
+#define sdext_plug_get_count(ext)		aal_get_le16((ext), count)
+#define sdext_plug_set_count(ext, val)		aal_set_le16((ext), count, (val))
 
-#define sdext_plug_get_member(ext, n)		aal_get_le16(&(ext->slot[n]), member)
-#define sdext_plug_set_member(ext, n, val)	aal_set_le16(&(ext->slot[n]), member, val)
+#define sdext_plug_get_member(ext, n)		aal_get_le16(&((ext)->slot[n]), member)
+#define sdext_plug_set_member(ext, n, val)	aal_set_le16(&((ext)->slot[n]), member, (val))
 
-#define sdext_plug_get_pid(ext, n)		aal_get_le16(&(ext->slot[n]), plug)
-#define sdext_plug_set_pid(ext, n, val)		aal_set_le16(&(ext->slot[n]), plug, val)
+#define sdext_plug_get_pid(ext, n)		aal_get_le16(&((ext)->slot[n]), plug)
+#define sdext_plug_set_pid(ext, n, val)		aal_set_le16(&((ext)->slot[n]), plug, (val))
 
 extern uint32_t sdext_plug_length(stat_entity_t *stat, void *hint);
 

Reply via email to