From patchwork Tue Jul 31 14:39:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cameron Kaiser X-Patchwork-Id: 951635 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=kvm-ppc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=floodgap.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41fzlZ6MkNz9s3Z for ; Wed, 1 Aug 2018 00:46:18 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732350AbeGaQ05 (ORCPT ); Tue, 31 Jul 2018 12:26:57 -0400 Received: from floodgap.com ([66.166.122.164]:60419 "EHLO floodgap.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732231AbeGaQ04 (ORCPT ); Tue, 31 Jul 2018 12:26:56 -0400 X-Greylist: delayed 416 seconds by postgrey-1.27 at vger.kernel.org; Tue, 31 Jul 2018 12:26:56 EDT Received: (from spectre@localhost) by floodgap.com (6.6.6.666.1/2015.03.25) id w6VEdLPU13304044; Tue, 31 Jul 2018 07:39:21 -0700 From: Cameron Kaiser Message-Id: <201807311439.w6VEdLPU13304044@floodgap.com> Subject: [PATCH] KVM: PPC: Book3S PR: Exiting split hack mode needs to fixup both PC and LR To: kvm-ppc@vger.kernel.org, kvm@vger.kernel.org Date: Tue, 31 Jul 2018 07:39:21 -0700 (PDT) Cc: paulus@ozlabs.org, spectre@floodgap.com (Cameron Kaiser) X-Mailer: ELM [version 2.4ME+ PL39 (25)] MIME-Version: 1.0 Sender: kvm-ppc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm-ppc@vger.kernel.org When an OS (currently only classic Mac OS) is running in KVM-PR and makes a linked jump from code with split hack addressing enabled into code that does not, LR is not correctly updated and reflects the previously munged PC. This undoes the address munge when exiting split hack mode so that code relying on LR being a proper address will now execute. This does not affect OS X or other operating systems running on KVM-PR. Signed-off-by: Cameron Kaiser --- -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c index 97d4a112..2267e9b4 100644 --- a/arch/powerpc/kvm/book3s.c +++ b/arch/powerpc/kvm/book3s.c @@ -74,18 +74,21 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { { "pthru_bad_aff", VCPU_STAT(pthru_bad_aff) }, { NULL } }; void kvmppc_unfixup_split_real(struct kvm_vcpu *vcpu) { if (vcpu->arch.hflags & BOOK3S_HFLAG_SPLIT_HACK) { ulong pc = kvmppc_get_pc(vcpu); + ulong lr = kvmppc_get_lr(vcpu); if ((pc & SPLIT_HACK_MASK) == SPLIT_HACK_OFFS) kvmppc_set_pc(vcpu, pc & ~SPLIT_HACK_MASK); + if ((lr & SPLIT_HACK_MASK) == SPLIT_HACK_OFFS) + kvmppc_set_lr(vcpu, lr & ~SPLIT_HACK_MASK); vcpu->arch.hflags &= ~BOOK3S_HFLAG_SPLIT_HACK; } } EXPORT_SYMBOL_GPL(kvmppc_unfixup_split_real); static inline unsigned long kvmppc_interrupt_offset(struct kvm_vcpu *vcpu) { if (!is_kvmppc_hv_enabled(vcpu->kvm))