From: Greg B. <gn...@al...> - 2001-06-10 04:26:51
|
Masahiro Abe wrote: > The rest of the code looks fine to me. > I don't want to touch linux/mm/memory.c but couldn't come up with better > idea than this. > diff -ruN linux-2.4.4-sh.orig/mm/memory.c linux-2.4.4-adx/mm/memory.c > --- linux-2.4.4-sh.orig/mm/memory.c Thu May 3 14:33:18 2001 > +++ linux-2.4.4-adx/mm/memory.c Sat Jun 9 15:55:26 2001 > @@ -821,6 +821,11 @@ > unsigned long end = from + size; > struct mm_struct *mm = current->mm; > > +#if defined(__sh__) && defined(CONFIG_IDE) && defined(__SH4__) > + if (from >= VMALLOC_START && from < VMALLOC_END) > + mm = &init_mm; > +#endif > + > phys_addr -= from; The reason this seems to be needed is that the hd64465_ss.c code (which you have copied) uses remap_page_range() to do the job of ioremap() without having an ioremap(). The ioremap() call is defined as a null operation on SuperH for good reasons, but it's actually needed in this case. The correct solution would be to compile in the existing but unused ioremap() code, but rename it to something else like ioremap_real(). Sadly I am unable to fix this. Greg. -- If it's a choice between being a paranoid, hyper-suspicious global village idiot, or a gullible, mega-trusting sheep, I don't look good in mint sauce. - jd, slashdot, 11Feb2000. |