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=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED 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 DB0C6C282DD for ; Fri, 24 May 2019 03:16:24 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AE850217D9 for ; Fri, 24 May 2019 03:16:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="k6aWcK8D"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="Yx6m/VB2"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="ipYr7kWr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AE850217D9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Message-ID:Subject:To:From:Date:MIME-Version: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=BLbAuanGhOK36qJw9LR/jokFGmqfM6Nzey7t+mx0cq8=; b=k6aWcK8DBO0Cl+IGjC30TK0Rqq PQYoEkAtKDiTI105kBMk4309WWtjpAYsNCvFHWNDmMqdKLohzHMTw7L22sFj/9WZL9SZkYu7k0Sok AP0vlKekNFdgSUl8bEOiTGK0VWkcsstnroG4obd2Z4mBHhfV6honQIUl2oB0rtGEdnZWnH4C55/IM zBV97W/hEUmraZ17tptRNew5TBIZgz24AWVP/Nq5EG41LMYDvgaucR4kY/THFZq1T0duc8UMaCSw8 bMezJjNw/uxd1/O3Qbk0V9HUh3BPHdBfZRTgw6aXVnyc0AN6aCq5w/2JMk+VUQa795S8RxXnwdk3l ZJ5XnLSQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hU0gw-0002Th-8L; Fri, 24 May 2019 03:16:22 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hU0gs-0002TL-N4 for linux-arm-kernel@lists.infradead.org; Fri, 24 May 2019 03:16:20 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id AEFED6087A; Fri, 24 May 2019 03:16:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1558667777; bh=UfUOkq1yueIuFHRCYwReJukg9DnuYytlPgBSWsYteYI=; h=Date:From:To:Cc:Subject:From; b=Yx6m/VB2KcpMl2a85QuiJUCONQ5dv/ZK0PkE2IXk/NglQdiAslKZCIlbBB8CtAAAN 0Sz8KHOHQi658aI+qT+MYSM6Fm22LFnDTL7OS2th6i2ZQiXyx5MXPWIKAXFP3Rp97c yiS/QA5W4P6lXfXeHRl/kMjgB3EIR4AFb+hg3vFY= Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.codeaurora.org (Postfix) with ESMTP id 7ED2C602F8; Fri, 24 May 2019 03:16:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1558667776; bh=UfUOkq1yueIuFHRCYwReJukg9DnuYytlPgBSWsYteYI=; h=Date:From:To:Cc:Subject:From; b=ipYr7kWrhDYzMDqvpORoOVR37GGSUGG5J1iH61s8hM2Kbbc8Fb+oJQy6zdPy6/D7G zc7T4QauzYvsCK9YTxkIqwqyJn9UED08wp2wBL4mNpb7pTuObCfc3WMYv9eryfZIq7 3+7vxYy9KpPgGRNca09vcC4TjXbzWbxlh8Y79k7Y= MIME-Version: 1.0 Date: Fri, 24 May 2019 11:16:16 +0800 From: tengfeif@codeaurora.org To: Anshuman Khandual Subject: [PATCH] arm64: break while loop if task had been rescheduled Message-ID: <52076172bb8a55305846f6d4dc97bb52@codeaurora.org> X-Sender: tengfeif@codeaurora.org User-Agent: Roundcube Webmail/1.2.5 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190523_201618_786981_88A51BE9 X-CRM114-Status: GOOD ( 19.09 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.rutland@arm.com, tengfei@codeaurora.org, marc.zyngier@arm.com, catalin.marinas@arm.com, will.deacon@arm.com, linux-kernel@vger.kernel.org, andreyknvl@google.com, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org V2hlbiB0YXNrIGlzbid0IGN1cnJlbnQgdGFzaywgdGhpcyB0YXNrJ3Mgc3RhdGUgaGF2ZQpjaGFu Y2UgdG8gYmUgY2hhbmdlZCBkdXJpbmcgcHJpbnRpbmcgdGhpcyB0YXNrJ3MKYmFja3RyYWNlLCBz byBpdCBpcyBwb3NzaWJsZSB0aGF0IHRhc2sncyBmcCBhbmQgZnArOApoYXZlIHRoZSBzYW1lIHZh dWxlLCBzbyBjYW5ub3QgYnJlYWsgdGhlIHdoaWxlIGxvb3AuClRvIGZpeCB0aGlzIGlzc3VlLCB3 ZSBmaXJzdCBzYXZlIHRoZSB0YXNrJ3Mgc3RhdGUsIHNwCmFuZCBmcCwgdGhlbiB3ZSB3aWxsIGdl dCB0aGUgdGFzaydzIGN1cnJlbnQgc3RhdGUsIHNwCmFuZCBmcCBpbiBlYWNoIHdoaWxlIGFnYWlu LiB3ZSB3aWxsIHN0b3AgdG8gcHJpbnQKYmFja3RyYWNlIGlmIHdlIGZvdW5kIGFueSBvZiB0aGUg dmFsdWVzIGFyZSBkaWZmZXJlbnQKdGhhbiB3aGF0IHdlIHNhdmVkLgoKLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqYW5zd2VyIApxdWVzdGlvbioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovClRoaXMgaXMgdmVyeSBjb25mdXNpbmcuIElJVUMgaXQgc3VnZ2VzdHMgdGhh dCB3aGlsZSBwcmludGluZwp0aGUgYmFja3RyYWNlIGZvciBub24tY3VycmVudCB0YXNrcyB0aGUg ZG8vd2hpbGUgbG9vcCBkb2VzIG5vdApleGl0IGJlY2F1c2UgZnAgYW5kIGZwKzggbWlnaHQgaGF2 ZSB0aGUgc2FtZSB2YWx1ZSA/IFdoZW4gd291bGQKdGhpcyBoYXBwZW4gPyBFdmVuIGluIHRoYXQg Y2FzZSB0aGUgY29tbWl0IG1lc3NhZ2UgaGVyZSBkb2VzIG5vdApwcm9wZXJseSBtYXRjaCB0aGUg Y2hhbmdlIGluIHRoaXMgcGF0Y2guCgpJbiBvdXIgaXNzdWUsIHdlIGdvdCBmcD1wYz0weEZGRkZG RjgwMjVBMTNCQTAsIHNvIGNhbm5vdCBleGl0IHdoaWxlCmxvb3AgaW4gZHVtcF9iYXNrdHJhY2Uo KS4KQWZ0ZXIgYW5hbHl6ZSBvdXIgaXNzdWUncyBkdW1wLCB3ZSBmb3VuZCBvbmUgdGFzayhzdWNo IGFzOiB0YXNrIEEpCmlzIGV4aXRpbmcgdmlhIGludm9rZSBkb19leGl0KCkgZHVyaW5nIGFub3Ro ZXIgdGFzayBpcyBzaG93aW5nIHRhc2sKQSdzIGR1bXB0YXNrLiBJbiBrZXJuZWwgY29kZSwgZG9f ZXhpdCgpIGFuZCBleGl0X25vdGlmeSBhcmUgZGVmaW5lZAphcyBmb2xsb3dzOgp2b2lkIG5vcmV0 dXJuIGRvX2V4aXQobG9uZyBjb2RlKQp7CiAgICAgIC4uLi4uLgogICAgICBleGl0X25vdGlmeSh0 c2ssIGdyb3VwX2RlYWQpOwogICAgICAuLi4uLi4KfQpzdGF0aWMgdm9pZCBleGl0X25vdGlmeShz dHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGdyb3VwX2RlYWQpCnsKICAgICAgLi4uLi4uCn0K QmVjYXVzZSBvZiBleGl0X25vdGlmeSgpIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyBpdCBpcyBp bmxpbmVkIHRvCmRvX2V4aXQoKSB3aGVuIGNvbXBpbGUga2VybmVsLCBzbyB3ZSBjYW4gZ2V0IHBh cnRpYWwgYXNzZW1ibHkgY29kZQpvZiBkb19leGl0KCkgYXMgZm9sbG93czoK4oCm4oCmCnsKICAg ICAgICAgYm9vbCBhdXRvcmVhcDsKICAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsK ICAgICAgICAgTElTVF9IRUFEKGRlYWQpOwoKICAgICAgICAgd3JpdGVfbG9ja19pcnEoJnRhc2ts aXN0X2xvY2spOwogICAgICBjMTA6ICAgICAgIDkwMDAwMDAwICAgICAgICBhZHJwICAgIHgwLCAw IDx0YXNrbGlzdF9sb2NrPgogICAgICBjMTQ6ICAgICAgIDkxMDAwM2U4ICAgICAgICBtb3YgICAg IHg4LCBzcAogICAgICBjMTg6ICAgICAgIDkxMDAwMDAwICAgICAgICBhZGQgICAgIHgwLCB4MCwg IzB4MAoqLwpzdGF0aWMgdm9pZCBleGl0X25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywg aW50IGdyb3VwX2RlYWQpCnsKICAgICAgICAgYm9vbCBhdXRvcmVhcDsKICAgICAgICAgc3RydWN0 IHRhc2tfc3RydWN0ICpwLCAqbjsKICAgICAgICAgTElTVF9IRUFEKGRlYWQpOwogICAgICBjMWM6 ICAgICAgIGE5MDAyM2U4ICAgICAgICBzdHAgICAgIHg4LCB4OCwgW3NwXQoKICAgICAgICAgd3Jp dGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogICAgICBjMjA6ICAgICAgIDk0MDAwMDAwICAg ICAgICBibCAgICAgIDAgPF9yYXdfd3JpdGVfbG9ja19pcnE+CiAgICAgIGMyNDogICAgICAgZjk0 MzUyNjggICAgICAgIGxkciAgICAgeDgsIFt4MTksIzE2OTZdCuKApuKApgogRnJvbSB0aGUgY29k ZSAiYzE0OiIgYW5kICJjMWM6Iiwgd2Ugd2lsbCBmaW5kIHNwJ3MgYWRkciB2YWx1ZSBpcyBzdG9y ZWQKaW4gc3AgYW5kIHNwKzgsIHNvIHNwJ3MgdmF1bGUgZXF1YWwgKHNwKzgpJ3MgdmFsdWUuCklu IG91ciBpc3N1ZSwgdGhlcmUgaXMgYSBjaGFuY2Ugb2YgZnAgcG9pbnQgc3AsIHNvIHRoZXJlIHdp bGwgYmUgCmZwPXBjPWZwJ3MKYWRkciB2YWx1ZSxzbyBjb2RlIGNhbm5vdCBicmVhayBmcm9tIHdo aWxlIGxvb3AgaW4gZHVtcF9iYWNrdHJhY2UoKS4KCi8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKmFuc3dlciAKcXVlc3Rpb24qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqYW5zd2VyIApxdWVzdGlvbioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovClRoaXMgcGF0Y2ggdHJpZXMgdG8gc3RvcCBw cmludGluZyB0aGUgc3RhY2sgZm9yIG5vbi1jdXJyZW50IHRhc2tzCmlmIHRoZWlyIHN0YXRlIGNo YW5nZSB3aGlsZSB0aGVyZSBpcyBvbmUgZHVtcF9iYWNrdHJhY2UoKSB0cnlpbmcKdG8gcHJpbnQg YmFjayB0cmFjZS4gRG9udCB3ZSBoYXZlIGFueSBsb2NrIHByZXZlbnRpbmcgYSB0YXNrIGluCnRo aXMgc2l0dWF0aW9uICh3aGlsZSBkdW1waW5nIGl0J3MgYmFja3RyYWNlKSBmcm9tIHJ1bm5pbmcg YWdhaW4Kb3IgY2hhbmdpbmcgc3RhdGUuCkkgaGF2ZW4ndCBmb3VuZCBhbnkgbG9jayBwcmV2ZW50 aW5nIGEgdGFzayBpbiB0aGlzIHNpdHVhdGlvbiwgYW5kIEkgCnRoaW5rIHdlIHNob3VsZG4ndApw cmV2ZW50IHRhc2sgcnVubmluZyBpZiB0aGlzIHRhc2sgaXMgc2NoZWR1bGVkLgovKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiphbnN3ZXIgCnF1ZXN0aW9uKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KClNpZ25lZC1vZmYtYnk6IFRlbmdmZWkgRmFuIDx0ZW5nZmVpZkBj b2RlYXVyb3JhLm9yZz4KLS0tCiAgYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYyB8IDIzICsrKysr KysrKysrKysrKysrKysrKysrCiAgMSBmaWxlIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKykKCmRp ZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm02NC9rZXJuZWwv dHJhcHMuYwppbmRleCAyOTc1NTk4Li45ZGY2ZTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tl cm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMKQEAgLTEwMyw2ICsx MDMsOSBAQCB2b2lkIGR1bXBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qg CnRhc2tfc3RydWN0ICp0c2spCiAgewogICAgICBzdHJ1Y3Qgc3RhY2tmcmFtZSBmcmFtZTsKICAg ICAgaW50IHNraXAgPSAwOworICAgIGxvbmcgY3VyX3N0YXRlID0gMDsKKyAgICB1bnNpZ25lZCBs b25nIGN1cl9zcCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBjdXJfZnAgPSAwOwoKICAgICAgcHJf ZGVidWcoIiVzKHJlZ3MgPSAlcCB0c2sgPSAlcClcbiIsIF9fZnVuY19fLCByZWdzLCB0c2spOwoK QEAgLTEyNyw2ICsxMzAsOSBAQCB2b2lkIGR1bXBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpy ZWdzLCBzdHJ1Y3QgCnRhc2tfc3RydWN0ICp0c2spCiAgICAgICAgICAgKi8KICAgICAgICAgIGZy YW1lLmZwID0gdGhyZWFkX3NhdmVkX2ZwKHRzayk7CiAgICAgICAgICBmcmFtZS5wYyA9IHRocmVh ZF9zYXZlZF9wYyh0c2spOworICAgICAgICBjdXJfc3RhdGUgPSB0c2stPnN0YXRlOworICAgICAg ICBjdXJfc3AgPSB0aHJlYWRfc2F2ZWRfc3AodHNrKTsKKyAgICAgICAgY3VyX2ZwID0gZnJhbWUu ZnA7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiphbnN3ZXIgCnF1ZXN0aW9uKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KU2hvdWxkICdzYXZlZF9zdGF0ZXxzcHxm cCcgaW5zdGVhZCBhcyBpdHMgYXBwbGljYWJsZSB0byBub24tY3VycmVudAp0YXNrcyBvbmx5Lgon c2F2ZWRfc3RhdGV8c3B8ZnAnIG9ubHkgYXBwbGllcyB0byBub24tY3VycmVudCB0YXNrcy4KCi8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKmFuc3dlciAKcXVlc3Rpb24qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwoKICAgICAgfQogICNpZmRlZiBDT05GSUdfRlVOQ1RJ T05fR1JBUEhfVFJBQ0VSCiAgICAgIGZyYW1lLmdyYXBoID0gMDsKQEAgLTEzNCw2ICsxNDAsMjMg QEAgdm9pZCBkdW1wX2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IAp0YXNr X3N0cnVjdCAqdHNrKQoKICAgICAgcHJpbnRrKCJDYWxsIHRyYWNlOlxuIik7CiAgICAgIGRvIHsK KyAgICAgICAgaWYgKHRzayAhPSBjdXJyZW50ICYmIChjdXJfc3RhdGUgIT0gdHNrLT5zdGF0ZQor ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFdlIHdvdWxkIG5vdCBiZSBwcmludGluZyBi YWNrdHJhY2UgZm9yIHRoZSB0YXNrCisgICAgICAgICAgICAgKiB0aGF0IGhhcyBjaGFuZ2VkIHN0 YXRlIGZyb20gInNhdmVkIiBzdGF0ZSB0byBvaHRlcgorICAgICAgICAgICAgICogc3RhdGUgYmVm b3JlIGhpdHRpbmcgdGhlIGRvLXdoaWxlIGxvb3AgYnV0IGFmdGVyCisgICAgICAgICAgICAgKiBz YXZpbmcgdGhlIGN1cnJlbnQgc3RhdGUuIElmIHRhc2sncyBjdXJyZW50IHN0YXRlCisgICAgICAg ICAgICAgKiBub3QgZXF1YWwgdGhlICJzYXZlZCIgc3RhdGUsIHRoZW4gd2UgbWF5IHByaW50Cisg ICAgICAgICAgICAgKiB3cm9uZyBjYWxsIHRyYWNlIG9yIGVuZCB1cCBpbiBpbmZpbml0ZSB3aGls ZSBsb29wCisgICAgICAgICAgICAgKiBpZiAqKGZwKSBhbmQgKihmcCs4KSBhcmUgc2FtZS4gV2hp bGUgdGhlIHNpdHVhdGlvbgorICAgICAgICAgICAgICogc2hvdWxkIGJlIHN0b3BlZCBvbmNlIHdl IGZvdW5kIHRoZSB0YXNrJ3Mgc3RhdGUKKyAgICAgICAgICAgICAqIGlzIGNoYW5nZWQsIHNvIHdl IGRldGVjdCB0aGUgdGFzaydzIGN1cnJlbnQgc3RhdGUsCisgICAgICAgICAgICAgKiBzcCBhbmQg ZnAgaW4gZWFjaCB3aGlsZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgfHwgY3VyX3Nw ICE9IHRocmVhZF9zYXZlZF9zcCh0c2spCisgICAgICAgICAgICB8fCBjdXJfZnAgIT0gdGhyZWFk X3NhdmVkX2ZwKHRzaykpKSB7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiphbnN3 ZXIgCnF1ZXN0aW9uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KV2h5IGRvZXMg YW55IG9mIHRoZXNlIHRocmVlIG1pc21hdGNoZXMgZGV0ZWN0IHRoZSBwcm9ibGVtYXRpYyB0cmFu c2l0aW9uCm5vdCBqdXN0IHRoZSBzdGF0ZSA/CjEuIHdlIGNhbiB1c2UgImN1cl9zdGF0ZSAhPSB0 c2stPnN0YXRlIiBwcmV2ZW50IHByaW50aW5nIGJhY2t0cmFjZSBpZiAKdGhlIHRhc2sncwogICAg c3RhdGUgaXMgY2hhbmdlZCBhZnRlciAic2F2ZWQiIHRhc2sncyBzdGF0ZS4KMi4gd2UgY2FuIHVz ZSAiY3VyX3NwICE9IHRocmVhZF9zYXZlZF9zcCh0c2spIiBhbmQgImN1cl9mcCAhPSAKdGhyZWFk X3NhdmVkX2ZwKHRzaykiCiAgICBwcmV2ZW50IHByaW50aW5nIGJhY2t0cmFjZSBpZiB0aGUgdGFz aydzIHN0YXRlIGlzIGNoYW5nZWQgYmVmb3JlIAoic2F2ZWQiIHRhc2sncwogICAgc3RhdGUuIEJl Y2F1c2UgdGhlIHZhbHVlIG9mICJ0aHJlYWRfc2F2ZWRfc3AodHNrKSIgYW5kIAoidGhyZWFkX3Nh dmVkX2ZwKHRzaykiCiAgICB3aWxsIG5vdCBlcXVhbCAic2F2ZWQiIHNwKGN1cl9zcCkgYW5kIGZw KGN1cl9mcCkuCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKmFuc3dlciAKcXVlc3Rp b24qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxp c3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo= 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=-6.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 461E4C282DD for ; Fri, 24 May 2019 03:16:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E124321773 for ; Fri, 24 May 2019 03:16:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="Yx6m/VB2"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="ipYr7kWr" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731794AbfEXDQU (ORCPT ); Thu, 23 May 2019 23:16:20 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:32880 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731522AbfEXDQT (ORCPT ); Thu, 23 May 2019 23:16:19 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id C2137607F4; Fri, 24 May 2019 03:16:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1558667777; bh=UfUOkq1yueIuFHRCYwReJukg9DnuYytlPgBSWsYteYI=; h=Date:From:To:Cc:Subject:From; b=Yx6m/VB2KcpMl2a85QuiJUCONQ5dv/ZK0PkE2IXk/NglQdiAslKZCIlbBB8CtAAAN 0Sz8KHOHQi658aI+qT+MYSM6Fm22LFnDTL7OS2th6i2ZQiXyx5MXPWIKAXFP3Rp97c yiS/QA5W4P6lXfXeHRl/kMjgB3EIR4AFb+hg3vFY= Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.codeaurora.org (Postfix) with ESMTP id 7ED2C602F8; Fri, 24 May 2019 03:16:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1558667776; bh=UfUOkq1yueIuFHRCYwReJukg9DnuYytlPgBSWsYteYI=; h=Date:From:To:Cc:Subject:From; b=ipYr7kWrhDYzMDqvpORoOVR37GGSUGG5J1iH61s8hM2Kbbc8Fb+oJQy6zdPy6/D7G zc7T4QauzYvsCK9YTxkIqwqyJn9UED08wp2wBL4mNpb7pTuObCfc3WMYv9eryfZIq7 3+7vxYy9KpPgGRNca09vcC4TjXbzWbxlh8Y79k7Y= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Fri, 24 May 2019 11:16:16 +0800 From: tengfeif@codeaurora.org To: Anshuman Khandual Cc: catalin.marinas@arm.com, will.deacon@arm.com, mark.rutland@arm.com, marc.zyngier@arm.com, andreyknvl@google.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, tengfei@codeaurora.org Subject: [PATCH] arm64: break while loop if task had been rescheduled Message-ID: <52076172bb8a55305846f6d4dc97bb52@codeaurora.org> X-Sender: tengfeif@codeaurora.org User-Agent: Roundcube Webmail/1.2.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When task isn't current task, this task's state have chance to be changed during printing this task's backtrace, so it is possible that task's fp and fp+8 have the same vaule, so cannot break the while loop. To fix this issue, we first save the task's state, sp and fp, then we will get the task's current state, sp and fp in each while again. we will stop to print backtrace if we found any of the values are different than what we saved. /********************************answer question**********************************/ This is very confusing. IIUC it suggests that while printing the backtrace for non-current tasks the do/while loop does not exit because fp and fp+8 might have the same value ? When would this happen ? Even in that case the commit message here does not properly match the change in this patch. In our issue, we got fp=pc=0xFFFFFF8025A13BA0, so cannot exit while loop in dump_basktrace(). After analyze our issue's dump, we found one task(such as: task A) is exiting via invoke do_exit() during another task is showing task A's dumptask. In kernel code, do_exit() and exit_notify are defined as follows: void noreturn do_exit(long code) { ...... exit_notify(tsk, group_dead); ...... } static void exit_notify(struct task_struct *tsk, int group_dead) { ...... } Because of exit_notify() is a static function, so it is inlined to do_exit() when compile kernel, so we can get partial assembly code of do_exit() as follows: …… { bool autoreap; struct task_struct *p, *n; LIST_HEAD(dead); write_lock_irq(&tasklist_lock); c10: 90000000 adrp x0, 0 c14: 910003e8 mov x8, sp c18: 91000000 add x0, x0, #0x0 */ static void exit_notify(struct task_struct *tsk, int group_dead) { bool autoreap; struct task_struct *p, *n; LIST_HEAD(dead); c1c: a90023e8 stp x8, x8, [sp] write_lock_irq(&tasklist_lock); c20: 94000000 bl 0 <_raw_write_lock_irq> c24: f9435268 ldr x8, [x19,#1696] …… From the code "c14:" and "c1c:", we will find sp's addr value is stored in sp and sp+8, so sp's vaule equal (sp+8)'s value. In our issue, there is a chance of fp point sp, so there will be fp=pc=fp's addr value,so code cannot break from while loop in dump_backtrace(). /********************************answer question**********************************/ /********************************answer question**********************************/ This patch tries to stop printing the stack for non-current tasks if their state change while there is one dump_backtrace() trying to print back trace. Dont we have any lock preventing a task in this situation (while dumping it's backtrace) from running again or changing state. I haven't found any lock preventing a task in this situation, and I think we shouldn't prevent task running if this task is scheduled. /********************************answer question**********************************/ Signed-off-by: Tengfei Fan --- arch/arm64/kernel/traps.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index 2975598..9df6e02 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -103,6 +103,9 @@ void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) { struct stackframe frame; int skip = 0; + long cur_state = 0; + unsigned long cur_sp = 0; + unsigned long cur_fp = 0; pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk); @@ -127,6 +130,9 @@ void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) */ frame.fp = thread_saved_fp(tsk); frame.pc = thread_saved_pc(tsk); + cur_state = tsk->state; + cur_sp = thread_saved_sp(tsk); + cur_fp = frame.fp; /********************************answer question**********************************/ Should 'saved_state|sp|fp' instead as its applicable to non-current tasks only. 'saved_state|sp|fp' only applies to non-current tasks. /********************************answer question**********************************/ } #ifdef CONFIG_FUNCTION_GRAPH_TRACER frame.graph = 0; @@ -134,6 +140,23 @@ void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) printk("Call trace:\n"); do { + if (tsk != current && (cur_state != tsk->state + /* + * We would not be printing backtrace for the task + * that has changed state from "saved" state to ohter + * state before hitting the do-while loop but after + * saving the current state. If task's current state + * not equal the "saved" state, then we may print + * wrong call trace or end up in infinite while loop + * if *(fp) and *(fp+8) are same. While the situation + * should be stoped once we found the task's state + * is changed, so we detect the task's current state, + * sp and fp in each while. + */ + || cur_sp != thread_saved_sp(tsk) + || cur_fp != thread_saved_fp(tsk))) { /********************************answer question**********************************/ Why does any of these three mismatches detect the problematic transition not just the state ? 1. we can use "cur_state != tsk->state" prevent printing backtrace if the task's state is changed after "saved" task's state. 2. we can use "cur_sp != thread_saved_sp(tsk)" and "cur_fp != thread_saved_fp(tsk)" prevent printing backtrace if the task's state is changed before "saved" task's state. Because the value of "thread_saved_sp(tsk)" and "thread_saved_fp(tsk)" will not equal "saved" sp(cur_sp) and fp(cur_fp). /********************************answer question**********************************/