Messages in this thread | | | From | Jakub Jelinek <> | Subject | Re: [PATCH] Fix to make check_pgt_cache work on !i386 architectures | Date | Mon, 3 Aug 1998 13:36:29 +0200 (MET DST) |
| |
> |> The case when there are multiple page tables within one page is far more > |> complicated. It cannot be per-cpu any longer (as otherwise freeing of the > |> pages would be really difficult without locking), one has to keep track on > |> which chunks of the page are free and which are allocated. So, even the > |> check_pgt_cache routine for that has to take those things into account and > |> free only pages which are completely free (but still it is a lot better > |> than before with the big/small chunk allocator). > > I don't understand the problem with partial page pgd/pmd. The page table > cache that i have implemented for m68k works ok.
The solution you use might be applicable to sparc64 UP, but would give very bad results for sparc32 SMP. If some page has a couple of chunks in one CPUs quicklist, other chunks in other CPUs, some chunks allocated to different CPUs and some out of any quicklists, it would create really horrible fragmentation. There has to be some locking even in the check_pgt_cache case (as currently implemented in srmmu_check_pgt_cache). What I don't like on your solution is that you basically maintain two lists instead of one (one is the pmd_quicklist, the other is the internal get_pointer_table list), have to go back and forth between those lists. And no matter which solution you use for m68k, I think it would be much better to overload some unused struct page entries (like it is done on sparc32/sparc64), instead of allocating the get_pointer_table internal structures by kmalloc. And, you should not need any cli() there...
Cheers, Jakub ___________________________________________________________________ Jakub Jelinek | jj@sunsite.mff.cuni.cz | http://sunsite.mff.cuni.cz Administrator of SunSITE Czech Republic, MFF, Charles University ___________________________________________________________________ Ultralinux - first 64bit OS to take full power of the UltraSparc Linux version 2.1.112 on a sparc64 machine (498.80 BogoMips). ___________________________________________________________________
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.altern.org/andrebalsa/doc/lkml-faq.html
| |