On Tue, Jun 12, 2007 at 04:23:15PM -0700, David Miller wrote:
> From: Martin Habets <[EMAIL PROTECTED]>
> Date: Wed, 13 Jun 2007 00:16:00 +0100
>
> > @@ -2137,11 +2137,11 @@ static unsigned long srmmu_pte_to_pgoff(
> >
> > static pgprot_t srmmu_pgprot_noncached(pgprot_t prot)
> > {
> > - prot &= ~__pgprot(SRMMU_CACHE);
> > + pgprot_val(prot) &= ~SRMMU_CACHE;
> >
> > return prot;
> > }
>
> This patch doesn't apply cleanly, and it's because of this hunk.
>
> The patch hunk says that there should be "11" lines in both
> the before and after, but there are only 7.
>
> Please try to apply the patches your submit unless you
> can ensure that all of your patches are perfect without
> checking :-)
Sorry for that. Not sure what happened, no other code changes in that hunk.
New diff below.
> Also, I wouldn't run a kernel with strict MM checking on, it's
> at best a compile time check and it causes the code output a lot,
> PTE's and PGD's etc. get passed on the stack when given as
> parameters to functions instead of in registers, and many
> optimizations get disabled in the compiler because these
> things are now structures instead of simple integers.
>
> That's why it's off by default.
I understand it slows down things a lot. Do you mean it has no
run-time value when debugging suspected MM problems? I do get
different output: unhandled paging request with strict MM checking
versus a DMA error without.
Now for the new patch attempt:
Turning on STRICT_MM_TYPECHECKS in include/asm/page.h causes some
build errors for sparc32. This patch against 2.6.21 fixes these.
Martin
Signed-off-by: Martin Habets <[EMAIL PROTECTED]>
--- linux/arch/sparc/mm/srmmu.c.orig 2007-06-06 23:26:13.000000000 +0100
+++ linux/arch/sparc/mm/srmmu.c 2007-06-14 20:03:47.000000000 +0100
@@ -226,10 +226,10 @@
/* XXX should we hyper_flush_whole_icache here - Anton */
static inline void srmmu_ctxd_set(ctxd_t *ctxp, pgd_t *pgdp)
-{ srmmu_set_pte((pte_t *)ctxp, (SRMMU_ET_PTD | (__nocache_pa((unsigned long)
pgdp) >> 4))); }
+{ srmmu_set_pte((pte_t *)ctxp, __pte(SRMMU_ET_PTD | (__nocache_pa((unsigned
long) pgdp) >> 4))); }
static inline void srmmu_pgd_set(pgd_t * pgdp, pmd_t * pmdp)
-{ srmmu_set_pte((pte_t *)pgdp, (SRMMU_ET_PTD | (__nocache_pa((unsigned long)
pmdp) >> 4))); }
+{ srmmu_set_pte((pte_t *)pgdp, __pte(SRMMU_ET_PTD | (__nocache_pa((unsigned
long) pmdp) >> 4))); }
static void srmmu_pmd_set(pmd_t *pmdp, pte_t *ptep)
{
@@ -238,7 +238,7 @@
ptp = __nocache_pa((unsigned long) ptep) >> 4;
for (i = 0; i < PTRS_PER_PTE/SRMMU_REAL_PTRS_PER_PTE; i++) {
- srmmu_set_pte((pte_t *)&pmdp->pmdv[i], SRMMU_ET_PTD | ptp);
+ srmmu_set_pte((pte_t *)&pmdp->pmdv[i], __pte(SRMMU_ET_PTD |
ptp));
ptp += (SRMMU_REAL_PTRS_PER_PTE*sizeof(pte_t) >> 4);
}
}
@@ -250,7 +250,7 @@
ptp = page_to_pfn(ptep) << (PAGE_SHIFT-4); /* watch for overflow */
for (i = 0; i < PTRS_PER_PTE/SRMMU_REAL_PTRS_PER_PTE; i++) {
- srmmu_set_pte((pte_t *)&pmdp->pmdv[i], SRMMU_ET_PTD | ptp);
+ srmmu_set_pte((pte_t *)&pmdp->pmdv[i], __pte(SRMMU_ET_PTD |
ptp));
ptp += (SRMMU_REAL_PTRS_PER_PTE*sizeof(pte_t) >> 4);
}
}
@@ -2137,7 +2137,7 @@
static pgprot_t srmmu_pgprot_noncached(pgprot_t prot)
{
- prot &= ~__pgprot(SRMMU_CACHE);
+ pgprot_val(prot) &= ~SRMMU_CACHE;
return prot;
}
-
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html