From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754499AbbBKUmO (ORCPT ); Wed, 11 Feb 2015 15:42:14 -0500 Received: from mail-ig0-f181.google.com ([209.85.213.181]:38718 "EHLO mail-ig0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753497AbbBKUmL (ORCPT ); Wed, 11 Feb 2015 15:42:11 -0500 MIME-Version: 1.0 In-Reply-To: References: Date: Wed, 11 Feb 2015 12:42:10 -0800 X-Google-Sender-Auth: 14uH7shJQo_7ea87w0x-K3CjQIQ Message-ID: Subject: Re: smp_call_function_single lockups From: Linus Torvalds To: Rafael David Tinoco Cc: LKML , Thomas Gleixner , Jens Axboe , Frederic Weisbecker Content-Type: multipart/mixed; boundary=047d7b343c9c99b262050ed60983 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --047d7b343c9c99b262050ed60983 Content-Type: text/plain; charset=UTF-8 [ Added Frederic to the cc, since he's touched this file/area most ] On Wed, Feb 11, 2015 at 11:59 AM, Linus Torvalds wrote: > > So the caller has a really hard time guaranteeing that CSD_LOCK isn't > set. And if the call is done in interrupt context, for all we know it > is interrupting the code that is going to clear CSD_LOCK, so CSD_LOCK > will never be cleared at all, and csd_lock() will wait forever. > > So I actually think that for the async case, we really *should* unlock > before doing the callback (which is what Thomas' old patch did). > > And we migth well be better off doing something like > > WARN_ON_ONCE(csd->flags & CSD_LOCK); > > in smp_call_function_single_async(), because that really is a hard requirement. > > And it strikes me that hrtick_csd is one of these cases that do this > with interrupts disabled, and use the callback for serialization. So I > really wonder if this is part of the problem.. > > Thomas? Am I missing something? Ok, this is a more involved patch than I'd like, but making the *caller* do all the CSD maintenance actually cleans things up. And this is still completely untested, and may be entirely buggy. What do you guys think? Linus --047d7b343c9c99b262050ed60983 Content-Type: text/plain; charset=US-ASCII; name="patch.diff" Content-Disposition: attachment; filename="patch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i616ly7h0 IGtlcm5lbC9zbXAuYyB8IDc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQ3IGluc2VydGlvbnMoKyks IDMxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbXAuYyBiL2tlcm5lbC9zbXAu YwppbmRleCBmMzhhMWU2OTIyNTkuLjJhYWFjMmM0NzY4MyAxMDA2NDQKLS0tIGEva2VybmVsL3Nt cC5jCisrKyBiL2tlcm5lbC9zbXAuYwpAQCAtMTksNyArMTksNyBAQAogCiBlbnVtIHsKIAlDU0Rf RkxBR19MT0NLCQk9IDB4MDEsCi0JQ1NEX0ZMQUdfV0FJVAkJPSAweDAyLAorCUNTRF9GTEFHX1NZ TkNIUk9OT1VTCT0gMHgwMiwKIH07CiAKIHN0cnVjdCBjYWxsX2Z1bmN0aW9uX2RhdGEgewpAQCAt MTA3LDcgKzEwNyw3IEBAIHZvaWQgX19pbml0IGNhbGxfZnVuY3Rpb25faW5pdCh2b2lkKQogICov CiBzdGF0aWMgdm9pZCBjc2RfbG9ja193YWl0KHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjc2Qp CiB7Ci0Jd2hpbGUgKGNzZC0+ZmxhZ3MgJiBDU0RfRkxBR19MT0NLKQorCXdoaWxlIChzbXBfbG9h ZF9hY3F1aXJlKCZjc2QtPmZsYWdzKSAmIENTRF9GTEFHX0xPQ0spCiAJCWNwdV9yZWxheCgpOwog fQogCkBAIC0xMjEsMTkgKzEyMSwxNyBAQCBzdGF0aWMgdm9pZCBjc2RfbG9jayhzdHJ1Y3QgY2Fs bF9zaW5nbGVfZGF0YSAqY3NkKQogCSAqIHRvIC0+ZmxhZ3Mgd2l0aCBhbnkgc3Vic2VxdWVudCBh c3NpZ25tZW50cyB0byBvdGhlcgogCSAqIGZpZWxkcyBvZiB0aGUgc3BlY2lmaWVkIGNhbGxfc2lu Z2xlX2RhdGEgc3RydWN0dXJlOgogCSAqLwotCXNtcF9tYigpOworCXNtcF93bWIoKTsKIH0KIAog c3RhdGljIHZvaWQgY3NkX3VubG9jayhzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3NkKQogewot CVdBUk5fT04oKGNzZC0+ZmxhZ3MgJiBDU0RfRkxBR19XQUlUKSAmJiAhKGNzZC0+ZmxhZ3MgJiBD U0RfRkxBR19MT0NLKSk7CisJV0FSTl9PTighKGNzZC0+ZmxhZ3MgJiBDU0RfRkxBR19MT0NLKSk7 CiAKIAkvKgogCSAqIGVuc3VyZSB3ZSdyZSBhbGwgZG9uZSBiZWZvcmUgcmVsZWFzaW5nIGRhdGE6 CiAJICovCi0Jc21wX21iKCk7Ci0KLQljc2QtPmZsYWdzICY9IH5DU0RfRkxBR19MT0NLOworCXNt cF9zdG9yZV9yZWxlYXNlKCZjc2QtPmZsYWdzLCAwKTsKIH0KIAogc3RhdGljIERFRklORV9QRVJf Q1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhLCBjc2RfZGF0YSk7CkBA IC0xNDQsMTMgKzE0MiwxNiBAQCBzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQo c3RydWN0IGNhbGxfc2luZ2xlX2RhdGEsIGNzZF9kYXRhKTsKICAqIC0+ZnVuYywgLT5pbmZvLCBh bmQgLT5mbGFncyBzZXQuCiAgKi8KIHN0YXRpYyBpbnQgZ2VuZXJpY19leGVjX3NpbmdsZShpbnQg Y3B1LCBzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3NkLAotCQkJICAgICAgIHNtcF9jYWxsX2Z1 bmNfdCBmdW5jLCB2b2lkICppbmZvLCBpbnQgd2FpdCkKKwkJCSAgICAgICBzbXBfY2FsbF9mdW5j X3QgZnVuYywgdm9pZCAqaW5mbykKIHsKLQlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSBjc2Rfc3Rh Y2sgPSB7IC5mbGFncyA9IDAgfTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0KIAlpZiAoY3B1 ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCS8q CisJCSAqIFdlIGNhbiB1bmxvY2sgZWFybHkgZXZlbiBmb3IgdGhlIHN5bmNocm9ub3VzIG9uLXN0 YWNrIGNhc2UsCisJCSAqIHNpbmNlIHdlJ3JlIGRvaW5nIHRoaXMgZnJvbSB0aGUgc2FtZSBDUFUu LgorCQkgKi8KKwkJY3NkX3VubG9jayhjc2QpOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJ CWZ1bmMoaW5mbyk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTE2MSwyMSArMTYy LDkgQEAgc3RhdGljIGludCBnZW5lcmljX2V4ZWNfc2luZ2xlKGludCBjcHUsIHN0cnVjdCBjYWxs X3NpbmdsZV9kYXRhICpjc2QsCiAJaWYgKCh1bnNpZ25lZCljcHUgPj0gbnJfY3B1X2lkcyB8fCAh Y3B1X29ubGluZShjcHUpKQogCQlyZXR1cm4gLUVOWElPOwogCi0KLQlpZiAoIWNzZCkgewotCQlj c2QgPSAmY3NkX3N0YWNrOwotCQlpZiAoIXdhaXQpCi0JCQljc2QgPSB0aGlzX2NwdV9wdHIoJmNz ZF9kYXRhKTsKLQl9Ci0KLQljc2RfbG9jayhjc2QpOwotCiAJY3NkLT5mdW5jID0gZnVuYzsKIAlj c2QtPmluZm8gPSBpbmZvOwogCi0JaWYgKHdhaXQpCi0JCWNzZC0+ZmxhZ3MgfD0gQ1NEX0ZMQUdf V0FJVDsKLQogCS8qCiAJICogVGhlIGxpc3QgYWRkaXRpb24gc2hvdWxkIGJlIHZpc2libGUgYmVm b3JlIHNlbmRpbmcgdGhlIElQSQogCSAqIGhhbmRsZXIgbG9ja3MgdGhlIGxpc3QgdG8gcHVsbCB0 aGUgZW50cnkgb2ZmIGl0IGJlY2F1c2Ugb2YKQEAgLTE5MCw5ICsxNzksNiBAQCBzdGF0aWMgaW50 IGdlbmVyaWNfZXhlY19zaW5nbGUoaW50IGNwdSwgc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNz ZCwKIAlpZiAobGxpc3RfYWRkKCZjc2QtPmxsaXN0LCAmcGVyX2NwdShjYWxsX3NpbmdsZV9xdWV1 ZSwgY3B1KSkpCiAJCWFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoY3B1KTsKIAot CWlmICh3YWl0KQotCQljc2RfbG9ja193YWl0KGNzZCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAt MjUwLDggKzIzNiwxNyBAQCBzdGF0aWMgdm9pZCBmbHVzaF9zbXBfY2FsbF9mdW5jdGlvbl9xdWV1 ZShib29sIHdhcm5fY3B1X29mZmxpbmUpCiAJfQogCiAJbGxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZShjc2QsIGNzZF9uZXh0LCBlbnRyeSwgbGxpc3QpIHsKLQkJY3NkLT5mdW5jKGNzZC0+aW5mbyk7 Ci0JCWNzZF91bmxvY2soY3NkKTsKKwkJc21wX2NhbGxfZnVuY190IGZ1bmMgPSBjc2QtPmZ1bmM7 CisJCXZvaWQgKmluZm8gPSBjc2QtPmluZm87CisKKwkJLyogRG8gd2Ugd2FpdCB1bnRpbCAqYWZ0 ZXIqIGNhbGxiYWNrPyAqLworCQlpZiAoY3NkLT5mbGFncyAmIENTRF9GTEFHX1NZTkNIUk9OT1VT KSB7CisJCQlmdW5jKGluZm8pOworCQkJY3NkX3VubG9jayhjc2QpOworCQl9IGVsc2UgeworCQkJ Y3NkX3VubG9jayhjc2QpOworCQkJZnVuYyhpbmZvKTsKKwkJfQogCX0KIAogCS8qCkBAIC0yNzQs NiArMjY5LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfc21wX2NhbGxfZnVuY3Rpb25fcXVldWUoYm9v bCB3YXJuX2NwdV9vZmZsaW5lKQogaW50IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbnQgY3B1 LCBzbXBfY2FsbF9mdW5jX3QgZnVuYywgdm9pZCAqaW5mbywKIAkJCSAgICAgaW50IHdhaXQpCiB7 CisJc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNzZDsKKwlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0 YSBjc2Rfc3RhY2sgPSB7IC5mbGFncyA9IENTRF9GTEFHX0xPQ0sgfCBDU0RfRkxBR19TWU5DSFJP Tk9VUyB9OwogCWludCB0aGlzX2NwdTsKIAlpbnQgZXJyOwogCkBAIC0yOTIsNyArMjg5LDE2IEBA IGludCBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaW50IGNwdSwgc21wX2NhbGxfZnVuY190IGZ1 bmMsIHZvaWQgKmluZm8sCiAJV0FSTl9PTl9PTkNFKGNwdV9vbmxpbmUodGhpc19jcHUpICYmIGly cXNfZGlzYWJsZWQoKQogCQkgICAgICYmICFvb3BzX2luX3Byb2dyZXNzKTsKIAotCWVyciA9IGdl bmVyaWNfZXhlY19zaW5nbGUoY3B1LCBOVUxMLCBmdW5jLCBpbmZvLCB3YWl0KTsKKwljc2QgPSAm Y3NkX3N0YWNrOworCWlmICghd2FpdCkgeworCQljc2QgPSB0aGlzX2NwdV9wdHIoJmNzZF9kYXRh KTsKKwkJY3NkX2xvY2soY3NkKTsKKwl9CisKKwllcnIgPSBnZW5lcmljX2V4ZWNfc2luZ2xlKGNw dSwgY3NkLCBmdW5jLCBpbmZvKTsKKworCWlmICh3YWl0KQorCQljc2RfbG9ja193YWl0KGNzZCk7 CiAKIAlwdXRfY3B1KCk7CiAKQEAgLTMyMSw3ICszMjcsMTUgQEAgaW50IHNtcF9jYWxsX2Z1bmN0 aW9uX3NpbmdsZV9hc3luYyhpbnQgY3B1LCBzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3NkKQog CWludCBlcnIgPSAwOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JZXJyID0gZ2VuZXJpY19leGVj X3NpbmdsZShjcHUsIGNzZCwgY3NkLT5mdW5jLCBjc2QtPmluZm8sIDApOworCisJLyogV2UgY291 bGQgZGVhZGxvY2sgaWYgd2UgaGF2ZSB0byB3YWl0IGhlcmUgd2l0aCBpbnRlcnJ1cHRzIGRpc2Fi bGVkISAqLworCWlmIChXQVJOX09OX09OQ0UoY3NkLT5mbGFncyAmIENTRF9GTEFHX0xPQ0spKQor CQljc2RfbG9ja193YWl0KGNzZCk7CisKKwljc2QtPmZsYWdzID0gQ1NEX0ZMQUdfTE9DSzsKKwlz bXBfd21iKCk7CisKKwllcnIgPSBnZW5lcmljX2V4ZWNfc2luZ2xlKGNwdSwgY3NkLCBjc2QtPmZ1 bmMsIGNzZC0+aW5mbyk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIAogCXJldHVybiBlcnI7CkBAIC00 MzMsNiArNDQ3LDggQEAgdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9tYW55KGNvbnN0IHN0cnVjdCBj cHVtYXNrICptYXNrLAogCQlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3NkID0gcGVyX2NwdV9w dHIoY2ZkLT5jc2QsIGNwdSk7CiAKIAkJY3NkX2xvY2soY3NkKTsKKwkJaWYgKHdhaXQpCisJCQlj c2QtPmZsYWdzIHw9IENTRF9GTEFHX1NZTkNIUk9OT1VTOwogCQljc2QtPmZ1bmMgPSBmdW5jOwog CQljc2QtPmluZm8gPSBpbmZvOwogCQlsbGlzdF9hZGQoJmNzZC0+bGxpc3QsICZwZXJfY3B1KGNh bGxfc2luZ2xlX3F1ZXVlLCBjcHUpKTsK --047d7b343c9c99b262050ed60983--