Resent-Date: Fri, 5 Feb 1999 00:55:17 +0100 (MET)
Date: Thu, 4 Feb 1999 23:56:50 +0000
From: Richard Hirst <richard@sleepie.demon.co.uk>
To: linux-m68k@lists.linux-m68k.org
Subject: Re: 2.2.0pre7: 030 fix for ioremap+kernel_set_cachemode
References: <19990204223334.C736@sleepie.demon.co.uk>
In-Reply-To: <19990204223334.C736@sleepie.demon.co.uk>; from Richard Hirst on Thu, Feb 04, 1999 at 10:33:34PM +0000
Resent-From: linux-m68k@phil.uni-sb.de

On Thu, Feb 04, 1999 at 10:33:34PM +0000, Richard Hirst wrote:
> At last, my 030 boots as it did under 2.2.0pre4 :-)

Please take this patch in place of the last - 'size' can go down in
256K steps, so may go < 0

This will have to change again if we want kernel_set_cachemode to
work on individual pages on 030.

Richard



--- linux68k-2.2.0pre7/arch/m68k/mm/kmap.c	Tue Feb  2 20:27:44 1999
+++ linuxvme-2.2.0pre7/arch/m68k/mm/kmap.c	Thu Feb  4 23:44:40 1999
@@ -174,7 +174,7 @@
 		}
 	}
 
-	while (size > 0) {
+	while ((long)size > 0) {
 #ifdef DEBUG
 		if (!(virtaddr & (PTRTREESIZE-1)))
 			printk ("\npa=%#lx va=%#lx ", physaddr, virtaddr);
@@ -187,7 +187,7 @@
 		}
 
 		if (CPU_IS_020_OR_030) {
-			pmd_dir->pmd[(virtaddr/PTRTREESIZE)&-16] = physaddr;
+			pmd_dir->pmd[(virtaddr/PTRTREESIZE) & 15] = physaddr;
 			physaddr += PTRTREESIZE;
 			virtaddr += PTRTREESIZE;
 			size -= PTRTREESIZE;
@@ -232,7 +232,7 @@
 	pmd_t *pmd_dir;
 	pte_t *pte_dir;
 
-	while (size > 0) {
+	while ((long)size > 0) {
 		pgd_dir = pgd_offset_k(virtaddr);
 		if (pgd_bad(*pgd_dir)) {
 			printk("iounmap: bad pgd(%08lx)\n", pgd_val(*pgd_dir));
@@ -242,7 +242,7 @@
 		pmd_dir = pmd_offset(pgd_dir, virtaddr);
 
 		if (CPU_IS_020_OR_030) {
-			int pmd_off = (virtaddr/PTRTREESIZE) & -16;
+			int pmd_off = (virtaddr/PTRTREESIZE) & 15;
 
 			if ((pmd_dir->pmd[pmd_off] & _DESCTYPE_MASK) == _PAGE_PRESENT) {
 				pmd_dir->pmd[pmd_off] = 0;
@@ -308,7 +308,7 @@
 		}
 	}
 
-	while (size > 0) {
+	while ((long)size > 0) {
 		pgd_dir = pgd_offset_k(virtaddr);
 		if (pgd_bad(*pgd_dir)) {
 			printk("iocachemode: bad pgd(%08lx)\n", pgd_val(*pgd_dir));
@@ -318,7 +318,7 @@
 		pmd_dir = pmd_offset(pgd_dir, virtaddr);
 
 		if (CPU_IS_020_OR_030) {
-			int pmd_off = (virtaddr/PTRTREESIZE) & -16;
+			int pmd_off = (virtaddr/PTRTREESIZE) & 15;
 
 			if ((pmd_dir->pmd[pmd_off] & _DESCTYPE_MASK) == _PAGE_PRESENT) {
 				pmd_dir->pmd[pmd_off] = (pmd_dir->pmd[pmd_off] &

