Lines Matching refs:a
283 recompute_jump(struct alt_instr *a, u8 *orig_insn, u8 *repl_insn, u8 *insnbuf) in recompute_jump() argument
289 if (a->replacementlen != 5) in recompute_jump()
295 next_rip = repl_insn + a->replacementlen; in recompute_jump()
339 static void __init_or_module optimize_nops(struct alt_instr *a, u8 *instr) in optimize_nops() argument
347 add_nops(instr + (a->instrlen - a->padlen), a->padlen); in optimize_nops()
351 DUMP_BYTES(instr, a->instrlen, "%p: [%d:%d) optimized NOPs: ", in optimize_nops()
352 instr, a->instrlen - a->padlen, a->padlen); in optimize_nops()
365 struct alt_instr *a; in apply_alternatives() local
379 for (a = start; a < end; a++) { in apply_alternatives()
382 instr = (u8 *)&a->instr_offset + a->instr_offset; in apply_alternatives()
383 replacement = (u8 *)&a->repl_offset + a->repl_offset; in apply_alternatives()
384 BUG_ON(a->instrlen > sizeof(insnbuf)); in apply_alternatives()
385 BUG_ON(a->cpuid >= (NCAPINTS + NBUGINTS) * 32); in apply_alternatives()
386 if (!boot_cpu_has(a->cpuid)) { in apply_alternatives()
387 if (a->padlen > 1) in apply_alternatives()
388 optimize_nops(a, instr); in apply_alternatives()
394 a->cpuid >> 5, in apply_alternatives()
395 a->cpuid & 0x1f, in apply_alternatives()
396 instr, a->instrlen, in apply_alternatives()
397 replacement, a->replacementlen, a->padlen); in apply_alternatives()
399 DUMP_BYTES(instr, a->instrlen, "%p: old_insn: ", instr); in apply_alternatives()
400 DUMP_BYTES(replacement, a->replacementlen, "%p: rpl_insn: ", replacement); in apply_alternatives()
402 memcpy(insnbuf, replacement, a->replacementlen); in apply_alternatives()
403 insnbuf_sz = a->replacementlen; in apply_alternatives()
406 if (*insnbuf == 0xe8 && a->replacementlen == 5) { in apply_alternatives()
413 if (a->replacementlen && is_jmp(replacement[0])) in apply_alternatives()
414 recompute_jump(a, instr, replacement, insnbuf); in apply_alternatives()
416 if (a->instrlen > a->replacementlen) { in apply_alternatives()
417 add_nops(insnbuf + a->replacementlen, in apply_alternatives()
418 a->instrlen - a->replacementlen); in apply_alternatives()
419 insnbuf_sz += a->instrlen - a->replacementlen; in apply_alternatives()