From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg Kroah-Hartman Subject: [PATCH 4.19 054/152] pvcalls-front: Avoid get_free_pages(GFP_KERNEL) under spinlock Date: Mon, 25 Feb 2019 22:10:46 +0100 Message-ID: <20190225195047.304306206@linuxfoundation.org> References: <20190225195043.645958524@linuxfoundation.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gyNhm-0000II-JU for xen-devel@lists.xenproject.org; Mon, 25 Feb 2019 21:22:30 +0000 In-Reply-To: <20190225195043.645958524@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 , Sasha Levin , Stefano Stabellini , Greg Kroah-Hartman , stable@vger.kernel.org, Julia Lawall , xen-devel@lists.xenproject.org, Boris Ostrovsky , Wen Yang List-Id: xen-devel@lists.xenproject.org NC4xOS1zdGFibGUgcmV2aWV3IHBhdGNoLiAgSWYgYW55b25lIGhhcyBhbnkgb2JqZWN0aW9ucywg cGxlYXNlIGxldCBtZSBrbm93LgoKLS0tLS0tLS0tLS0tLS0tLS0tCgpbIFVwc3RyZWFtIGNvbW1p dCA5ZjUxYzA1ZGM0MWE2ZDY5NDIzZTNkMDNkMThlYjdhYjIyZjllYzE5IF0KClRoZSBwcm9ibGVt IGlzIHRoYXQgd2UgY2FsbCB0aGlzIHdpdGggYSBzcGluIGxvY2sgaGVsZC4KVGhlIGNhbGwgdHJl ZSBpczoKcHZjYWxsc19mcm9udF9hY2NlcHQoKSBob2xkcyBiZWRhdGEtPnNvY2tldF9sb2NrLgog ICAgLT4gY3JlYXRlX2FjdGl2ZSgpCiAgICAgICAgLT4gX19nZXRfZnJlZV9wYWdlcygpIHVzZXMg R0ZQX0tFUk5FTAoKVGhlIGNyZWF0ZV9hY3RpdmUoKSBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBm cm9tIHB2Y2FsbHNfZnJvbnRfYWNjZXB0KCkKd2l0aCBhIHNwaW5fbG9jayBoZWxkLCBUaGUgYWxs b2NhdGlvbiBpcyBub3QgYWxsb3dlZCB0byBzbGVlcCBhbmQKR0ZQX0tFUk5FTCBpcyBub3Qgc3Vm ZmljaWVudC4KClRoaXMgaXNzdWUgd2FzIGRldGVjdGVkIGJ5IHVzaW5nIHRoZSBDb2NjaW5lbGxl IHNvZnR3YXJlLgoKdjI6IEFkZCBhIGZ1bmN0aW9uIGRvaW5nIHRoZSBhbGxvY2F0aW9ucyB3aGlj aCBpcyBjYWxsZWQKICAgIG91dHNpZGUgdGhlIGxvY2sgYW5kIHBhc3NpbmcgdGhlIGFsbG9jYXRl ZCBkYXRhIHRvCiAgICBjcmVhdGVfYWN0aXZlKCkuCgp2MzogVXNlIHRoZSBtYXRjaGluZyBkZWFs bG9jYXRvcnMgaS5lLiwgZnJlZV9wYWdlKCkKICAgIGFuZCBmcmVlX3BhZ2VzKCksIHJlc3BlY3Rp dmVseS4KCnY0OiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gcHJlLXBvcHVsYXRlIG1hcCAoc3RydWN0 IHNvY2tfbWFwcGluZyksCiAgICByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvbmUgbW9yZSBuZXcg c3RydWN0LgoKdjU6IFNpbmNlIGFsbG9jYXRpbmcgdGhlIGRhdGEgb3V0c2lkZSBvZiB0aGlzIGNh bGwgaXQgc2hvdWxkIGFsc28KICAgIGJlIGZyZWVkIG91dHNpZGUsIHdoZW4gY3JlYXRlX2FjdGl2 ZSgpIGZhaWxzLgogICAgTW92ZSBremFsbG9jKHNpemVvZigqbWFwMiksIEdGUF9BVE9NSUMpIG91 dHNpZGUgc3BpbmxvY2sgYW5kCiAgICB1c2UgR0ZQX0tFUk5FTCBpbnN0ZWFkLgoKdjY6IERyb3Ag dGhlIHN1cGVyZmx1b3VzIGNhbGxzLgoKU3VnZ2VzdGVkLWJ5OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jv c3NAc3VzZS5jb20+ClN1Z2dlc3RlZC1ieTogQm9yaXMgT3N0cm92c2t5IDxib3Jpcy5vc3Ryb3Zz a3lAb3JhY2xlLmNvbT4KU3VnZ2VzdGVkLWJ5OiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxs aW5pQGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IFdlbiBZYW5nIDx3ZW4ueWFuZzk5QHp0ZS5j b20uY24+CkFja2VkLWJ5OiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5v cmc+CkNDOiBKdWxpYSBMYXdhbGwgPGp1bGlhLmxhd2FsbEBsaXA2LmZyPgpDQzogQm9yaXMgT3N0 cm92c2t5IDxib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNvbT4KQ0M6IEp1ZXJnZW4gR3Jvc3MgPGpn cm9zc0BzdXNlLmNvbT4KQ0M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVs Lm9yZz4KQ0M6IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDQzogbGludXgta2VybmVs QHZnZXIua2VybmVsLm9yZwpTaWduZWQtb2ZmLWJ5OiBCb3JpcyBPc3Ryb3Zza3kgPGJvcmlzLm9z dHJvdnNreUBvcmFjbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBTYXNoYSBMZXZpbiA8c2FzaGFsQGtl cm5lbC5vcmc+Ci0tLQogZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jIHwgODEgKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDU5IGluc2VydGlv bnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3B2Y2FsbHMt ZnJvbnQuYyBiL2RyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYwppbmRleCAwMTU4ODU4MmFlNjYz Li42MzU3MTYwZDQ2NmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMK KysrIGIvZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jCkBAIC0zNDEsNiArMzQxLDM5IEBAIGlu dCBwdmNhbGxzX2Zyb250X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogCXJldHVybiByZXQ7 CiB9CiAKK3N0YXRpYyB2b2lkIGZyZWVfYWN0aXZlX3Jpbmcoc3RydWN0IHNvY2tfbWFwcGluZyAq bWFwKQoreworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpbWFwLT5hY3RpdmUuZGF0YS5pbiwK KwkJCW1hcC0+YWN0aXZlLnJpbmctPnJpbmdfb3JkZXIpOworCWZyZWVfcGFnZSgodW5zaWduZWQg bG9uZyltYXAtPmFjdGl2ZS5yaW5nKTsKK30KKworc3RhdGljIGludCBhbGxvY19hY3RpdmVfcmlu ZyhzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApCit7CisJdm9pZCAqYnl0ZXM7CisKKwltYXAtPmFj dGl2ZS5yaW5nID0gKHN0cnVjdCBwdmNhbGxzX2RhdGFfaW50ZiAqKQorCQlnZXRfemVyb2VkX3Bh Z2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXAtPmFjdGl2ZS5yaW5nKQorCQlnb3RvIG91dDsKKwor CW1hcC0+YWN0aXZlLnJpbmctPnJpbmdfb3JkZXIgPSBQVkNBTExTX1JJTkdfT1JERVI7CisJYnl0 ZXMgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sCisJ CQkJCVBWQ0FMTFNfUklOR19PUkRFUik7CisJaWYgKCFieXRlcykKKwkJZ290byBvdXQ7CisKKwlt YXAtPmFjdGl2ZS5kYXRhLmluID0gYnl0ZXM7CisJbWFwLT5hY3RpdmUuZGF0YS5vdXQgPSBieXRl cyArCisJCVhFTl9GTEVYX1JJTkdfU0laRShQVkNBTExTX1JJTkdfT1JERVIpOworCisJcmV0dXJu IDA7CisKK291dDoKKwlmcmVlX2FjdGl2ZV9yaW5nKG1hcCk7CisJcmV0dXJuIC1FTk9NRU07Cit9 CisKIHN0YXRpYyBpbnQgY3JlYXRlX2FjdGl2ZShzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAsIGlu dCAqZXZ0Y2huKQogewogCXZvaWQgKmJ5dGVzOwpAQCAtMzQ5LDE1ICszODIsNyBAQCBzdGF0aWMg aW50IGNyZWF0ZV9hY3RpdmUoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwLCBpbnQgKmV2dGNobikK IAkqZXZ0Y2huID0gLTE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbWFwLT5hY3RpdmUuaW5mbGln aHRfY29ubl9yZXEpOwogCi0JbWFwLT5hY3RpdmUucmluZyA9IChzdHJ1Y3QgcHZjYWxsc19kYXRh X2ludGYgKikKLQkJX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQlp ZiAobWFwLT5hY3RpdmUucmluZyA9PSBOVUxMKQotCQlnb3RvIG91dF9lcnJvcjsKLQltYXAtPmFj dGl2ZS5yaW5nLT5yaW5nX29yZGVyID0gUFZDQUxMU19SSU5HX09SREVSOwotCWJ5dGVzID0gKHZv aWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLAotCQkJCQlQVkNB TExTX1JJTkdfT1JERVIpOwotCWlmIChieXRlcyA9PSBOVUxMKQotCQlnb3RvIG91dF9lcnJvcjsK KwlieXRlcyA9IG1hcC0+YWN0aXZlLmRhdGEuaW47CiAJZm9yIChpID0gMDsgaSA8ICgxIDw8IFBW Q0FMTFNfUklOR19PUkRFUik7IGkrKykKIAkJbWFwLT5hY3RpdmUucmluZy0+cmVmW2ldID0gZ250 dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzKAogCQkJcHZjYWxsc19mcm9udF9kZXYtPm90aGVyZW5k X2lkLApAQCAtMzY3LDEwICszOTIsNiBAQCBzdGF0aWMgaW50IGNyZWF0ZV9hY3RpdmUoc3RydWN0 IHNvY2tfbWFwcGluZyAqbWFwLCBpbnQgKmV2dGNobikKIAkJcHZjYWxsc19mcm9udF9kZXYtPm90 aGVyZW5kX2lkLAogCQlwZm5fdG9fZ2ZuKHZpcnRfdG9fcGZuKCh2b2lkICopbWFwLT5hY3RpdmUu cmluZykpLCAwKTsKIAotCW1hcC0+YWN0aXZlLmRhdGEuaW4gPSBieXRlczsKLQltYXAtPmFjdGl2 ZS5kYXRhLm91dCA9IGJ5dGVzICsKLQkJWEVOX0ZMRVhfUklOR19TSVpFKFBWQ0FMTFNfUklOR19P UkRFUik7Ci0KIAlyZXQgPSB4ZW5idXNfYWxsb2NfZXZ0Y2huKHB2Y2FsbHNfZnJvbnRfZGV2LCBl dnRjaG4pOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2Vycm9yOwpAQCAtMzkxLDggKzQxMiw2IEBA IHN0YXRpYyBpbnQgY3JlYXRlX2FjdGl2ZShzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAsIGludCAq ZXZ0Y2huKQogb3V0X2Vycm9yOgogCWlmICgqZXZ0Y2huID49IDApCiAJCXhlbmJ1c19mcmVlX2V2 dGNobihwdmNhbGxzX2Zyb250X2RldiwgKmV2dGNobik7Ci0JZnJlZV9wYWdlcygodW5zaWduZWQg bG9uZyltYXAtPmFjdGl2ZS5kYXRhLmluLCBQVkNBTExTX1JJTkdfT1JERVIpOwotCWZyZWVfcGFn ZSgodW5zaWduZWQgbG9uZyltYXAtPmFjdGl2ZS5yaW5nKTsKIAlyZXR1cm4gcmV0OwogfQogCkBA IC00MTIsMTcgKzQzMSwyNCBAQCBpbnQgcHZjYWxsc19mcm9udF9jb25uZWN0KHN0cnVjdCBzb2Nr ZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKIAkJcmV0dXJuIFBUUl9FUlIobWFwKTsK IAogCWJlZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmcHZjYWxsc19mcm9udF9kZXYtPmRldik7CisJ cmV0ID0gYWxsb2NfYWN0aXZlX3JpbmcobWFwKTsKKwlpZiAocmV0IDwgMCkgeworCQlwdmNhbGxz X2V4aXRfc29jayhzb2NrKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlzcGluX2xvY2soJmJlZGF0 YS0+c29ja2V0X2xvY2spOwogCXJldCA9IGdldF9yZXF1ZXN0KGJlZGF0YSwgJnJlcV9pZCk7CiAJ aWYgKHJldCA8IDApIHsKIAkJc3Bpbl91bmxvY2soJmJlZGF0YS0+c29ja2V0X2xvY2spOworCQlm cmVlX2FjdGl2ZV9yaW5nKG1hcCk7CiAJCXB2Y2FsbHNfZXhpdF9zb2NrKHNvY2spOwogCQlyZXR1 cm4gcmV0OwogCX0KIAlyZXQgPSBjcmVhdGVfYWN0aXZlKG1hcCwgJmV2dGNobik7CiAJaWYgKHJl dCA8IDApIHsKIAkJc3Bpbl91bmxvY2soJmJlZGF0YS0+c29ja2V0X2xvY2spOworCQlmcmVlX2Fj dGl2ZV9yaW5nKG1hcCk7CiAJCXB2Y2FsbHNfZXhpdF9zb2NrKHNvY2spOwogCQlyZXR1cm4gcmV0 OwogCX0KQEAgLTc4NCwyNSArODEwLDM2IEBAIGludCBwdmNhbGxzX2Zyb250X2FjY2VwdChzdHJ1 Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBpbnQgZmxhZ3MpCiAJCX0K IAl9CiAKLQlzcGluX2xvY2soJmJlZGF0YS0+c29ja2V0X2xvY2spOwotCXJldCA9IGdldF9yZXF1 ZXN0KGJlZGF0YSwgJnJlcV9pZCk7Ci0JaWYgKHJldCA8IDApIHsKKwltYXAyID0ga3phbGxvYyhz aXplb2YoKm1hcDIpLCBHRlBfS0VSTkVMKTsKKwlpZiAobWFwMiA9PSBOVUxMKSB7CiAJCWNsZWFy X2JpdChQVkNBTExTX0ZMQUdfQUNDRVBUX0lORkxJR0hULAogCQkJICAodm9pZCAqKSZtYXAtPnBh c3NpdmUuZmxhZ3MpOwotCQlzcGluX3VubG9jaygmYmVkYXRhLT5zb2NrZXRfbG9jayk7CisJCXB2 Y2FsbHNfZXhpdF9zb2NrKHNvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0ID0gYWxs b2NfYWN0aXZlX3JpbmcobWFwMik7CisJaWYgKHJldCA8IDApIHsKKwkJY2xlYXJfYml0KFBWQ0FM TFNfRkxBR19BQ0NFUFRfSU5GTElHSFQsCisJCQkJKHZvaWQgKikmbWFwLT5wYXNzaXZlLmZsYWdz KTsKKwkJa2ZyZWUobWFwMik7CiAJCXB2Y2FsbHNfZXhpdF9zb2NrKHNvY2spOwogCQlyZXR1cm4g cmV0OwogCX0KLQltYXAyID0ga3phbGxvYyhzaXplb2YoKm1hcDIpLCBHRlBfQVRPTUlDKTsKLQlp ZiAobWFwMiA9PSBOVUxMKSB7CisJc3Bpbl9sb2NrKCZiZWRhdGEtPnNvY2tldF9sb2NrKTsKKwly ZXQgPSBnZXRfcmVxdWVzdChiZWRhdGEsICZyZXFfaWQpOworCWlmIChyZXQgPCAwKSB7CiAJCWNs ZWFyX2JpdChQVkNBTExTX0ZMQUdfQUNDRVBUX0lORkxJR0hULAogCQkJICAodm9pZCAqKSZtYXAt PnBhc3NpdmUuZmxhZ3MpOwogCQlzcGluX3VubG9jaygmYmVkYXRhLT5zb2NrZXRfbG9jayk7CisJ CWZyZWVfYWN0aXZlX3JpbmcobWFwMik7CisJCWtmcmVlKG1hcDIpOwogCQlwdmNhbGxzX2V4aXRf c29jayhzb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiByZXQ7CiAJfQorCiAJcmV0 ID0gY3JlYXRlX2FjdGl2ZShtYXAyLCAmZXZ0Y2huKTsKIAlpZiAocmV0IDwgMCkgeworCQlmcmVl X2FjdGl2ZV9yaW5nKG1hcDIpOwogCQlrZnJlZShtYXAyKTsKIAkJY2xlYXJfYml0KFBWQ0FMTFNf RkxBR19BQ0NFUFRfSU5GTElHSFQsCiAJCQkgICh2b2lkICopJm1hcC0+cGFzc2l2ZS5mbGFncyk7 Ci0tIAoyLjE5LjEKCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2 ZWw= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4542CC43381 for ; Mon, 25 Feb 2019 21:53:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 046232083D for ; Mon, 25 Feb 2019 21:53:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551131596; bh=YMvjJYjmw8KJ4urTUPkhKP9hLsZZLnNed8nueKkach0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=xagIOLIarvVhqanyQTRQQVM5cSUXZHkP39tV/igkZwOE4+AC8m0JZcyidQlw1qYy1 xJLeiDLC4KtHBtm8RPtM0n5GpG1WvltbkcV11WQSW5nIzdXto6L0p5K6J3lopeRouD KpZ8FQanOu+pyHzAvET/gibNscb7PGlCxmyadndI= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730895AbfBYVWe (ORCPT ); Mon, 25 Feb 2019 16:22:34 -0500 Received: from mail.kernel.org ([198.145.29.99]:56668 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729916AbfBYVWa (ORCPT ); Mon, 25 Feb 2019 16:22:30 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C6E44217F4; Mon, 25 Feb 2019 21:22:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551129749; bh=YMvjJYjmw8KJ4urTUPkhKP9hLsZZLnNed8nueKkach0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=THOtZJYjYt/CabAJmT2JIoDGslz3gUtL4vI+pxlHHIDuVXpcSN9x+5MURprTZkN4A m7xsV0o+2Mx+2+WanqgD6SGSnxh6ZtEQV17sMeOHvun7/jVAgrYSVefg6ORx5Qtf3B jEUdcR0kXHD9mQVpD8YRGDjmxcqVGRuHHjKAULqw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Juergen Gross , Boris Ostrovsky , Stefano Stabellini , Wen Yang , Julia Lawall , xen-devel@lists.xenproject.org, Sasha Levin Subject: [PATCH 4.19 054/152] pvcalls-front: Avoid get_free_pages(GFP_KERNEL) under spinlock Date: Mon, 25 Feb 2019 22:10:46 +0100 Message-Id: <20190225195047.304306206@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190225195043.645958524@linuxfoundation.org> References: <20190225195043.645958524@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 9f51c05dc41a6d69423e3d03d18eb7ab22f9ec19 ] The problem is that we call this with a spin lock held. The call tree is: pvcalls_front_accept() holds bedata->socket_lock. -> create_active() -> __get_free_pages() uses GFP_KERNEL The create_active() function is only called from pvcalls_front_accept() with a spin_lock held, The allocation is not allowed to sleep and GFP_KERNEL is not sufficient. This issue was detected by using the Coccinelle software. v2: Add a function doing the allocations which is called outside the lock and passing the allocated data to create_active(). v3: Use the matching deallocators i.e., free_page() and free_pages(), respectively. v4: It would be better to pre-populate map (struct sock_mapping), rather than introducing one more new struct. v5: Since allocating the data outside of this call it should also be freed outside, when create_active() fails. Move kzalloc(sizeof(*map2), GFP_ATOMIC) outside spinlock and use GFP_KERNEL instead. v6: Drop the superfluous calls. Suggested-by: Juergen Gross Suggested-by: Boris Ostrovsky Suggested-by: Stefano Stabellini Signed-off-by: Wen Yang Acked-by: Stefano Stabellini CC: Julia Lawall CC: Boris Ostrovsky CC: Juergen Gross CC: Stefano Stabellini CC: xen-devel@lists.xenproject.org CC: linux-kernel@vger.kernel.org Signed-off-by: Boris Ostrovsky Signed-off-by: Sasha Levin --- drivers/xen/pvcalls-front.c | 81 +++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 22 deletions(-) diff --git a/drivers/xen/pvcalls-front.c b/drivers/xen/pvcalls-front.c index 01588582ae663..6357160d466ab 100644 --- a/drivers/xen/pvcalls-front.c +++ b/drivers/xen/pvcalls-front.c @@ -341,6 +341,39 @@ int pvcalls_front_socket(struct socket *sock) return ret; } +static void free_active_ring(struct sock_mapping *map) +{ + free_pages((unsigned long)map->active.data.in, + map->active.ring->ring_order); + free_page((unsigned long)map->active.ring); +} + +static int alloc_active_ring(struct sock_mapping *map) +{ + void *bytes; + + map->active.ring = (struct pvcalls_data_intf *) + get_zeroed_page(GFP_KERNEL); + if (!map->active.ring) + goto out; + + map->active.ring->ring_order = PVCALLS_RING_ORDER; + bytes = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, + PVCALLS_RING_ORDER); + if (!bytes) + goto out; + + map->active.data.in = bytes; + map->active.data.out = bytes + + XEN_FLEX_RING_SIZE(PVCALLS_RING_ORDER); + + return 0; + +out: + free_active_ring(map); + return -ENOMEM; +} + static int create_active(struct sock_mapping *map, int *evtchn) { void *bytes; @@ -349,15 +382,7 @@ static int create_active(struct sock_mapping *map, int *evtchn) *evtchn = -1; init_waitqueue_head(&map->active.inflight_conn_req); - map->active.ring = (struct pvcalls_data_intf *) - __get_free_page(GFP_KERNEL | __GFP_ZERO); - if (map->active.ring == NULL) - goto out_error; - map->active.ring->ring_order = PVCALLS_RING_ORDER; - bytes = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, - PVCALLS_RING_ORDER); - if (bytes == NULL) - goto out_error; + bytes = map->active.data.in; for (i = 0; i < (1 << PVCALLS_RING_ORDER); i++) map->active.ring->ref[i] = gnttab_grant_foreign_access( pvcalls_front_dev->otherend_id, @@ -367,10 +392,6 @@ static int create_active(struct sock_mapping *map, int *evtchn) pvcalls_front_dev->otherend_id, pfn_to_gfn(virt_to_pfn((void *)map->active.ring)), 0); - map->active.data.in = bytes; - map->active.data.out = bytes + - XEN_FLEX_RING_SIZE(PVCALLS_RING_ORDER); - ret = xenbus_alloc_evtchn(pvcalls_front_dev, evtchn); if (ret) goto out_error; @@ -391,8 +412,6 @@ static int create_active(struct sock_mapping *map, int *evtchn) out_error: if (*evtchn >= 0) xenbus_free_evtchn(pvcalls_front_dev, *evtchn); - free_pages((unsigned long)map->active.data.in, PVCALLS_RING_ORDER); - free_page((unsigned long)map->active.ring); return ret; } @@ -412,17 +431,24 @@ int pvcalls_front_connect(struct socket *sock, struct sockaddr *addr, return PTR_ERR(map); bedata = dev_get_drvdata(&pvcalls_front_dev->dev); + ret = alloc_active_ring(map); + if (ret < 0) { + pvcalls_exit_sock(sock); + return ret; + } spin_lock(&bedata->socket_lock); ret = get_request(bedata, &req_id); if (ret < 0) { spin_unlock(&bedata->socket_lock); + free_active_ring(map); pvcalls_exit_sock(sock); return ret; } ret = create_active(map, &evtchn); if (ret < 0) { spin_unlock(&bedata->socket_lock); + free_active_ring(map); pvcalls_exit_sock(sock); return ret; } @@ -784,25 +810,36 @@ int pvcalls_front_accept(struct socket *sock, struct socket *newsock, int flags) } } - spin_lock(&bedata->socket_lock); - ret = get_request(bedata, &req_id); - if (ret < 0) { + map2 = kzalloc(sizeof(*map2), GFP_KERNEL); + if (map2 == NULL) { clear_bit(PVCALLS_FLAG_ACCEPT_INFLIGHT, (void *)&map->passive.flags); - spin_unlock(&bedata->socket_lock); + pvcalls_exit_sock(sock); + return -ENOMEM; + } + ret = alloc_active_ring(map2); + if (ret < 0) { + clear_bit(PVCALLS_FLAG_ACCEPT_INFLIGHT, + (void *)&map->passive.flags); + kfree(map2); pvcalls_exit_sock(sock); return ret; } - map2 = kzalloc(sizeof(*map2), GFP_ATOMIC); - if (map2 == NULL) { + spin_lock(&bedata->socket_lock); + ret = get_request(bedata, &req_id); + if (ret < 0) { clear_bit(PVCALLS_FLAG_ACCEPT_INFLIGHT, (void *)&map->passive.flags); spin_unlock(&bedata->socket_lock); + free_active_ring(map2); + kfree(map2); pvcalls_exit_sock(sock); - return -ENOMEM; + return ret; } + ret = create_active(map2, &evtchn); if (ret < 0) { + free_active_ring(map2); kfree(map2); clear_bit(PVCALLS_FLAG_ACCEPT_INFLIGHT, (void *)&map->passive.flags); -- 2.19.1