Lines Matching refs:addr
38 int raw_patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
40 return __patch_instruction(addr, instr, addr);
88 static int map_patch_area(void *addr, unsigned long text_poke_addr)
93 if (is_vmalloc_or_module_addr(addr))
94 pfn = vmalloc_to_pfn(addr);
96 pfn = __pa_symbol(addr) >> PAGE_SHIFT;
100 pr_devel("Mapped addr %lx with pfn %lx:%d\n", text_poke_addr, pfn, err);
107 static inline int unmap_patch_area(unsigned long addr)
115 pgdp = pgd_offset_k(addr);
119 p4dp = p4d_offset(pgdp, addr);
123 pudp = pud_offset(p4dp, addr);
127 pmdp = pmd_offset(pudp, addr);
131 ptep = pte_offset_kernel(pmdp, addr);
135 pr_devel("clearing mm %p, pte %p, addr %lx\n", &init_mm, ptep, addr);
140 pte_clear(&init_mm, addr, ptep);
141 flush_tlb_kernel_range(addr, addr + PAGE_SIZE);
146 static int do_patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
152 unsigned long kaddr = (unsigned long)addr;
160 return raw_patch_instruction(addr, instr);
164 text_poke_addr = (unsigned long)__this_cpu_read(text_poke_area)->addr;
165 if (map_patch_area(addr, text_poke_addr)) {
172 __patch_instruction(addr, instr, patch_addr);
185 static int do_patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
187 return raw_patch_instruction(addr, instr);
192 int patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
195 if (init_mem_is_free && init_section_contains(addr, 4)) {
196 pr_debug("Skipping init section patching addr: 0x%px\n", addr);
199 return do_patch_instruction(addr, instr);
203 int patch_branch(struct ppc_inst *addr, unsigned long target, int flags)
207 create_branch(&instr, addr, target, flags);
208 return patch_instruction(addr, instr);
261 const struct ppc_inst *addr,
269 offset = offset - (unsigned long)addr;
281 int create_cond_branch(struct ppc_inst *instr, const struct ppc_inst *addr,
288 offset = offset - (unsigned long)addr;
370 int instr_is_branch_to_addr(const struct ppc_inst *instr, unsigned long addr)
374 return branch_target(instr) == addr;
396 void __patch_exception(int exc, unsigned long addr)
407 patch_branch((struct ppc_inst *)(ibase + (exc / 4) + 1), addr, 0);
425 unsigned long addr;
427 addr = (unsigned long)&instr;
455 check(instr_is_branch_to_addr(&instr, addr + 0x1FFFFFC));
458 check(instr_is_branch_to_addr(&instr, addr - 4));
461 check(instr_is_branch_to_addr(&instr, addr - 0x2000000));
464 err = create_branch(&instr, &instr, addr, BRANCH_SET_LINK);
465 check(instr_is_branch_to_addr(&instr, addr));
468 err = create_branch(&instr, &instr, addr - 0x100, BRANCH_SET_LINK);
469 check(instr_is_branch_to_addr(&instr, addr - 0x100));
472 err = create_branch(&instr, &instr, addr + 0x100, 0);
473 check(instr_is_branch_to_addr(&instr, addr + 0x100));
476 err = create_branch(&instr, &instr, addr - 0x2000000, BRANCH_SET_LINK);
477 check(instr_is_branch_to_addr(&instr, addr - 0x2000000));
480 err = create_branch(&instr, &instr, addr - 0x2000004, BRANCH_SET_LINK);
484 err = create_branch(&instr, &instr, addr + 0x2000000, BRANCH_SET_LINK);
488 err = create_branch(&instr, &instr, addr + 3, BRANCH_SET_LINK);
492 err = create_branch(&instr, &instr, addr, 0xFFFFFFFC);
493 check(instr_is_branch_to_addr(&instr, addr));
514 unsigned long addr;
519 addr = (unsigned long)iptr;
538 check(instr_is_branch_to_addr(&instr, addr + 0x7FFC));
541 check(instr_is_branch_to_addr(&instr, addr - 4));
544 check(instr_is_branch_to_addr(&instr, addr - 0x8000));
550 err = create_cond_branch(&instr, iptr, addr, flags);
551 check(instr_is_branch_to_addr(&instr, addr));
554 err = create_cond_branch(&instr, iptr, addr - 0x100, flags);
555 check(instr_is_branch_to_addr(&instr, addr - 0x100));
558 err = create_cond_branch(&instr, iptr, addr + 0x100, flags);
559 check(instr_is_branch_to_addr(&instr, addr + 0x100));
562 err = create_cond_branch(&instr, iptr, addr - 0x8000, flags);
563 check(instr_is_branch_to_addr(&instr, addr - 0x8000));
566 err = create_cond_branch(&instr, iptr, addr - 0x8004, flags);
570 err = create_cond_branch(&instr, iptr, addr + 0x8000, flags);
574 err = create_cond_branch(&instr, iptr, addr + 3, flags);
578 err = create_cond_branch(&instr, iptr, addr, 0xFFFFFFFC);
579 check(instr_is_branch_to_addr(&instr, addr));
585 unsigned long addr;
597 addr = (unsigned long)p;
598 patch_branch(p, addr, 0);
599 check(instr_is_branch_to_addr(p, addr));
603 check(instr_is_branch_to_addr(q, addr));
605 /* Maximum negative case, move b . to addr + 32 MB */
607 addr = (unsigned long)p;
608 patch_branch(p, addr, 0);
612 check(instr_is_branch_to_addr(p, addr));
613 check(instr_is_branch_to_addr(q, addr));
618 addr = (unsigned long)p;
619 patch_branch(p, addr, 0);
623 check(instr_is_branch_to_addr(p, addr));
624 check(instr_is_branch_to_addr(q, addr));
629 addr = 0x1000000 + (unsigned long)buf;
630 patch_branch(p, addr, BRANCH_SET_LINK);
634 check(instr_is_branch_to_addr(p, addr));
635 check(instr_is_branch_to_addr(q, addr));
639 addr = 0x2000000 + (unsigned long)buf;
640 patch_branch(p, addr, 0);
644 check(instr_is_branch_to_addr(p, addr));
645 check(instr_is_branch_to_addr(q, addr));
652 addr = (unsigned long)p;
653 create_cond_branch(&instr, p, addr, 0);
655 check(instr_is_branch_to_addr(p, addr));
659 check(instr_is_branch_to_addr(q, addr));
661 /* Maximum negative case, move b . to addr + 32 KB */
663 addr = (unsigned long)p;
664 create_cond_branch(&instr, p, addr, 0xFFFFFFFC);
669 check(instr_is_branch_to_addr(p, addr));
670 check(instr_is_branch_to_addr(q, addr));
675 addr = (unsigned long)p;
676 create_cond_branch(&instr, p, addr, 0xFFFFFFFC);
681 check(instr_is_branch_to_addr(p, addr));
682 check(instr_is_branch_to_addr(q, addr));
687 addr = 0x3000 + (unsigned long)buf;
688 create_cond_branch(&instr, p, addr, BRANCH_SET_LINK);
693 check(instr_is_branch_to_addr(p, addr));
694 check(instr_is_branch_to_addr(q, addr));
698 addr = 0x4000 + (unsigned long)buf;
699 create_cond_branch(&instr, p, addr, 0);
704 check(instr_is_branch_to_addr(p, addr));
705 check(instr_is_branch_to_addr(q, addr));