Port-amiga archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Weird calculation for kernel L2 segment table



On Fri, Jan 2, 2009 at 4:15 PM, Frank Wille <frank%phoenix.owl.de@localhost> 
wrote:
> Izumi Tsutsui wrote:
>
>> sys/arch/amiga/amiga/amiga_init.c (and recently sync'ed atari_init.c)
>> has the following calculations to get the level2 segment table
>> for the kernel Sysptmap:
>>
>> ---
>>       /*
>>        * Kernel segment table at end of next level 2 table
>>        */
>>       /* XXX fix calculations XXX */
>>       i = ((((ptsize >> PGSHIFT) + 3) & -2) - 1) * (NPTEPG / SG4_LEV3SIZE);
>>       sg = &((st_entry_t *)(RELOC(Sysseg_pa, u_int)))[SG4_LEV1SIZE + i];
>>       esg = &sg[NPTEPG / SG4_LEV3SIZE];
>>       sg_proto = Sysptmap_pa | SG_U | SG_RW | SG_V;
>>       while (sg < esg) {
>>           *sg++ = sg_proto;
>>           sg_proto += (SG4_LEV3SIZE * sizeof (st_entry_t));
>>       }
>> ---
>>
>> I think this could be rewritten more meaningfully as following:
>>
>> ---
>>       nl2desc = (ptsize >> PGSHIFT) * (NPTEPG / SG4_LEV3SIZE);
>>   :
>>       nl1desc = roundup(nl2desc, SG4_LEV2SIZE) / SG4_LEV2SIZE;
>>   :
>>       /*
>>        * Kernel segment table at end of next level 2 table
>>        */
>>       i = SG4_LEV1SIZE + (nl1desc * SG4_LEV2SIZE);
>>       sg = (st_entry_t *)RELOC(Sysseg_pa, u_int);
>>       sg = &sg[i + SG4_LEV2SIZE - (NPTEPG / SG4_LEV3SIZE)];
>>       esg = &sg[NPTEPG / SG4_LEV3SIZE];
>>   :
>> ---
>>
>> With a quick test program, both offset values against Sysseg_pa
>> look identical.
>
> Without rereading the 040/060 manuals and without knowing about the current
> layout of segment and page tables (first lev1 tables, then lev2, etc.?) in 
> both
> ports, I only got headaches after 30 minutes, so I decided to make a test! :)
>
> I patched the NetBSD/amiga 4.0 release kernel with your changes and tried it
> for some time on my A3000 with 68060. Booting, starting X11, compiling pkgsrc.
>
> Works fine for me!

I patched NetBSD/Atari current with Tsutsui's changes and I also made just
test using my Falcon with 68060; system booted up fine and I copied some files
around disks.

Works fine :)

-Tuomo


Home | Main Index | Thread Index | Old Index