Re: [Openvortex-dev] Re: Re: [ALSA - driver 0001138]: errors when installing au8820 modules

Alien
2005-06-07T17:17:40Z

[-- Attachment #1: Type: text/plain, Size: 2148 bytes --]

Op dinsdag 7 juni 2005 19:05, schreef Igor Kovalenko:
> Takashi Iwai wrote:
> > At Tue, 7 Jun 2005 17:16:02 +0200,
> >
> > Alien wrote:
> >>[1 <text/plain; iso-8859-1 (quoted-printable)>]
> >>
> >>Op dinsdag 7 juni 2005 17:05, schreef Raymond:
> >>>The patch (diff11.diff) cause segmenation fault on my 32bit machine
> >>>during /etc/init.d/alsasound start
> >>>
> >>>http://savannah.nongnu.org/patch/?func=detailitem&item_id=3948
> >>>
> >>>Do anyone know why readl() and writel() behave different in i386
> >>>(32bits) and AMD64 (64bits) ?
> >>>
> >>>http://sourceforge.net/mailarchive/message.php?msg_id=10773530
> >>>
> >>>
> >>>#ifndef CONFIG_X86_64
> >>>
> >>>#define hwread(x,y) readl((x)+((y)>>2))
> >>>#define hwwrite(x,y,z) writel((z),(x)+((y)>>2))
> >>>
> >>>#else
> >>>
> >>>#define hwread(x,y) readl((x)+(y))
> >>>#define hwwrite(x,y,z) writel((z),(x)+(y))
> >>>
> >>>#endif
> >>
> >>that doesn't look good, unless the mmio is void* in 32bit and unsigned
> >> long* in x86_64...
> >>
> >>'unsigned long* mmio' should be preferred and together with '#define
> >>hwread(x,y) readl((x)+(y))' , this works for both platforms
> >
> > I guess using "unsigned long" for both architectures is broken, too.
> > Should be "u32" to be arch-independent.
>
> I strongly believe readl() and writel() on x86_64 does 32 bit reads/writes.
> (checked linux-2.6.12-rc5). Therefore reads/writes are of correct size with
> that patch - should be something different.

i know that does not work!

when i started doing this, i got segfaults because of the >>2 .

readl and writel do long operations as evidenced by the 'l'

i know this seems weird, but this is memory-mapped, and appearantly it's
memory mapped to long, anyway; when i do 'unsigned long* mmio' and i use
readl and writel without any bitshifts, it works...

you may believe what you want, but i _know_ that on x86_64, i _NEED_ unsigned
long* mmio and no bitshifting to get this to work.

maybe the problem lies with writel and readl to begin with, maybe if you wrote
an int, it would work...

AL13N

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]