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.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,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 78AE7C33CB3 for ; Thu, 16 Jan 2020 16:57:39 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 4FAC224673 for ; Thu, 16 Jan 2020 16:57:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="iF1r9P9c" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4FAC224673 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AB37A6EE00; Thu, 16 Jan 2020 16:57:38 +0000 (UTC) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by gabe.freedesktop.org (Postfix) with ESMTPS id 06BF66EE00 for ; Thu, 16 Jan 2020 16:57:37 +0000 (UTC) Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E108520730; Thu, 16 Jan 2020 16:57:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579193856; bh=TxN2V/SY/Z4kutR4A9EGitRTS6vLs54G9CqkHP0iXzY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iF1r9P9cIfxGh9jMpdNZ2/4sfK9iQ5Z/cU5UwlXcP/zyw8BgmufEg842fDsHoKdnp pYArSu1iCOTF+wRKoNhBGWYNz0LrpDv/gJgDsdjIQAHX6o9T0Z3GnjGL4vAIZ2/sbS Fn/cnKW1n70nFYZGUtGThOXMencOrOJ8rkGuSja0= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCH AUTOSEL 4.19 106/671] drm/fb-helper: generic: Fix setup error path Date: Thu, 16 Jan 2020 11:45:37 -0500 Message-Id: <20200116165502.8838-106-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200116165502.8838-1-sashal@kernel.org> References: <20200116165502.8838-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sasha Levin , Peter Wu , dri-devel@lists.freedesktop.org, Gerd Hoffmann Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+CgpbIFVwc3RyZWFtIGNv bW1pdCA2ZTE0OTBjZjQzOWFhODZiMTA0ZTUxMjRjMzYyNzViOTY0MjM4ZTFmIF0KCklmIHJlZ2lz dGVyX2ZyYW1lYnVmZmVyKCkgZmFpbHMgZHVyaW5nIGZiZGV2IHNldHVwIHdlIHdpbGwgbGVhayB0 aGUKZnJhbWVidWZmZXIsIHRoZSBHRU0gYnVmZmVyIGFuZCB0aGUgc2hhZG93IGJ1ZmZlciBmb3Ig ZGVmaW8uIFRoaXMgaXMKYmVjYXVzZSBkcm1fZmJfaGVscGVyX2ZiZGV2X3NldHVwKCkganVzdCBj YWxscyBkcm1fZmJfaGVscGVyX2ZpbmkoKSBvbgplcnJvciBub3QgdGFraW5nIGludG8gYWNjb3Vu dCB0aGF0IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkgY2FuIGZhaWwuCgpTaW5jZSB0aGUgZ2VuZXJp YyBlbXVsYXRpb24gdXNlcyBEUk0gY2xpZW50IGZvciBpdHMgZnJhbWVidWZmZXIgYW5kCmJhY2tp bmcgYnVmZmVyIGluIGFkZGl0aW9uIHRvIGEgc2hhZG93IGJ1ZmZlciwgaXQncyBuZWNlc3Nhcnkg dG8gb3BlbiBjb2RlCmRybV9mYl9oZWxwZXJfZmJkZXZfc2V0dXAoKSB0byBwcm9wZXJseSBoYW5k bGUgdGhlIGVycm9yIHBhdGguCgpFcnJvciBjbGVhbnVwIGlzIHJlbW92ZWQgZnJvbSAuZmJfcHJv YmUgYW5kIGlzIGhhbmRsZWQgYnkgb25lIGZ1bmN0aW9uIGZvcgphbGwgcGF0aHMuCgpGaXhlczog OTA2MGQ3ZjQ5Mzc2ICgiZHJtL2ZiLWhlbHBlcjogRmluaXNoIHRoZSBnZW5lcmljIGZiZGV2IGVt dWxhdGlvbiIpClJlcG9ydGVkLWJ5OiBQZXRlciBXdSA8cGV0ZXJAbGVrZW5zdGV5bi5ubD4KU2ln bmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+CkFja2VkLWJ5 OiBHZXJkIEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4KTGluazogaHR0cHM6Ly9wYXRjaHdv cmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoL21zZ2lkLzIwMTkwMTA1MTgxODQ2LjI2NDk1LTEtbm9y YWxmQHRyb25uZXMub3JnClNpZ25lZC1vZmYtYnk6IFNhc2hhIExldmluIDxzYXNoYWxAa2VybmVs Lm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIHwgOTggKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygr KSwgNDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9o ZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5kZXggZjU3ZmMxNDUw YjYxLi4xYzg3YWQ2NjY3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVs cGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtMjk3OSwxOCAr Mjk3OSwxNiBAQCBzdGF0aWMgaW50IGRybV9mYmRldl9mYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZv ICppbmZvLCBpbnQgdXNlcikKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGZiX29wcy5mYl9kZXN0 cm95IGlzIGNhbGxlZCBieSB0aGUgbGFzdCBwdXRfZmJfaW5mbygpIGNhbGwgYXQgdGhlIGVuZCBv ZgotICogdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigpIG9yIGZiX3JlbGVhc2UoKS4KLSAqLwotc3Rh dGljIHZvaWQgZHJtX2ZiZGV2X2ZiX2Rlc3Ryb3koc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0 aWMgdm9pZCBkcm1fZmJkZXZfY2xlYW51cChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVy KQogewotCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CiAJc3Ry dWN0IGZiX2luZm8gKmZiaSA9IGZiX2hlbHBlci0+ZmJkZXY7CiAJc3RydWN0IGZiX29wcyAqZmJv cHMgPSBOVUxMOwogCXZvaWQgKnNoYWRvdyA9IE5VTEw7CiAKLQlpZiAoZmJpLT5mYmRlZmlvKSB7 CisJaWYgKCFmYl9oZWxwZXItPmRldikKKwkJcmV0dXJuOworCisJaWYgKGZiaSAmJiBmYmktPmZi ZGVmaW8pIHsKIAkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChmYmkpOwogCQlzaGFkb3cgPSBmYmkt PnNjcmVlbl9idWZmZXI7CiAJCWZib3BzID0gZmJpLT5mYm9wczsKQEAgLTMwMDQsNiArMzAwMiwx MiBAQCBzdGF0aWMgdm9pZCBkcm1fZmJkZXZfZmJfZGVzdHJveShzdHJ1Y3QgZmJfaW5mbyAqaW5m bykKIAl9CiAKIAlkcm1fY2xpZW50X2ZyYW1lYnVmZmVyX2RlbGV0ZShmYl9oZWxwZXItPmJ1ZmZl cik7Cit9CisKK3N0YXRpYyB2b2lkIGRybV9mYmRldl9yZWxlYXNlKHN0cnVjdCBkcm1fZmJfaGVs cGVyICpmYl9oZWxwZXIpCit7CisJZHJtX2ZiZGV2X2NsZWFudXAoZmJfaGVscGVyKTsKKwogCS8q CiAJICogRklYTUU6CiAJICogUmVtb3ZlIGNvbmRpdGlvbmFsIHdoZW4gYWxsIENNQSBkcml2ZXJz IGhhdmUgYmVlbiBtb3ZlZCBvdmVyIHRvIHVzaW5nCkBAIC0zMDE1LDYgKzMwMTksMTUgQEAgc3Rh dGljIHZvaWQgZHJtX2ZiZGV2X2ZiX2Rlc3Ryb3koc3RydWN0IGZiX2luZm8gKmluZm8pCiAJfQog fQogCisvKgorICogZmJfb3BzLmZiX2Rlc3Ryb3kgaXMgY2FsbGVkIGJ5IHRoZSBsYXN0IHB1dF9m Yl9pbmZvKCkgY2FsbCBhdCB0aGUgZW5kIG9mCisgKiB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkg b3IgZmJfcmVsZWFzZSgpLgorICovCitzdGF0aWMgdm9pZCBkcm1fZmJkZXZfZmJfZGVzdHJveShz dHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlkcm1fZmJkZXZfcmVsZWFzZShpbmZvLT5wYXIpOwor fQorCiBzdGF0aWMgaW50IGRybV9mYmRldl9mYl9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJf aGVscGVyID0gaW5mby0+cGFyOwpAQCAtMzA2NSw3ICszMDc4LDYgQEAgaW50IGRybV9mYl9oZWxw ZXJfZ2VuZXJpY19wcm9iZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiOwogCXN0cnVjdCBmYl9pbmZvICpmYmk7CiAJdTMyIGZvcm1h dDsKLQlpbnQgcmV0OwogCiAJRFJNX0RFQlVHX0tNUygic3VyZmFjZSB3aWR0aCglZCksIGhlaWdo dCglZCkgYW5kIGJwcCglZClcbiIsCiAJCSAgICAgIHNpemVzLT5zdXJmYWNlX3dpZHRoLCBzaXpl cy0+c3VyZmFjZV9oZWlnaHQsCkBAIC0zMDgyLDEwICszMDk0LDggQEAgaW50IGRybV9mYl9oZWxw ZXJfZ2VuZXJpY19wcm9iZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCWZiID0g YnVmZmVyLT5mYjsKIAogCWZiaSA9IGRybV9mYl9oZWxwZXJfYWxsb2NfZmJpKGZiX2hlbHBlcik7 Ci0JaWYgKElTX0VSUihmYmkpKSB7Ci0JCXJldCA9IFBUUl9FUlIoZmJpKTsKLQkJZ290byBlcnJf ZnJlZV9idWZmZXI7Ci0JfQorCWlmIChJU19FUlIoZmJpKSkKKwkJcmV0dXJuIFBUUl9FUlIoZmJp KTsKIAogCWZiaS0+cGFyID0gZmJfaGVscGVyOwogCWZiaS0+ZmJvcHMgPSAmZHJtX2ZiZGV2X2Zi X29wczsKQEAgLTMxMTYsOCArMzEyNiw3IEBAIGludCBkcm1fZmJfaGVscGVyX2dlbmVyaWNfcHJv YmUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJaWYgKCFmYm9wcyB8fCAhc2hh ZG93KSB7CiAJCQlrZnJlZShmYm9wcyk7CiAJCQl2ZnJlZShzaGFkb3cpOwotCQkJcmV0ID0gLUVO T01FTTsKLQkJCWdvdG8gZXJyX2ZiX2luZm9fZGVzdHJveTsKKwkJCXJldHVybiAtRU5PTUVNOwog CQl9CiAKIAkJKmZib3BzID0gKmZiaS0+ZmJvcHM7CkBAIC0zMTI5LDEzICszMTM4LDYgQEAgaW50 IGRybV9mYl9oZWxwZXJfZ2VuZXJpY19wcm9iZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVs cGVyLAogCX0KIAogCXJldHVybiAwOwotCi1lcnJfZmJfaW5mb19kZXN0cm95OgotCWRybV9mYl9o ZWxwZXJfZmluaShmYl9oZWxwZXIpOwotZXJyX2ZyZWVfYnVmZmVyOgotCWRybV9jbGllbnRfZnJh bWVidWZmZXJfZGVsZXRlKGJ1ZmZlcik7Ci0KLQlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJP TChkcm1fZmJfaGVscGVyX2dlbmVyaWNfcHJvYmUpOwogCkBAIC0zMTQ3LDE4ICszMTQ5LDExIEBA IHN0YXRpYyB2b2lkIGRybV9mYmRldl9jbGllbnRfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2NsaWVu dF9kZXYgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gZHJt X2ZiX2hlbHBlcl9mcm9tX2NsaWVudChjbGllbnQpOwogCi0JaWYgKGZiX2hlbHBlci0+ZmJkZXYp IHsKLQkJZHJtX2ZiX2hlbHBlcl91bnJlZ2lzdGVyX2ZiaShmYl9oZWxwZXIpOworCWlmIChmYl9o ZWxwZXItPmZiZGV2KQogCQkvKiBkcm1fZmJkZXZfZmJfZGVzdHJveSgpIHRha2VzIGNhcmUgb2Yg Y2xlYW51cCAqLwotCQlyZXR1cm47Ci0JfQotCi0JLyogRGlkIGRybV9mYl9oZWxwZXJfZmJkZXZf c2V0dXAoKSBydW4/ICovCi0JaWYgKGZiX2hlbHBlci0+ZGV2KQotCQlkcm1fZmJfaGVscGVyX2Zp bmkoZmJfaGVscGVyKTsKLQotCWRybV9jbGllbnRfcmVsZWFzZShjbGllbnQpOwotCWtmcmVlKGZi X2hlbHBlcik7CisJCWRybV9mYl9oZWxwZXJfdW5yZWdpc3Rlcl9mYmkoZmJfaGVscGVyKTsKKwll bHNlCisJCWRybV9mYmRldl9yZWxlYXNlKGZiX2hlbHBlcik7CiB9CiAKIHN0YXRpYyBpbnQgZHJt X2ZiZGV2X2NsaWVudF9yZXN0b3JlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQpAQCAt MzE3NCw3ICszMTY5LDcgQEAgc3RhdGljIGludCBkcm1fZmJkZXZfY2xpZW50X2hvdHBsdWcoc3Ry dWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQpCiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNs aWVudC0+ZGV2OwogCWludCByZXQ7CiAKLQkvKiBJZiBkcm1fZmJfaGVscGVyX2ZiZGV2X3NldHVw KCkgZmFpbGVkLCB3ZSBvbmx5IHRyeSBvbmNlICovCisJLyogU2V0dXAgaXMgbm90IHJldHJpZWQg aWYgaXQgaGFzIGZhaWxlZCAqLwogCWlmICghZmJfaGVscGVyLT5kZXYgJiYgZmJfaGVscGVyLT5m dW5jcykKIAkJcmV0dXJuIDA7CiAKQEAgLTMxODQsMTUgKzMxNzksMzQgQEAgc3RhdGljIGludCBk cm1fZmJkZXZfY2xpZW50X2hvdHBsdWcoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQpCiAJ aWYgKCFkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpCiAJCXJldHVybiAwOwogCi0JcmV0 ID0gZHJtX2ZiX2hlbHBlcl9mYmRldl9zZXR1cChkZXYsIGZiX2hlbHBlciwgJmRybV9mYl9oZWxw ZXJfZ2VuZXJpY19mdW5jcywKLQkJCQkJZmJfaGVscGVyLT5wcmVmZXJyZWRfYnBwLCAwKTsKLQlp ZiAocmV0KSB7Ci0JCWZiX2hlbHBlci0+ZGV2ID0gTlVMTDsKLQkJZmJfaGVscGVyLT5mYmRldiA9 IE5VTEw7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWRybV9mYl9oZWxwZXJfcHJlcGFyZShkZXYsIGZi X2hlbHBlciwgJmRybV9mYl9oZWxwZXJfZ2VuZXJpY19mdW5jcyk7CisKKwlyZXQgPSBkcm1fZmJf aGVscGVyX2luaXQoZGV2LCBmYl9oZWxwZXIsIGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rv cik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBkcm1fZmJfaGVscGVyX3Npbmds ZV9hZGRfYWxsX2Nvbm5lY3RvcnMoZmJfaGVscGVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9j bGVhbnVwOworCisJaWYgKCFkcm1fZHJ2X3VzZXNfYXRvbWljX21vZGVzZXQoZGV2KSkKKwkJZHJt X2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoZGV2KTsKKworCXJldCA9IGRybV9mYl9o ZWxwZXJfaW5pdGlhbF9jb25maWcoZmJfaGVscGVyLCBmYl9oZWxwZXItPnByZWZlcnJlZF9icHAp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NsZWFudXA7CiAKIAlyZXR1cm4gMDsKKworZXJyX2Ns ZWFudXA6CisJZHJtX2ZiZGV2X2NsZWFudXAoZmJfaGVscGVyKTsKK2VycjoKKwlmYl9oZWxwZXIt PmRldiA9IE5VTEw7CisJZmJfaGVscGVyLT5mYmRldiA9IE5VTEw7CisKKwlEUk1fREVWX0VSUk9S KGRldi0+ZGV2LCAiZmJkZXY6IEZhaWxlZCB0byBzZXR1cCBnZW5lcmljIGVtdWxhdGlvbiAocmV0 PSVkKVxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2NsaWVudF9mdW5jcyBkcm1fZmJkZXZfY2xpZW50X2Z1bmNzID0gewpAQCAtMzI0NSw2ICsz MjU5LDEwIEBAIGludCBkcm1fZmJkZXZfZ2VuZXJpY19zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgcHJlZmVycmVkX2JwcCkKIAogCWRybV9jbGllbnRfYWRkKCZmYl9o ZWxwZXItPmNsaWVudCk7CiAKKwlpZiAoIXByZWZlcnJlZF9icHApCisJCXByZWZlcnJlZF9icHAg PSBkZXYtPm1vZGVfY29uZmlnLnByZWZlcnJlZF9kZXB0aDsKKwlpZiAoIXByZWZlcnJlZF9icHAp CisJCXByZWZlcnJlZF9icHAgPSAzMjsKIAlmYl9oZWxwZXItPnByZWZlcnJlZF9icHAgPSBwcmVm ZXJyZWRfYnBwOwogCiAJZHJtX2ZiZGV2X2NsaWVudF9ob3RwbHVnKCZmYl9oZWxwZXItPmNsaWVu dCk7Ci0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo= 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=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,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 DEBF3C33CAF for ; Thu, 16 Jan 2020 16:58:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AB39D21582 for ; Thu, 16 Jan 2020 16:58:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579193898; bh=TxN2V/SY/Z4kutR4A9EGitRTS6vLs54G9CqkHP0iXzY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=fEUuqWET1owB86iNwEdw+ZxEUsUkEy64//RKcBH4tQbYr/thMQQcTAofP0h6PaMhw yKLNM+CQkvY/o+PyZJnPR3PZoyce7BpCXMbEv7WDxadmRIdrwAV7h34l58tNUYJ6M5 MbXC4d2AYbe5Ut80Tvn6ENDWgA1IKCDtjvIFQztU= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733279AbgAPQ5u (ORCPT ); Thu, 16 Jan 2020 11:57:50 -0500 Received: from mail.kernel.org ([198.145.29.99]:44964 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732859AbgAPQ5i (ORCPT ); Thu, 16 Jan 2020 11:57:38 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E108520730; Thu, 16 Jan 2020 16:57:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579193856; bh=TxN2V/SY/Z4kutR4A9EGitRTS6vLs54G9CqkHP0iXzY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iF1r9P9cIfxGh9jMpdNZ2/4sfK9iQ5Z/cU5UwlXcP/zyw8BgmufEg842fDsHoKdnp pYArSu1iCOTF+wRKoNhBGWYNz0LrpDv/gJgDsdjIQAHX6o9T0Z3GnjGL4vAIZ2/sbS Fn/cnKW1n70nFYZGUtGThOXMencOrOJ8rkGuSja0= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Peter Wu , Gerd Hoffmann , Sasha Levin , dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 4.19 106/671] drm/fb-helper: generic: Fix setup error path Date: Thu, 16 Jan 2020 11:45:37 -0500 Message-Id: <20200116165502.8838-106-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200116165502.8838-1-sashal@kernel.org> References: <20200116165502.8838-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Noralf Trønnes [ Upstream commit 6e1490cf439aa86b104e5124c36275b964238e1f ] If register_framebuffer() fails during fbdev setup we will leak the framebuffer, the GEM buffer and the shadow buffer for defio. This is because drm_fb_helper_fbdev_setup() just calls drm_fb_helper_fini() on error not taking into account that register_framebuffer() can fail. Since the generic emulation uses DRM client for its framebuffer and backing buffer in addition to a shadow buffer, it's necessary to open code drm_fb_helper_fbdev_setup() to properly handle the error path. Error cleanup is removed from .fb_probe and is handled by one function for all paths. Fixes: 9060d7f49376 ("drm/fb-helper: Finish the generic fbdev emulation") Reported-by: Peter Wu Signed-off-by: Noralf Trønnes Acked-by: Gerd Hoffmann Link: https://patchwork.freedesktop.org/patch/msgid/20190105181846.26495-1-noralf@tronnes.org Signed-off-by: Sasha Levin --- drivers/gpu/drm/drm_fb_helper.c | 98 +++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index f57fc1450b61..1c87ad6667e7 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -2979,18 +2979,16 @@ static int drm_fbdev_fb_release(struct fb_info *info, int user) return 0; } -/* - * fb_ops.fb_destroy is called by the last put_fb_info() call at the end of - * unregister_framebuffer() or fb_release(). - */ -static void drm_fbdev_fb_destroy(struct fb_info *info) +static void drm_fbdev_cleanup(struct drm_fb_helper *fb_helper) { - struct drm_fb_helper *fb_helper = info->par; struct fb_info *fbi = fb_helper->fbdev; struct fb_ops *fbops = NULL; void *shadow = NULL; - if (fbi->fbdefio) { + if (!fb_helper->dev) + return; + + if (fbi && fbi->fbdefio) { fb_deferred_io_cleanup(fbi); shadow = fbi->screen_buffer; fbops = fbi->fbops; @@ -3004,6 +3002,12 @@ static void drm_fbdev_fb_destroy(struct fb_info *info) } drm_client_framebuffer_delete(fb_helper->buffer); +} + +static void drm_fbdev_release(struct drm_fb_helper *fb_helper) +{ + drm_fbdev_cleanup(fb_helper); + /* * FIXME: * Remove conditional when all CMA drivers have been moved over to using @@ -3015,6 +3019,15 @@ static void drm_fbdev_fb_destroy(struct fb_info *info) } } +/* + * fb_ops.fb_destroy is called by the last put_fb_info() call at the end of + * unregister_framebuffer() or fb_release(). + */ +static void drm_fbdev_fb_destroy(struct fb_info *info) +{ + drm_fbdev_release(info->par); +} + static int drm_fbdev_fb_mmap(struct fb_info *info, struct vm_area_struct *vma) { struct drm_fb_helper *fb_helper = info->par; @@ -3065,7 +3078,6 @@ int drm_fb_helper_generic_probe(struct drm_fb_helper *fb_helper, struct drm_framebuffer *fb; struct fb_info *fbi; u32 format; - int ret; DRM_DEBUG_KMS("surface width(%d), height(%d) and bpp(%d)\n", sizes->surface_width, sizes->surface_height, @@ -3082,10 +3094,8 @@ int drm_fb_helper_generic_probe(struct drm_fb_helper *fb_helper, fb = buffer->fb; fbi = drm_fb_helper_alloc_fbi(fb_helper); - if (IS_ERR(fbi)) { - ret = PTR_ERR(fbi); - goto err_free_buffer; - } + if (IS_ERR(fbi)) + return PTR_ERR(fbi); fbi->par = fb_helper; fbi->fbops = &drm_fbdev_fb_ops; @@ -3116,8 +3126,7 @@ int drm_fb_helper_generic_probe(struct drm_fb_helper *fb_helper, if (!fbops || !shadow) { kfree(fbops); vfree(shadow); - ret = -ENOMEM; - goto err_fb_info_destroy; + return -ENOMEM; } *fbops = *fbi->fbops; @@ -3129,13 +3138,6 @@ int drm_fb_helper_generic_probe(struct drm_fb_helper *fb_helper, } return 0; - -err_fb_info_destroy: - drm_fb_helper_fini(fb_helper); -err_free_buffer: - drm_client_framebuffer_delete(buffer); - - return ret; } EXPORT_SYMBOL(drm_fb_helper_generic_probe); @@ -3147,18 +3149,11 @@ static void drm_fbdev_client_unregister(struct drm_client_dev *client) { struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client); - if (fb_helper->fbdev) { - drm_fb_helper_unregister_fbi(fb_helper); + if (fb_helper->fbdev) /* drm_fbdev_fb_destroy() takes care of cleanup */ - return; - } - - /* Did drm_fb_helper_fbdev_setup() run? */ - if (fb_helper->dev) - drm_fb_helper_fini(fb_helper); - - drm_client_release(client); - kfree(fb_helper); + drm_fb_helper_unregister_fbi(fb_helper); + else + drm_fbdev_release(fb_helper); } static int drm_fbdev_client_restore(struct drm_client_dev *client) @@ -3174,7 +3169,7 @@ static int drm_fbdev_client_hotplug(struct drm_client_dev *client) struct drm_device *dev = client->dev; int ret; - /* If drm_fb_helper_fbdev_setup() failed, we only try once */ + /* Setup is not retried if it has failed */ if (!fb_helper->dev && fb_helper->funcs) return 0; @@ -3184,15 +3179,34 @@ static int drm_fbdev_client_hotplug(struct drm_client_dev *client) if (!dev->mode_config.num_connector) return 0; - ret = drm_fb_helper_fbdev_setup(dev, fb_helper, &drm_fb_helper_generic_funcs, - fb_helper->preferred_bpp, 0); - if (ret) { - fb_helper->dev = NULL; - fb_helper->fbdev = NULL; - return ret; - } + drm_fb_helper_prepare(dev, fb_helper, &drm_fb_helper_generic_funcs); + + ret = drm_fb_helper_init(dev, fb_helper, dev->mode_config.num_connector); + if (ret) + goto err; + + ret = drm_fb_helper_single_add_all_connectors(fb_helper); + if (ret) + goto err_cleanup; + + if (!drm_drv_uses_atomic_modeset(dev)) + drm_helper_disable_unused_functions(dev); + + ret = drm_fb_helper_initial_config(fb_helper, fb_helper->preferred_bpp); + if (ret) + goto err_cleanup; return 0; + +err_cleanup: + drm_fbdev_cleanup(fb_helper); +err: + fb_helper->dev = NULL; + fb_helper->fbdev = NULL; + + DRM_DEV_ERROR(dev->dev, "fbdev: Failed to setup generic emulation (ret=%d)\n", ret); + + return ret; } static const struct drm_client_funcs drm_fbdev_client_funcs = { @@ -3245,6 +3259,10 @@ int drm_fbdev_generic_setup(struct drm_device *dev, unsigned int preferred_bpp) drm_client_add(&fb_helper->client); + if (!preferred_bpp) + preferred_bpp = dev->mode_config.preferred_depth; + if (!preferred_bpp) + preferred_bpp = 32; fb_helper->preferred_bpp = preferred_bpp; drm_fbdev_client_hotplug(&fb_helper->client); -- 2.20.1