From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg Kroah-Hartman Subject: [PATCH 4.14 124/156] x86/xen: Support early interrupts in xen pv guests Date: Fri, 2 Feb 2018 17:58:25 +0100 Message-ID: <20180202140845.994367591@linuxfoundation.org> References: <20180202140840.242829545@linuxfoundation.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ehetS-0000Px-ON for xen-devel@lists.xenproject.org; Fri, 02 Feb 2018 17:12:54 +0000 In-Reply-To: <20180202140840.242829545@linuxfoundation.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org Cc: Juergen Gross , Greg Kroah-Hartman , stable@vger.kernel.org, Sasha Levin , Andy Lutomirski , xen-devel@lists.xenproject.org, Thomas Gleixner , boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org NC4xNC1zdGFibGUgcmV2aWV3IHBhdGNoLiAgSWYgYW55b25lIGhhcyBhbnkgb2JqZWN0aW9ucywg cGxlYXNlIGxldCBtZSBrbm93LgoKLS0tLS0tLS0tLS0tLS0tLS0tCgpGcm9tOiBKdWVyZ2VuIEdy b3NzIDxqZ3Jvc3NAc3VzZS5jb20+CgoKWyBVcHN0cmVhbSBjb21taXQgNDJiM2E0Y2I1NjA5ZGU3 NTdmNTQ0NWZjYWQxODk0NWJhOTIzOWEwNyBdCgpBZGQgZWFybHkgaW50ZXJydXB0IGhhbmRsZXJz IGFjdGl2YXRlZCBieSBpZHRfc2V0dXBfZWFybHlfaGFuZGxlcigpIHRvCnRoZSBoYW5kbGVycyBz dXBwb3J0ZWQgYnkgWGVuIHB2IGd1ZXN0cy4gVGhpcyB3aWxsIGFsbG93IGZvciBlYXJseQpXQVJO KCkgY2FsbHMgbm90IGNyYXNoaW5nIHRoZSBndWVzdC4KClN1Z2dlc3RlZC1ieTogQW5keSBMdXRv bWlyc2tpIDxsdXRvQGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IEp1ZXJnZW4gR3Jvc3MgPGpn cm9zc0BzdXNlLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0 cm9uaXguZGU+CkNjOiB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKQ2M6IGJvcmlzLm9z dHJvdnNreUBvcmFjbGUuY29tCkxpbms6IGh0dHBzOi8vbGttbC5rZXJuZWwub3JnL3IvMjAxNzEx MjQwODQyMjEuMzAxNzItMS1qZ3Jvc3NAc3VzZS5jb20KU2lnbmVkLW9mZi1ieTogU2FzaGEgTGV2 aW4gPGFsZXhhbmRlci5sZXZpbkB2ZXJpem9uLmNvbT4KU2lnbmVkLW9mZi1ieTogR3JlZyBLcm9h aC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KLS0tCiBhcmNoL3g4Ni9pbmNs dWRlL2FzbS9zZWdtZW50LmggfCAgIDEyICsrKysrKysrKysrKwogYXJjaC94ODYvbW0vZXh0YWJs ZS5jICAgICAgICAgIHwgICAgNCArKystCiBhcmNoL3g4Ni94ZW4vZW5saWdodGVuX3B2LmMgICAg fCAgIDM3ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIGFyY2gveDg2L3hl bi94ZW4tYXNtXzY0LlMgICAgICB8ICAgMTQgKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdl ZCwgNTMgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCgotLS0gYS9hcmNoL3g4Ni9pbmNs dWRlL2FzbS9zZWdtZW50LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VnbWVudC5oCkBA IC0yMzYsMTEgKzIzNiwyMyBAQAogICovCiAjZGVmaW5lIEVBUkxZX0lEVF9IQU5ETEVSX1NJWkUg OQogCisvKgorICogeGVuX2Vhcmx5X2lkdF9oYW5kbGVyX2FycmF5IGlzIGZvciBYZW4gcHYgZ3Vl c3RzOiBmb3IgZWFjaCBlbnRyeSBpbgorICogZWFybHlfaWR0X2hhbmRsZXJfYXJyYXkgaXQgY29u dGFpbnMgYSBwcmVxdWVsIGluIHRoZSBmb3JtIG9mCisgKiBwb3AgJXJjeDsgcG9wICVyMTE7IGpt cCBlYXJseV9pZHRfaGFuZGxlcl9hcnJheVtpXTsgc3VtbWluZyB1cCB0bworICogbWF4IDggYnl0 ZXMuCisgKi8KKyNkZWZpbmUgWEVOX0VBUkxZX0lEVF9IQU5ETEVSX1NJWkUgOAorCiAjaWZuZGVm IF9fQVNTRU1CTFlfXwogCiBleHRlcm4gY29uc3QgY2hhciBlYXJseV9pZHRfaGFuZGxlcl9hcnJh eVtOVU1fRVhDRVBUSU9OX1ZFQ1RPUlNdW0VBUkxZX0lEVF9IQU5ETEVSX1NJWkVdOwogZXh0ZXJu IHZvaWQgZWFybHlfaWdub3JlX2lycSh2b2lkKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82 NCkgJiYgZGVmaW5lZChDT05GSUdfWEVOX1BWKQorZXh0ZXJuIGNvbnN0IGNoYXIgeGVuX2Vhcmx5 X2lkdF9oYW5kbGVyX2FycmF5W05VTV9FWENFUFRJT05fVkVDVE9SU11bWEVOX0VBUkxZX0lEVF9I QU5ETEVSX1NJWkVdOworI2VuZGlmCisKIC8qCiAgKiBMb2FkIGEgc2VnbWVudC4gRmFsbCBiYWNr IG9uIGxvYWRpbmcgdGhlIHplcm8gc2VnbWVudCBpZiBzb21ldGhpbmcgZ29lcwogICogd3Jvbmcu ICBUaGlzIHZhcmlhbnQgYXNzdW1lcyB0aGF0IGxvYWRpbmcgemVybyBmdWxseSBjbGVhcnMgdGhl IHNlZ21lbnQuCi0tLSBhL2FyY2gveDg2L21tL2V4dGFibGUuYworKysgYi9hcmNoL3g4Ni9tbS9l eHRhYmxlLmMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXh0YWJsZS5oPgogI2lu Y2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC9kZWJ1Zy5oPgor I2luY2x1ZGUgPHhlbi94ZW4uaD4KIAogI2luY2x1ZGUgPGFzbS9mcHUvaW50ZXJuYWwuaD4KICNp bmNsdWRlIDxhc20vdHJhcHMuaD4KQEAgLTIxMiw4ICsyMTMsOSBAQCB2b2lkIF9faW5pdCBlYXJs eV9maXh1cF9leGNlcHRpb24oc3RydWN0CiAJICogT2xkIENQVXMgbGVhdmUgdGhlIGhpZ2ggYml0 cyBvZiBDUyBvbiB0aGUgc3RhY2sKIAkgKiB1bmRlZmluZWQuICBJJ20gbm90IHN1cmUgd2hpY2gg Q1BVcyBkbyB0aGlzLCBidXQgYXQgbGVhc3QKIAkgKiB0aGUgNDg2IERYIHdvcmtzIHRoaXMgd2F5 LgorCSAqIFhlbiBwdiBkb21haW5zIGFyZSBub3QgdXNpbmcgdGhlIGRlZmF1bHQgX19LRVJORUxf Q1MuCiAJICovCi0JaWYgKHJlZ3MtPmNzICE9IF9fS0VSTkVMX0NTKQorCWlmICgheGVuX3B2X2Rv bWFpbigpICYmIHJlZ3MtPmNzICE9IF9fS0VSTkVMX0NTKQogCQlnb3RvIGZhaWw7CiAKIAkvKgot LS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuX3B2LmMKKysrIGIvYXJjaC94ODYveGVuL2VubGln aHRlbl9wdi5jCkBAIC02MjIsNyArNjIyLDcgQEAgc3RhdGljIHN0cnVjdCB0cmFwX2FycmF5X2Vu dHJ5IHRyYXBfYXJyYQogCXsgc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvciwgICAgICB4ZW5fc2ltZF9j b3Byb2Nlc3Nvcl9lcnJvciwgICAgICBmYWxzZSB9LAogfTsKIAotc3RhdGljIGJvb2wgZ2V0X3Ry YXBfYWRkcih2b2lkICoqYWRkciwgdW5zaWduZWQgaW50IGlzdCkKK3N0YXRpYyBib29sIF9fcmVm IGdldF90cmFwX2FkZHIodm9pZCAqKmFkZHIsIHVuc2lnbmVkIGludCBpc3QpCiB7CiAJdW5zaWdu ZWQgaW50IG5yOwogCWJvb2wgaXN0X29rYXkgPSBmYWxzZTsKQEAgLTY0NCw2ICs2NDQsMTQgQEAg c3RhdGljIGJvb2wgZ2V0X3RyYXBfYWRkcih2b2lkICoqYWRkciwgdQogCQl9CiAJfQogCisJaWYg KG5yID09IEFSUkFZX1NJWkUodHJhcF9hcnJheSkgJiYKKwkgICAgKmFkZHIgPj0gKHZvaWQgKill YXJseV9pZHRfaGFuZGxlcl9hcnJheVswXSAmJgorCSAgICAqYWRkciA8ICh2b2lkICopZWFybHlf aWR0X2hhbmRsZXJfYXJyYXlbTlVNX0VYQ0VQVElPTl9WRUNUT1JTXSkgeworCQluciA9ICgqYWRk ciAtICh2b2lkICopZWFybHlfaWR0X2hhbmRsZXJfYXJyYXlbMF0pIC8KKwkJICAgICBFQVJMWV9J RFRfSEFORExFUl9TSVpFOworCQkqYWRkciA9ICh2b2lkICopeGVuX2Vhcmx5X2lkdF9oYW5kbGVy X2FycmF5W25yXTsKKwl9CisKIAlpZiAoV0FSTl9PTihpc3QgIT0gMCAmJiAhaXN0X29rYXkpKQog CQlyZXR1cm4gZmFsc2U7CiAKQEAgLTEyNjEsNiArMTI2OSwyMSBAQCBhc21saW5rYWdlIF9fdmlz aWJsZSB2b2lkIF9faW5pdCB4ZW5fc3RhCiAJeGVuX3NldHVwX2dkdCgwKTsKIAogCXhlbl9pbml0 X2lycV9vcHMoKTsKKworCS8qIExldCdzIHByZXN1bWUgUFYgZ3Vlc3RzIGFsd2F5cyBib290IG9u IHZDUFUgd2l0aCBpZCAwLiAqLworCXBlcl9jcHUoeGVuX3ZjcHVfaWQsIDApID0gMDsKKworCS8q CisJICogU2V0dXAgeGVuX3ZjcHUgZWFybHkgYmVjYXVzZSBpZHRfc2V0dXBfZWFybHlfaGFuZGxl ciBuZWVkcyBpdCBmb3IKKwkgKiBsb2NhbF9pcnFfZGlzYWJsZSgpLCBpcnFzX2Rpc2FibGVkKCku CisJICoKKwkgKiBEb24ndCBkbyB0aGUgZnVsbCB2Y3B1X2luZm8gcGxhY2VtZW50IHN0dWZmIHVu dGlsIHdlIGhhdmUKKwkgKiB0aGUgY3B1X3Bvc3NpYmxlX21hc2sgYW5kIGEgbm9uLWR1bW15IHNo YXJlZF9pbmZvLgorCSAqLworCXhlbl92Y3B1X2luZm9fcmVzZXQoMCk7CisKKwlpZHRfc2V0dXBf ZWFybHlfaGFuZGxlcigpOworCiAJeGVuX2luaXRfY2FwYWJpbGl0aWVzKCk7CiAKICNpZmRlZiBD T05GSUdfWDg2X0xPQ0FMX0FQSUMKQEAgLTEyOTQsMTggKzEzMTcsNiBAQCBhc21saW5rYWdlIF9f dmlzaWJsZSB2b2lkIF9faW5pdCB4ZW5fc3RhCiAJICovCiAJYWNwaV9udW1hID0gLTE7CiAjZW5k aWYKLQkvKiBMZXQncyBwcmVzdW1lIFBWIGd1ZXN0cyBhbHdheXMgYm9vdCBvbiB2Q1BVIHdpdGgg aWQgMC4gKi8KLQlwZXJfY3B1KHhlbl92Y3B1X2lkLCAwKSA9IDA7Ci0KLQkvKgotCSAqIFNldHVw IHhlbl92Y3B1IGVhcmx5IGJlY2F1c2Ugc3RhcnRfa2VybmVsIG5lZWRzIGl0IGZvcgotCSAqIGxv Y2FsX2lycV9kaXNhYmxlKCksIGlycXNfZGlzYWJsZWQoKS4KLQkgKgotCSAqIERvbid0IGRvIHRo ZSBmdWxsIHZjcHVfaW5mbyBwbGFjZW1lbnQgc3R1ZmYgdW50aWwgd2UgaGF2ZQotCSAqIHRoZSBj cHVfcG9zc2libGVfbWFzayBhbmQgYSBub24tZHVtbXkgc2hhcmVkX2luZm8uCi0JICovCi0JeGVu X3ZjcHVfaW5mb19yZXNldCgwKTsKLQogCVdBUk5fT04oeGVuX2NwdWhwX3NldHVwKHhlbl9jcHVf dXBfcHJlcGFyZV9wdiwgeGVuX2NwdV9kZWFkX3B2KSk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgp OwotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV82NC5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4t YXNtXzY0LlMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVu Lmg+CiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5o PgogCiAubWFjcm8geGVuX3B2X3RyYXAgbmFtZQpAQCAtNTQsNiArNTUsMTkgQEAgeGVuX3B2X3Ry YXAgZW50cnlfSU5UODBfY29tcGF0CiAjZW5kaWYKIHhlbl9wdl90cmFwIGh5cGVydmlzb3JfY2Fs bGJhY2sKIAorCV9fSU5JVAorRU5UUlkoeGVuX2Vhcmx5X2lkdF9oYW5kbGVyX2FycmF5KQorCWkg PSAwCisJLnJlcHQgTlVNX0VYQ0VQVElPTl9WRUNUT1JTCisJcG9wICVyY3gKKwlwb3AgJXIxMQor CWptcCBlYXJseV9pZHRfaGFuZGxlcl9hcnJheSArIGkqRUFSTFlfSURUX0hBTkRMRVJfU0laRQor CWkgPSBpICsgMQorCS5maWxsIHhlbl9lYXJseV9pZHRfaGFuZGxlcl9hcnJheSArIGkqWEVOX0VB UkxZX0lEVF9IQU5ETEVSX1NJWkUgLSAuLCAxLCAweGNjCisJLmVuZHIKK0VORCh4ZW5fZWFybHlf aWR0X2hhbmRsZXJfYXJyYXkpCisJX19GSU5JVAorCiBoeXBlcmNhbGxfaXJldCA9IGh5cGVyY2Fs bF9wYWdlICsgX19IWVBFUlZJU09SX2lyZXQgKiAzMgogLyoKICAqIFhlbjY0IGlyZXQgZnJhbWU6 CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AH8x224ia62W3OMg+KzlTDclBsaTHDLs2tQxySizmDeBAPhI907NWumXcWYWBJV+FdM7mJtnbQQ3 ARC-Seal: i=1; a=rsa-sha256; t=1517591569; cv=none; d=google.com; s=arc-20160816; b=d5dREu4bsK4VWmGKW2+YjhN8q4JZfXnRcK4hU+Crt+NxtI3ps6tsas8dbf6cz/kVfV 9/W/ilMzzYaeSBOLEQfjWl7XraZfV16j6ISt5P4DcT/knAuYARZ5m9Y3DyG1gxuQ46Tr nr3K3PmcoQPpZHiFYSTRvMCdQVn1KQM1EUFggpsxcEPNG9ssRBjvHkyd+Kyf/apqG1Tn DnO5q1r5vEf3fgg6E21JoBjtumVmej1AliAEQBvoF97zn+RJRv1HIPQXNDUNiXDewXC7 50HGh7TOhwiN59rNuncrIwJD3gMpcQa22dHirvfMVBXQ4cLnle4FYqq3NzGELw5OR+78 rFCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:user-agent:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=wR1sVdRL1SawtfAT6IJCOXjceKOvmOkxWWphbAqI/Ho=; b=zqI+/0XnrQAoZoeelpKB/5tW5s78BYdBPVFMDJmT5E72rD9xZG6vp6PgxOUGucB0oB gf5lhNd7/PSWVNCnMLTrtgO0xtc2ExOsIfioEZNHGNLqcsGLeuQO+2ILApcfa2f8ME8T r0qHEtoxD5ca3XcD/niNVC41bmJVugYWS/J3S8CHiMSTCcDcJy3PC00OQUAYaff4IoFQ DJzVkmeFWcAQ6965C+RBsvW20CRfYBMW5DB8od+XtgZkhKDebdFO3GD1t9/DMs5VhK17 a/Z1bkTQDYYiT3DFBRhh5/meSSt1hEdGdi2ENxDHjReG5+mQi3dV5bnwQpc3+D/zl47f Bp3A== ARC-Authentication-Results: i=1; mx.google.com; spf=softfail (google.com: domain of transitioning gregkh@linuxfoundation.org does not designate 90.92.71.90 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning gregkh@linuxfoundation.org does not designate 90.92.71.90 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Andy Lutomirski , Juergen Gross , Thomas Gleixner , xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com, Sasha Levin Subject: [PATCH 4.14 124/156] x86/xen: Support early interrupts in xen pv guests Date: Fri, 2 Feb 2018 17:58:25 +0100 Message-Id: <20180202140845.994367591@linuxfoundation.org> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180202140840.242829545@linuxfoundation.org> References: <20180202140840.242829545@linuxfoundation.org> User-Agent: quilt/0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-LABELS: =?utf-8?b?IlxcU2VudCI=?= X-GMAIL-THRID: =?utf-8?q?1591310097679908944?= X-GMAIL-MSGID: =?utf-8?q?1591310097679908944?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Juergen Gross [ Upstream commit 42b3a4cb5609de757f5445fcad18945ba9239a07 ] Add early interrupt handlers activated by idt_setup_early_handler() to the handlers supported by Xen pv guests. This will allow for early WARN() calls not crashing the guest. Suggested-by: Andy Lutomirski Signed-off-by: Juergen Gross Signed-off-by: Thomas Gleixner Cc: xen-devel@lists.xenproject.org Cc: boris.ostrovsky@oracle.com Link: https://lkml.kernel.org/r/20171124084221.30172-1-jgross@suse.com Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- arch/x86/include/asm/segment.h | 12 ++++++++++++ arch/x86/mm/extable.c | 4 +++- arch/x86/xen/enlighten_pv.c | 37 ++++++++++++++++++++++++------------- arch/x86/xen/xen-asm_64.S | 14 ++++++++++++++ 4 files changed, 53 insertions(+), 14 deletions(-) --- a/arch/x86/include/asm/segment.h +++ b/arch/x86/include/asm/segment.h @@ -236,11 +236,23 @@ */ #define EARLY_IDT_HANDLER_SIZE 9 +/* + * xen_early_idt_handler_array is for Xen pv guests: for each entry in + * early_idt_handler_array it contains a prequel in the form of + * pop %rcx; pop %r11; jmp early_idt_handler_array[i]; summing up to + * max 8 bytes. + */ +#define XEN_EARLY_IDT_HANDLER_SIZE 8 + #ifndef __ASSEMBLY__ extern const char early_idt_handler_array[NUM_EXCEPTION_VECTORS][EARLY_IDT_HANDLER_SIZE]; extern void early_ignore_irq(void); +#if defined(CONFIG_X86_64) && defined(CONFIG_XEN_PV) +extern const char xen_early_idt_handler_array[NUM_EXCEPTION_VECTORS][XEN_EARLY_IDT_HANDLER_SIZE]; +#endif + /* * Load a segment. Fall back on loading the zero segment if something goes * wrong. This variant assumes that loading zero fully clears the segment. --- a/arch/x86/mm/extable.c +++ b/arch/x86/mm/extable.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -212,8 +213,9 @@ void __init early_fixup_exception(struct * Old CPUs leave the high bits of CS on the stack * undefined. I'm not sure which CPUs do this, but at least * the 486 DX works this way. + * Xen pv domains are not using the default __KERNEL_CS. */ - if (regs->cs != __KERNEL_CS) + if (!xen_pv_domain() && regs->cs != __KERNEL_CS) goto fail; /* --- a/arch/x86/xen/enlighten_pv.c +++ b/arch/x86/xen/enlighten_pv.c @@ -622,7 +622,7 @@ static struct trap_array_entry trap_arra { simd_coprocessor_error, xen_simd_coprocessor_error, false }, }; -static bool get_trap_addr(void **addr, unsigned int ist) +static bool __ref get_trap_addr(void **addr, unsigned int ist) { unsigned int nr; bool ist_okay = false; @@ -644,6 +644,14 @@ static bool get_trap_addr(void **addr, u } } + if (nr == ARRAY_SIZE(trap_array) && + *addr >= (void *)early_idt_handler_array[0] && + *addr < (void *)early_idt_handler_array[NUM_EXCEPTION_VECTORS]) { + nr = (*addr - (void *)early_idt_handler_array[0]) / + EARLY_IDT_HANDLER_SIZE; + *addr = (void *)xen_early_idt_handler_array[nr]; + } + if (WARN_ON(ist != 0 && !ist_okay)) return false; @@ -1261,6 +1269,21 @@ asmlinkage __visible void __init xen_sta xen_setup_gdt(0); xen_init_irq_ops(); + + /* Let's presume PV guests always boot on vCPU with id 0. */ + per_cpu(xen_vcpu_id, 0) = 0; + + /* + * Setup xen_vcpu early because idt_setup_early_handler needs it for + * local_irq_disable(), irqs_disabled(). + * + * Don't do the full vcpu_info placement stuff until we have + * the cpu_possible_mask and a non-dummy shared_info. + */ + xen_vcpu_info_reset(0); + + idt_setup_early_handler(); + xen_init_capabilities(); #ifdef CONFIG_X86_LOCAL_APIC @@ -1294,18 +1317,6 @@ asmlinkage __visible void __init xen_sta */ acpi_numa = -1; #endif - /* Let's presume PV guests always boot on vCPU with id 0. */ - per_cpu(xen_vcpu_id, 0) = 0; - - /* - * Setup xen_vcpu early because start_kernel needs it for - * local_irq_disable(), irqs_disabled(). - * - * Don't do the full vcpu_info placement stuff until we have - * the cpu_possible_mask and a non-dummy shared_info. - */ - xen_vcpu_info_reset(0); - WARN_ON(xen_cpuhp_setup(xen_cpu_up_prepare_pv, xen_cpu_dead_pv)); local_irq_disable(); --- a/arch/x86/xen/xen-asm_64.S +++ b/arch/x86/xen/xen-asm_64.S @@ -15,6 +15,7 @@ #include +#include #include .macro xen_pv_trap name @@ -54,6 +55,19 @@ xen_pv_trap entry_INT80_compat #endif xen_pv_trap hypervisor_callback + __INIT +ENTRY(xen_early_idt_handler_array) + i = 0 + .rept NUM_EXCEPTION_VECTORS + pop %rcx + pop %r11 + jmp early_idt_handler_array + i*EARLY_IDT_HANDLER_SIZE + i = i + 1 + .fill xen_early_idt_handler_array + i*XEN_EARLY_IDT_HANDLER_SIZE - ., 1, 0xcc + .endr +END(xen_early_idt_handler_array) + __FINIT + hypercall_iret = hypercall_page + __HYPERVISOR_iret * 32 /* * Xen64 iret frame: