Observe o comentário na linha 2885 :
/* Here we just switch the register state and the stack. */
context_switch()
não carrega o novo ponteiro de instrução (contador de programa) diretamente, ele alterna a pilha - e a pilha contém o endereço de retorno apropriado. Quando a função retorna, ela retorna para a nova tarefa.
Quando forking, o endereço de retorno virtual é o mesmo que em ambos os processos (pai e filho); a diferença é o valor de retorno.