uint32_t temp;\r
status = 0;\r
Address = 0;\r
-\r
+ \r
do\r
{ \r
down_read(¤t->mm->mmap_sem);\r
NULL\r
);\r
up_read(¤t->mm->mmap_sem);\r
- \r
+\r
+ #if 0 \r
if(result <= 0 || result < pageCount) \r
{\r
status = 0;\r
\r
return status;\r
}\r
+ #else\r
+ if(result <= 0 || result < pageCount) \r
+ {\r
+ struct vm_area_struct *vma;\r
+\r
+ for(i=0; i<pageCount; i++)\r
+ { \r
+ vma = find_vma(current->mm, (Memory + i) << PAGE_SHIFT);\r
+\r
+ if (vma && (vma->vm_flags & VM_PFNMAP) )\r
+ {\r
+ do\r
+ {\r
+ pte_t * pte;\r
+ spinlock_t * ptl;\r
+ unsigned long pfn; \r
+ pgd_t * pgd;\r
+ pud_t * pud;\r
+ \r
+ pgd = pgd_offset(current->mm, (Memory + i) << PAGE_SHIFT);\r
+\r
+ if(pgd_val(*pgd) == 0)\r
+ {\r
+ printk("rga pgd value is zero \n");\r
+ break;\r
+ }\r
+ \r
+ pud = pud_offset(pgd, (Memory + i) << PAGE_SHIFT);\r
+ if (pud)\r
+ {\r
+ pmd_t * pmd = pmd_offset(pud, (Memory + i) << PAGE_SHIFT);\r
+ if (pmd)\r
+ {\r
+ pte = pte_offset_map_lock(current->mm, pmd, (Memory + i) << PAGE_SHIFT, &ptl);\r
+ if (!pte)\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ break;\r
+ }\r
+\r
+ pfn = pte_pfn(*pte);\r
+ Address = ((pfn << PAGE_SHIFT) | (((unsigned long)((Memory + i) << PAGE_SHIFT)) & ~PAGE_MASK)); \r
+ pte_unmap_unlock(pte, ptl); \r
+ }\r
+ while (0);\r
+\r
+ pageTable[i] = Address;\r
+ }\r
+ else\r
+ {\r
+ status = RGA_OUT_OF_RESOURCES;\r
+ break;\r
+ } \r
+ }\r
+ \r
+ return 0;\r
+ }\r
+ #endif\r
\r
for (i = 0; i < pageCount; i++)\r
{\r
/* Cal out the needed mem size */\r
AllSize = SrcMemSize + DstMemSize;\r
\r
- pages = kmalloc((AllSize + 1)* sizeof(struct page *), GFP_KERNEL);\r
+ pages = kzalloc((AllSize + 1)* sizeof(struct page *), GFP_KERNEL);\r
if(pages == NULL) {\r
pr_err("RGA MMU malloc pages mem failed\n");\r
status = RGA_MALLOC_ERROR;\r
break; \r
}\r
\r
- MMU_Base = kmalloc((AllSize + 1) * sizeof(uint32_t), GFP_KERNEL);\r
+ MMU_Base = kzalloc((AllSize + 1) * sizeof(uint32_t), GFP_KERNEL);\r
if(MMU_Base == NULL) {\r
pr_err("RGA MMU malloc MMU_Base point failed\n");\r
status = RGA_MALLOC_ERROR;\r
}\r
\r
if(req->src.yrgb_addr < KERNEL_SPACE_VALID)\r
- { \r
+ { \r
ret = rga_MapUserMemory(&pages[0], &MMU_Base[0], SrcStart, SrcMemSize);\r
if (ret < 0) {\r
pr_err("rga map src memory failed\n");\r
#if 0\r
ktime_t start, end;\r
start = ktime_get();\r
- #endif\r
+ #endif \r
ret = rga_MapUserMemory(&pages[SrcMemSize], &MMU_Base[SrcMemSize], DstStart, DstMemSize);\r
if (ret < 0) {\r
pr_err("rga map dst memory failed\n");\r