/* * If the faulting user space access crossed a page boundary retry by * limiting the access to the first page (adjust length accordingly). * Then the mvcos instruction will either complete with condition code * zero, or generate another fault where the user space access did not * cross a page boundary. * If the faulting user space access did not cross a page boundary set * length to zero and retry. In this case no user space access will * happen, and the mvcos instruction will complete with condition code * zero. * In both cases the instruction will complete with condition code * zero (copying finished), and the register which contains the * length, indicates the number of bytes copied.
*/
regs->psw.addr = extable_fixup(ex);
insn = (struct insn_ssf *)regs->psw.addr; if (from)
uaddr = regs->gprs[insn->b2] + insn->d2; else
uaddr = regs->gprs[insn->b1] + insn->d1;
remainder = PAGE_SIZE - (uaddr & (PAGE_SIZE - 1)); if (regs->gprs[insn->r3] <= remainder)
remainder = 0;
regs->gprs[insn->r3] = remainder; returntrue;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.