[Crash-utility] ptov command

Karlsson, Jan Jan.Karlsson at sonymobile.com
Fri Jul 6 06:43:31 UTC 2012


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++;
	}
}


Jan Karlsson
Senior Software Engineer
MIB
 
Sony Mobile Communications
Tel: +46703062174
sonymobile.com
 


-----Original Message-----
From: crash-utility-bounces at redhat.com [mailto:crash-utility-bounces at redhat.com] On Behalf Of Dave Anderson
Sent: torsdag den 5 juli 2012 15:48
To: Discussion list for crash utility usage, maintenance and development
Subject: Re: [Crash-utility] ptov command



----- Original Message -----
> 
> Hi Dave
> 
> I have a question about the ptov command. Ptov only handles kernel
> virtual addresses and their corresponding physical addresses.
> However if you give ptov a physical address that does not correspond
> to a kernel virtual address it still answers with an address. Users
> might get confused and do not know when to trust ptov, especially as
> the inverse command vtop always works.
> 
> So I would like to restrict ptov to give a result only when it is
> valid. The idea I have is that if ptov returns a valid virtual
> address then vtop on that address should give the same physical
> address back again. True??
> 
> cmd_ptov() in memory.c
> 
> ....
> 
> vaddr = PTOV(paddr);
> kvtop(0, vaddr, &paddr_tst, 0);
> if (paddr != paddr_tst) ... invalid vaddr, do not print it ...
> 
> Any comments?
> 
> Jan

Sounds reasonable, at least for the 32-bit arches.  I don't think it's
necessary for any 64-bit arch.  And you'd also need to account for kvtop()
failing outright (and returning FALSE).

Dave

--
Crash-utility mailing list
Crash-utility at redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility




More information about the Crash-utility mailing list