|
From: Petr V. <VAN...@vc...> - 2001-01-11 15:07:54
|
On 11 Jan 01 at 16:02, Adam Huuva wrote:
> Petr Vandrovec wrote:
> >
> > On 11 Jan 01 at 12:50, Adam Huuva wrote:
> >
> > > >
> > > > Try the lastest CVS. It is fixed.
> > > OK. It is. Now I have this instead:
> >
> > > from dummycon.c:11:
> > > /SDA3/usr/src/linux_patched/include/asm/hw_irq.h: In function
> > > `x86_do_profile':
> > > /SDA3/usr/src/linux_patched/include/asm/hw_irq.h:198: `current'
> > > undeclared (first use in this fun
> > > ction)
> >
> > If you are reporting bug, try it first with stock kernel. You cannot
> > have Athlon/K7 with SMP. Either downgrade to UP, or to PIII.
> >
> I have a(one) PIII. SMP was turned on by default. Apparently it does no
> harm, but I've turned it off now.
> Athlon/K7? I don't understand. Something I missed?
You must had select 'Athlon/K7' in configuration. In that case
memcpy uses
if (len < 512 || in_interrupt())
__memcpy(...);
else
__3dnow_memcpy(...);
On UP it works. But on SMP, in_interrupt() requires current and
structure task_struct. And #include <linux/sched.h>, which defines
task_struct, needs string.h... So this cannot work...
There were two different patches sent to linux-kernel, how to fix it -
- one was moving memcpy out-of-line, another was to not use
current->processor, but ((unsigned long*)(current))[0x34/4].
One better than another ;-)
Moving code out-of-line for SMP is probably better, as code generated
by in_interrupt() on SMP is loooooong.
Petr
|