Re: ptov command

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

 




----- Original Message -----
> Below you find my version of the ptov function. I have just added a
> few lines and placed them under "#if defined(ARM)". The test is
> reasonable for ARM so I would appreciate if you include it. For
> other platforms please do whatever you like.
> 
> Jan
> 
> 
> void
> cmd_ptov(void)
> {
> 	int c;
> 	ulong vaddr;
> 	physaddr_t paddr;
> #if defined(ARM)
> 	physaddr_t paddr_tst;
> #endif
> 	char buf1[BUFSIZE];
> 	char buf2[BUFSIZE];
> 	int others;
> 
> 	while ((c = getopt(argcnt, args, "")) != EOF) {
> 		switch(c)
> 		{
> 		default:
> 			argerrs++;
> 			break;
> 		}
> 	}
> 
> 	if (argerrs || !args[optind])
> 		cmd_usage(pc->curcmd, SYNOPSIS);
> 
> 	others = 0;
> 	while (args[optind]) {
> 		paddr = htoll(args[optind], FAULT_ON_ERROR, NULL);
> 		vaddr = PTOV(paddr);
> 
> #if defined(ARM)
> 		if (kvtop(0, vaddr, &paddr_tst, 0) && paddr_tst==paddr) {
> #endif
> 		fprintf(fp, "%s%s  %s\n", others++ ? "\n" : "",
> 		    mkstring(buf1, VADDR_PRLEN, LJUST, "VIRTUAL"),
> 		    mkstring(buf2, VADDR_PRLEN, LJUST, "PHYSICAL"));
> 		fprintf(fp, "%s  %s\n",
> 		    mkstring(buf1, VADDR_PRLEN, LJUST|LONG_HEX, MKSTR(vaddr)),
>                     mkstring(buf2, VADDR_PRLEN, LJUST|LONGLONG_HEX,
> 			MKSTR(&paddr)));
> #if defined(ARM)
> 		} else {
> 			fprintf(fp, "Unknown virtual address for physical address
> 			0x%08llx\n", paddr);
> 		}
> #endif
> 
> 		optind++;
> 	}
> }

I hate the "#ifdef ARM" sections and the error message doesn't fit
into multiple-argument usage.  How's this work for you?

--- crash-6.0.8/memory.c.orig   2012-07-06 11:28:13.000000000 -0400
+++ crash-6.0.8/memory.c        2012-07-06 11:32:02.000000000 -0400
@@ -2975,9 +2975,9 @@
 void
 cmd_ptov(void)
 {
-       int c;
+       int c, unknown;
        ulong vaddr;
-       physaddr_t paddr;
+       physaddr_t paddr, paddr_test;
        char buf1[BUFSIZE];
        char buf2[BUFSIZE];
        int others;
@@ -2999,10 +2999,14 @@
                paddr = htoll(args[optind], FAULT_ON_ERROR, NULL);
                vaddr = PTOV(paddr);

+               unknown = BITS32() && (!kvtop(0, vaddr, &paddr_test, 0) ||
+                   (paddr_test != paddr));
+
                fprintf(fp, "%s%s  %s\n", others++ ? "\n" : "",
                    mkstring(buf1, VADDR_PRLEN, LJUST, "VIRTUAL"),
                    mkstring(buf2, VADDR_PRLEN, LJUST, "PHYSICAL"));
-               fprintf(fp, "%s  %s\n",
+               fprintf(fp, "%s  %s\n", unknown ?
+                   mkstring(buf1, VADDR_PRLEN, LJUST, "unknown") :
                    mkstring(buf1, VADDR_PRLEN, LJUST|LONG_HEX, MKSTR(vaddr)),
                     mkstring(buf2, VADDR_PRLEN, LJUST|LONGLONG_HEX,


With one my sample ARM dumps, it looks like this:

  crash> kmem -p
    PAGE    PHYSICAL   MAPPING    INDEX CNT FLAGS
  c0b47000  80000000         0         0  0 0
  c0b47020  80001000         0         0  0 0
  c0b47040  80002000         0         0  0 0
  ... [ cut ] ...
  c0d46fa0  8fffd000         0         0  1 400
  c0d46fc0  8fffe000         0         0  1 400
  c0d46fe0  8ffff000         0         0  1 400
  crash> 

  crash> ptov 7ffff000 80000000 8ffff000 9000000
  VIRTUAL   PHYSICAL
  unknown   7ffff000

  VIRTUAL   PHYSICAL
  c0000000  80000000

  VIRTUAL   PHYSICAL
  cffff000  8ffff000

  VIRTUAL   PHYSICAL
  unknown   9000000 
  crash>

Dave


--- crash-6.0.8/memory.c.orig	2012-07-06 11:28:13.000000000 -0400
+++ crash-6.0.8/memory.c	2012-07-06 11:32:02.000000000 -0400
@@ -2975,9 +2975,9 @@
 void
 cmd_ptov(void)
 {
-	int c;
+	int c, unknown;
 	ulong vaddr;
-	physaddr_t paddr;
+	physaddr_t paddr, paddr_test;
 	char buf1[BUFSIZE];
 	char buf2[BUFSIZE];
 	int others;
@@ -2999,10 +2999,14 @@
 		paddr = htoll(args[optind], FAULT_ON_ERROR, NULL);
 		vaddr = PTOV(paddr);
 
+		unknown = BITS32() && (!kvtop(0, vaddr, &paddr_test, 0) || 
+		    (paddr_test != paddr));
+
 		fprintf(fp, "%s%s  %s\n", others++ ? "\n" : "", 
 		    mkstring(buf1, VADDR_PRLEN, LJUST, "VIRTUAL"),
 		    mkstring(buf2, VADDR_PRLEN, LJUST, "PHYSICAL"));
-		fprintf(fp, "%s  %s\n",
+		fprintf(fp, "%s  %s\n", unknown ? 
+		    mkstring(buf1, VADDR_PRLEN, LJUST, "unknown") :
 		    mkstring(buf1, VADDR_PRLEN, LJUST|LONG_HEX, MKSTR(vaddr)),
                     mkstring(buf2, VADDR_PRLEN, LJUST|LONGLONG_HEX, 
 			MKSTR(&paddr)));
--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility

[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux