Messages in this thread | | | Date | Tue, 17 Feb 2009 12:13:47 -0500 | From | Masami Hiramatsu <> | Subject | Re: irq-disabled vs vmap vs text_poke |
| |
Peter Zijlstra wrote: > On Tue, 2009-02-17 at 04:03 +0100, Nick Piggin wrote: > >> It is not a bad idea, but I don't think it quite goes far enough. >> IMO we should reserve 2 pages of virtual memory for each CPU, and >> then do the mapping/unmapping without locking, and with another >> variant of unmap_kernel_range that does not do the global TLB >> flush. > > A bit like kmap_atomic() except for 2 pages and !highmem. Should work.
Hmm, I checked up the kmap_atomic(), but all kernel text is not on the highmem.
So, what about changing kmap_atomic_prot() implementation as below?
- If the page is !highmem *and the page's prot is same as caller specified prot*, just returns page_address(page). - Add 2 continuous km_types for text_poke().
Then, text_poke() can use it. --- vaddr = kmap_atomic_prot(page[0], KM_TEXT_POKE0, PAGE_KERNEL); if(nr_pages > 1) vaddr1 = kmap_atomic_prot(page[1], KM_TEXT_POKE1, PAGE_KERNEL); < change text > if(nr_pages > 1) kunmap_atomic(vaddr1, KM_TEXT_POKE1); kunmap_atomic(vaddr, KM_TEXT_POKE0); ---
Thank you,
-- Masami Hiramatsu
Software Engineer Hitachi Computer Products (America) Inc. Software Solutions Division
e-mail: mhiramat@redhat.com
| |