> Hi all,
> I finally got started working on Olli stuff. I put a half G ide disk in
> the Olli so I can avoid our (overloaded) net. There were of course a
> set of DOS partitions on it already. This causes an adel in genhd.c->
> extended_partition when it tries to do a partition check on the contents
> of the extended partition. I traced the problem to the line
> if (!NR_SECTS(p) || is_extended_partition(p))
> (line 163 in drivers/block/genhd.c). The crash comes at NR_SECTS(p), this
> is defined at the top of genhd as follows:
> #ifdef __alpha__
> * On the Alpha, we get unaligned access exceptions on
> * p->nr_sects and p->start_sect, when the partition table
> * is not on a 4-byte boundary, which is frequently the case.
> * This code uses unaligned load instructions to prevent
> * such exceptions.
> #include <asm/unaligned.h>
> #define NR_SECTS(p) ldl_u(&p->nr_sects)
> #define START_SECT(p) ldl_u(&p->start_sect)
> #else /* __alpha__ */
> #define NR_SECTS(p) p->nr_sects
> #define START_SECT(p) p->start_sect
> #endif /* __alpha__ */
You need to do the same as alphas do. Mipses can't load unaligned without
using special instructions or load a byte at a time and merge them.
I ran into this when porting XFree86 to my 4000 running NetBSD.