Port-amd64 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

ddb fails to write breakpoint



I tried to set a kerneld db breakpoint on amd64 current (6.99.6) but the
system just dumped - couldn't see why since it all scrolled away.

Attempts to write into code space fault in ddb.
The following makes it work - but is clearly ott.

--- arch/amd64/amd64/db_memrw.c 23 Nov 2011 01:15:02 -0000      1.9
+++ arch/amd64/amd64/db_memrw.c 30 Apr 2012 20:49:21 -0000
@@ -146,6 +146,7 @@ db_write_text(vaddr_t addr, size_t size,
                pmap_pte_clearbits(ppte, PG_KR);
                pmap_pte_setbits(ppte, PG_KW);
                pmap_update_pg(pgva);
+               tlbflushg();
 
                /*
                 * Page is now writable.  Do as much access as we
@@ -160,6 +161,7 @@ db_write_text(vaddr_t addr, size_t size,
                pmap_pte_clearbits(ppte, PG_KW);
                pmap_pte_setbits(ppte, PG_KR);
                pmap_update_pg(pgva);
+               tlbflushg();
                
        } while (size != 0);
 }

pmap_update_pg(addr) is just the single instruction 'invlpg adddr'
tlbflushg() is a full tlb zap.

Not looked at what invlpg is supposed to do, or whether it is
an adequate synchronising instruction.

cpu is an intel i7.

        David

-- 
David Laight: david%l8s.co.uk@localhost


Home | Main Index | Thread Index | Old Index