mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Re: kmalloc() alignment
@ 2001-03-04 22:41 Manfred Spraul
  2001-03-06  0:06 ` Kenn Humborg
  0 siblings, 1 reply; 10+ messages in thread
From: Manfred Spraul @ 2001-03-04 22:41 UTC (permalink / raw)
  To: kenn; +Cc: linux-kernel

>
> Does kmalloc() make any guarantees of the alignment of allocated 
> blocks? Will the returned block always be 4-, 8- or 16-byte 
> aligned, for example? 
>

4-byte alignment is guaranteed on 32-bit cpus, 8-byte alignment on
64-bit cpus.

--
	Manfred

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

* Re: kmalloc() alignment
  2001-03-04 22:41 kmalloc() alignment Manfred Spraul
@ 2001-03-06  0:06 ` Kenn Humborg
  2001-03-06  0:15   ` H. Peter Anvin
  0 siblings, 1 reply; 10+ messages in thread
From: Kenn Humborg @ 2001-03-06  0:06 UTC (permalink / raw)
  To: Manfred Spraul; +Cc: linux-kernel

On Sun, Mar 04, 2001 at 11:41:12PM +0100, Manfred Spraul wrote:
> >
> > Does kmalloc() make any guarantees of the alignment of allocated 
> > blocks? Will the returned block always be 4-, 8- or 16-byte 
> > aligned, for example? 
> >
> 
> 4-byte alignment is guaranteed on 32-bit cpus, 8-byte alignment on
> 64-bit cpus.

So, to summarise (for 32-bit CPUs):

o  Alan Cox & Manfred Spraul say 4-byte alignment is guaranteed.

o  If you need larger alignment, you need to alloc a larger space,
   round as necessary, and keep the original pointer for kfree()

Maybe I'll just use get_free_pages, since it's a 64KB chunk that
I need (and it's only a once-off).

Thanks for your advice.

Later,
Kenn


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

* Re: kmalloc() alignment
  2001-03-06  0:06 ` Kenn Humborg
@ 2001-03-06  0:15   ` H. Peter Anvin
  2001-03-06  0:29     ` Kenn Humborg
  2001-03-06  8:31     ` Rogier Wolff
  0 siblings, 2 replies; 10+ messages in thread
From: H. Peter Anvin @ 2001-03-06  0:15 UTC (permalink / raw)
  To: linux-kernel

Followup to:  <20010306000652.A13992@excalibur.research.wombat.ie>
By author:    Kenn Humborg <kenn@linux.ie>
In newsgroup: linux.dev.kernel
>
> On Sun, Mar 04, 2001 at 11:41:12PM +0100, Manfred Spraul wrote:
> > >
> > > Does kmalloc() make any guarantees of the alignment of allocated 
> > > blocks? Will the returned block always be 4-, 8- or 16-byte 
> > > aligned, for example? 
> > >
> > 
> > 4-byte alignment is guaranteed on 32-bit cpus, 8-byte alignment on
> > 64-bit cpus.
> 
> So, to summarise (for 32-bit CPUs):
> 
> o  Alan Cox & Manfred Spraul say 4-byte alignment is guaranteed.
> 
> o  If you need larger alignment, you need to alloc a larger space,
>    round as necessary, and keep the original pointer for kfree()
> 
> Maybe I'll just use get_free_pages, since it's a 64KB chunk that
> I need (and it's only a once-off).
> 

It might be worth asking the question if larger blocks are more
aligned?

	-hpa
-- 
<hpa@transmeta.com> at work, <hpa@zytor.com> in private!
"Unix gives you enough rope to shoot yourself in the foot."
http://www.zytor.com/~hpa/puzzle.txt

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

* Re: kmalloc() alignment
  2001-03-06  0:15   ` H. Peter Anvin
@ 2001-03-06  0:29     ` Kenn Humborg
  2001-03-06  2:14       ` Alan Cox
  2001-03-06  8:31     ` Rogier Wolff
  1 sibling, 1 reply; 10+ messages in thread
From: Kenn Humborg @ 2001-03-06  0:29 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: linux-kernel

On Mon, Mar 05, 2001 at 04:15:36PM -0800, H. Peter Anvin wrote:
> > So, to summarise (for 32-bit CPUs):
> > 
> > o  Alan Cox & Manfred Spraul say 4-byte alignment is guaranteed.
> > 
> > o  If you need larger alignment, you need to alloc a larger space,
> >    round as necessary, and keep the original pointer for kfree()
> > 
> > Maybe I'll just use get_free_pages, since it's a 64KB chunk that
> > I need (and it's only a once-off).
> > 
> 
> It might be worth asking the question if larger blocks are more
> aligned?

OK, I'll bite...

Are larger blocks more aligned?

Later,
Kenn


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

* Re: kmalloc() alignment
  2001-03-06  0:29     ` Kenn Humborg
@ 2001-03-06  2:14       ` Alan Cox
  2001-03-06  5:05         ` H. Peter Anvin
  0 siblings, 1 reply; 10+ messages in thread
From: Alan Cox @ 2001-03-06  2:14 UTC (permalink / raw)
  To: Kenn Humborg; +Cc: H. Peter Anvin, linux-kernel

> > It might be worth asking the question if larger blocks are more
> > aligned?
> 
> OK, I'll bite...
> Are larger blocks more aligned?

Only get_free_page()

Alan


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

* Re: kmalloc() alignment
  2001-03-06  2:14       ` Alan Cox
@ 2001-03-06  5:05         ` H. Peter Anvin
  0 siblings, 0 replies; 10+ messages in thread
From: H. Peter Anvin @ 2001-03-06  5:05 UTC (permalink / raw)
  To: Alan Cox; +Cc: Kenn Humborg, H. Peter Anvin, linux-kernel

Alan Cox wrote:
> 
> > > It might be worth asking the question if larger blocks are more
> > > aligned?
> >
> > OK, I'll bite...
> > Are larger blocks more aligned?
> 
> Only get_free_page()
> 

I wonder if it would be practical/reasonable to guarantee better
alignment for larger allocations (at least for sizes that are powers of
two); especially 8- and 16-byte alignment is sometimes necessary.

	-hpa

-- 
<hpa@transmeta.com> at work, <hpa@zytor.com> in private!
"Unix gives you enough rope to shoot yourself in the foot."
http://www.zytor.com/~hpa/puzzle.txt

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

* Re: kmalloc() alignment
  2001-03-06  0:15   ` H. Peter Anvin
  2001-03-06  0:29     ` Kenn Humborg
@ 2001-03-06  8:31     ` Rogier Wolff
  2001-03-06 12:10       ` Xavier Bestel
  2001-03-07  7:53       ` RAID, 2.4.2 and Buslogic Jauder Ho
  1 sibling, 2 replies; 10+ messages in thread
From: Rogier Wolff @ 2001-03-06  8:31 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: linux-kernel


> Followup to:  <20010306000652.A13992@excalibur.research.wombat.ie>
> By author:    Kenn Humborg <kenn@linux.ie>
> In newsgroup: linux.dev.kernel
> >
> > On Sun, Mar 04, 2001 at 11:41:12PM +0100, Manfred Spraul wrote:
> > > >
> > > > Does kmalloc() make any guarantees of the alignment of allocated 
> > > > blocks? Will the returned block always be 4-, 8- or 16-byte 
> > > > aligned, for example? 
> > > >
> > > 
> > > 4-byte alignment is guaranteed on 32-bit cpus, 8-byte alignment on
> > > 64-bit cpus.
> > 
> > So, to summarise (for 32-bit CPUs):
> > 
> > o  Alan Cox & Manfred Spraul say 4-byte alignment is guaranteed.
> > 
> > o  If you need larger alignment, you need to alloc a larger space,
> >    round as necessary, and keep the original pointer for kfree()
> > 
> > Maybe I'll just use get_free_pages, since it's a 64KB chunk that
> > I need (and it's only a once-off).

My old kmalloc would actually use n+10 bytes if you request n bytes.
As memory comes in pools of powers of two, if you request 64k, you
would acutaly use 128k of memory. If you use "get_free_pages", you'll
not have the overhead, and actually allocate the 64k you need. 

I'm not sure what the slab stuff does...

		Roger. 

-- 
** R.E.Wolff@BitWizard.nl ** http://www.BitWizard.nl/ ** +31-15-2137555 **
*-- BitWizard writes Linux device drivers for any device you may have! --*
* There are old pilots, and there are bold pilots. 
* There are also old, bald pilots. 

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

* Re: kmalloc() alignment
  2001-03-06  8:31     ` Rogier Wolff
@ 2001-03-06 12:10       ` Xavier Bestel
  2001-03-07  7:53       ` RAID, 2.4.2 and Buslogic Jauder Ho
  1 sibling, 0 replies; 10+ messages in thread
From: Xavier Bestel @ 2001-03-06 12:10 UTC (permalink / raw)
  To: linux-kernel

Le 06 Mar 2001 09:31:01 +0100, Rogier Wolff a écrit :
> 
> > Followup to:  <20010306000652.A13992@excalibur.research.wombat.ie>
> > By author:    Kenn Humborg <kenn@linux.ie>
> > In newsgroup: linux.dev.kernel
> > >
> > > On Sun, Mar 04, 2001 at 11:41:12PM +0100, Manfred Spraul wrote:
> > > > >
> > > > > Does kmalloc() make any guarantees of the alignment of allocated 
> > > > > blocks? Will the returned block always be 4-, 8- or 16-byte 
> > > > > aligned, for example? 
> > > > >
> > > > 
> > > > 4-byte alignment is guaranteed on 32-bit cpus, 8-byte alignment on
> > > > 64-bit cpus.
> > > 
> > > So, to summarise (for 32-bit CPUs):
> > > 
> > > o  Alan Cox & Manfred Spraul say 4-byte alignment is guaranteed.
> > > 
> > > o  If you need larger alignment, you need to alloc a larger space,
> > >    round as necessary, and keep the original pointer for kfree()
> > > 
> > > Maybe I'll just use get_free_pages, since it's a 64KB chunk that
> > > I need (and it's only a once-off).
> 
> My old kmalloc would actually use n+10 bytes if you request n bytes.
> As memory comes in pools of powers of two, if you request 64k, you
> would acutaly use 128k of memory. If you use "get_free_pages", you'll
> not have the overhead, and actually allocate the 64k you need. 
> 
> I'm not sure what the slab stuff does...

A properly initialised (i.e. default settings) 64k slab would put object
descriptors outside the slab itself, and so use the expected number of
pages for each 64k object, I believe.
Small or non n*512 sized objects are a different story.

Xav


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

* RAID, 2.4.2 and Buslogic
  2001-03-06  8:31     ` Rogier Wolff
  2001-03-06 12:10       ` Xavier Bestel
@ 2001-03-07  7:53       ` Jauder Ho
  2001-03-07  8:20         ` Andreas Dilger
  1 sibling, 1 reply; 10+ messages in thread
From: Jauder Ho @ 2001-03-07  7:53 UTC (permalink / raw)
  To: lnz, alan; +Cc: linux-kernel


Leonard,

My story is somewhat similar to what Dick Johnson has encountered except
this is with 2.4.2 running on a pentium 200.

I encountered an oops last night while untarring a file. Upon reboot, it
appears that the partition labels disappeared along with the superblock.
Unfortunately, I was not able to recover and had to redo the setup from
scratch.


Here is the lspci output

deepthought%jauderho% lspci
00:00.0 Host bridge: Intel Corporation 430TX - 82439TX MTXC (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB PIIX4 ISA (rev 01)
00:07.1 IDE interface: Intel Corporation 82371AB PIIX4 IDE (rev 01)
00:07.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB PIIX4 ACPI (rev 01)
00:09.0 Ethernet controller: Intel Corporation 82557 [Ethernet Pro 100]
(rev 02)
00:0b.0 VGA compatible controller: ATI Technologies Inc 210888GX [Mach64
GX] (rev 01)
00:0d.0 Ethernet controller: Accton Technology Corporation SMC2-1211TX
(rev 10)
00:0f.0 SCSI storage controller: BusLogic BT-946C (BA80C30) [MultiMaster 10] (rev 08)



Unfortunately, the System.map was deleted during a compile but attached is
the dmesg output.

EXT2-fs error (device md(9,0)): ext2_add_entry: bad entry in directory
#343396:
inode out of bounds - offset=0, inode=343396, rec_len=12, name_len=1
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 12
EXT2-fs error (device md(9,0)): free_inode: reserved inode or nonexistent
inode
kernel BUG at inode.c:885!
invalid operand: 0000
CPU:    0
EIP:    0010:[<c01425ba>]
EFLAGS: 00010292
eax: 0000001b   ebx: c2af8ba0   ecx: c373c000   edx: 00000001
esi: c023b9e0   edi: c38bd017   ebp: c3c285e0   esp: c1877f24
ds: 0018   es: 0018   ss: 0018
Process tar (pid: 5383, stackpage=c1877000)
Stack: c01fd7e5 c01fd865 00000375 c2af8ba0 c13b8f40 c014fa07 c2af8ba0
ffffffff
       000001fd c3c285e0 c3c28650 c13b8f40 00000007 c3932560 c0138ef7
fffffffe
       c013a773 c3c285e0 c13b8ee0 000001fd c13b8ee0 c1877fa4 c13b8ee0
c1e5c000
Call Trace: [<c014fa07>] [<c0138ef7>] [<c013a773>] [<c013a816>]
[<c0108de3>]

Code: 0f 0b 83 c4 0c eb 6f 39 1b 74 3b f6 83 ec 00 00 00 07 75 26
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 474218
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 474219
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 474216

...

EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number:
1062908
EXT2-fs error (device md(9,0)): ext2_readdir: bad entry in directory
#310689: in
ode out of bounds - offset=0, inode=310689, rec_len=12, name_len=1
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 228935
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 212584
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 212583
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 212586
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 212588
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 212589
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 212587
EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 212585
EXT2-fs error (device md(9,0)): ext2_find_entry: bad entry in directory
#883010:
 inode out of bounds - offset=60, inode=245344, rec_len=4036, name_len=16



--Jauder







PS. Is there a minimum processor speed requirement to do RAID? I know the
pentium 200 is pretty wimpy but if this is the failure mode it was
certainly unexpected.




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

* Re: RAID, 2.4.2 and Buslogic
  2001-03-07  7:53       ` RAID, 2.4.2 and Buslogic Jauder Ho
@ 2001-03-07  8:20         ` Andreas Dilger
  0 siblings, 0 replies; 10+ messages in thread
From: Andreas Dilger @ 2001-03-07  8:20 UTC (permalink / raw)
  To: Jauder Ho; +Cc: lnz, alan, linux-kernel

Jauder Ho writes:
> My story is somewhat similar to what Dick Johnson has encountered except
> this is with 2.4.2 running on a pentium 200.
> 
> EXT2-fs error (device md(9,0)): ext2_add_entry: bad entry in directory
> #343396:
> inode out of bounds - offset=0, inode=343396, rec_len=12, name_len=1
> EXT2-fs error (device md(9,0)): ext2_write_inode: bad inode number: 12
> 
> EXT2-fs error (device md(9,0)): free_inode: reserved inode or nonexistent
> inode
> kernel BUG at inode.c:885!

Inode 12 is a perfectly valid inode number for any filesystem, so your
ext2 superblock must have been corrupt (or zeroed out) at this point.
The value for sb->u.ext2_sb.s_es->s_inodes_count must have been < 12
(likely zero), which would explain all of these errors.  Strange.

I have posted (twice) a patch which would prevent the BUG from happening.
Granted, it won't help your RAID/SCSI corruption problem (*).  Please see

  [PATCH] sanity checks for ext2 root inode

in l-k archives.  I don't think this is in either Linus' or Alan's tree.

Cheers, Andreas

(*) in normal cases this prevents a small filesystem corruption from
    halting the system, but in your case, the BUG may have prevented
    larger corruption by halting the system before more damage was done?
-- 
Andreas Dilger  \ "If a man ate a pound of pasta and a pound of antipasto,
                 \  would they cancel out, leaving him still hungry?"
http://www-mddsp.enel.ucalgary.ca/People/adilger/               -- Dogbert

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

end of thread, other threads:[~2001-03-07  8:23 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-03-04 22:41 kmalloc() alignment Manfred Spraul
2001-03-06  0:06 ` Kenn Humborg
2001-03-06  0:15   ` H. Peter Anvin
2001-03-06  0:29     ` Kenn Humborg
2001-03-06  2:14       ` Alan Cox
2001-03-06  5:05         ` H. Peter Anvin
2001-03-06  8:31     ` Rogier Wolff
2001-03-06 12:10       ` Xavier Bestel
2001-03-07  7:53       ` RAID, 2.4.2 and Buslogic Jauder Ho
2001-03-07  8:20         ` Andreas Dilger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®