int psb_get_pages_by_mem_handle(IMG_HANDLE hOSMemHandle,
				u32 **pfn_list,
				int page_count)
{
	LinuxMemArea *psLinuxMemArea = (LinuxMemArea *)hOSMemHandle;
	u32 *pfns = 0;
	IMG_CPU_PHYADDR phys_addr;
	int i;

	if (!pfn_list)
		return -EINVAL;

	/*allocate page list*/
	pfns = kzalloc(page_count * sizeof(u32), GFP_KERNEL);
	if (!pfns) {
		DRM_ERROR("No memory\n");
		return -ENOMEM;
	}

	for (i = 0; i < page_count; i++) {
		phys_addr.uiAddr = 0;

		phys_addr =
			LinuxMemAreaToCpuPAddr(psLinuxMemArea, i * PAGE_SIZE);
		pfns[i] = ((u32)phys_addr.uiAddr) >> PAGE_SHIFT;
	}

	*pfn_list = pfns;
	return 0;
}
static off_t printLinuxMemAreaRecords(char *buffer, size_t count, off_t off)
{
	struct DEBUG_LINUX_MEM_AREA_REC *psRecord;
	off_t Ret;

	mutex_lock(&g_sDebugMutex);

	if (!off) {
		if (count < 500) {
			Ret = 0;
			goto unlock_and_return;
		}
		Ret = printAppend(buffer, count, 0,
				  "Number of Linux Memory Areas: %u\n"
			  "At the current water mark these areas "
				  "correspond to %u bytes "
				  "(excluding SUB areas)\n"
			  "At the highest water mark these areas "
				  "corresponded to %u bytes "
				  "(excluding SUB areas)\n"
			  "\nDetails for all Linux Memory Areas:\n"
			  "%s %-24s %s %s %-8s %-5s %s\n",
			  g_LinuxMemAreaCount,
			  g_LinuxMemAreaWaterMark,
			  g_LinuxMemAreaHighWaterMark,
			  "psLinuxMemArea",
			  "LinuxMemType",
			  "CpuVAddr",
			  "CpuPAddr", "Bytes", "Pid", "Flags");
		goto unlock_and_return;
	}

	for (psRecord = g_LinuxMemAreaRecords; --off && psRecord;
	     psRecord = psRecord->psNext)
		;
	if (!psRecord) {
		Ret = END_OF_FILE;
		goto unlock_and_return;
	}

	if (count < 500) {
		Ret = 0;
		goto unlock_and_return;
	}

	Ret = printAppend(buffer, count, 0,
			  "%8p       %-24s %8p %08x %-8d %-5u %08x=(%s)\n",
			  psRecord->psLinuxMemArea,
			  LinuxMemAreaTypeToString(psRecord->psLinuxMemArea->
						   eAreaType),
			  LinuxMemAreaToCpuVAddr(psRecord->psLinuxMemArea),
			  LinuxMemAreaToCpuPAddr(psRecord->psLinuxMemArea,
						 0).uiAddr,
			  psRecord->psLinuxMemArea->ui32ByteSize, psRecord->pid,
			  psRecord->ui32Flags,
			  HAPFlagsToString(psRecord->ui32Flags)
	    );

unlock_and_return:
	mutex_unlock(&g_sDebugMutex);
	return Ret;
}