From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH 2/2] drm/mgag200: Fix driver_load error handling Date: Thu, 17 Sep 2015 16:30:55 +0530 Message-ID: <1442487655-9690-2-git-send-email-architt@codeaurora.org> References: <1442487655-9690-1-git-send-email-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.codeaurora.org (smtp.codeaurora.org [198.145.29.96]) by gabe.freedesktop.org (Postfix) with ESMTPS id 094AD6E66B for ; Thu, 17 Sep 2015 04:01:08 -0700 (PDT) In-Reply-To: <1442487655-9690-1-git-send-email-architt@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, mingo@kernel.org Cc: Daniel Vetter , linux-kernel@vger.kernel.org, Peter Zijlstra , Thomas Gleixner , Linus Torvalds , Sudip Mukherjee List-Id: dri-devel@lists.freedesktop.org bWdhZzIwMF9kcml2ZXJfbG9hZCdzIGVycm9yIHBhdGgganVzdCBjYWxscyB0aGUgZHJtIGRyaXZl cidzCmRyaXZlcl91bmxvYWQgb3AuIEl0IGlzbid0IHNhZmUgdG8gY2FsbCB0aGlzIGJlY2F1c2Ug aXQgZG9lc24ndCBoYW5kbGUKdGhpbmdzIHdlbGwgaWYgZHJpdmVyX2xvYWQgZmFpbHMgc29tZXdo ZXJlIG1pZCB3YXkuCgpSZXBsYWNlIHRoZSBjYWxsIHRvIG1nYWcyMDBfZHJpdmVyX3VubG9hZCB3 aXRoIGEgbW9yZSBmaW5lZ3JhaW5lZAplcnJvciBoYW5kbGluZyBwYXRoLgoKTGluazogaHR0cDov L2xrbWwua2VybmVsLm9yZy9yLzU1RjZFNjhELjgwNzA4MDBAY29kZWF1cm9yYS5vcmcKUmVwb3J0 ZWQtYnk6IEluZ28gTW9sbmFyIDxtaW5nb0BrZXJuZWwub3JnPgpDYzogRGFuaWVsIFZldHRlciA8 ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KQ2M6IERhdmUgQWlybGllIDxhaXJsaWVkQGdtYWlsLmNv bT4KQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KQ2M6IExpbnVzIFRvcnZhbGRz IDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KQ2M6IFBldGVyIFppamxzdHJhIDxwZXRl cnpAaW5mcmFkZWFkLm9yZz4KQ2M6IFN1ZGlwIE11a2hlcmplZSA8c3VkaXBtLm11a2hlcmplZUBn bWFpbC5jb20+CkNjOiBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KQ2M6IGRy aS1kZXZlbCA8ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4KU2lnbmVkLW9mZi1ieTog QXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vbWdhZzIwMC9tZ2FnMjAwX21haW4uYyB8IDM2ICsrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21haW4uYyBi L2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbWFpbi5jCmluZGV4IGRlMDYzODguLmIx YTBmNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbWFpbi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbWFpbi5jCkBAIC0yMjAsNyAr MjIwLDcgQEAgaW50IG1nYWcyMDBfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dW5zaWduZWQgbG9uZyBmbGFncykKIAl9CiAJciA9IG1nYWcyMDBfbW1faW5pdChtZGV2KTsKIAlp ZiAocikKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyX21tOwogCiAJZHJtX21vZGVfY29uZmlnX2lu aXQoZGV2KTsKIAlkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gKHZvaWQgKikmbWdhX21vZGVfZnVu Y3M7CkBAIC0yMzMsNyArMjMzLDcgQEAgaW50IG1nYWcyMDBfZHJpdmVyX2xvYWQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIAlyID0gbWdhZzIwMF9tb2Rlc2V0 X2luaXQobWRldik7CiAJaWYgKHIpIHsKIAkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJGYXRh bCBlcnJvciBkdXJpbmcgbW9kZXNldCBpbml0OiAlZFxuIiwgcik7Ci0JCWdvdG8gb3V0OworCQln b3RvIGVycl9tb2Rlc2V0OwogCX0KIAogCS8qIE1ha2Ugc21hbGwgYnVmZmVycyB0byBzdG9yZSBh IGhhcmR3YXJlIGN1cnNvciAoZG91YmxlIGJ1ZmZlcmVkIGljb24gdXBkYXRlcykgKi8KQEAgLTI0 MSwyMCArMjQxLDI0IEBAIGludCBtZ2FnMjAwX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJCQkJCSAgJm1kZXYtPmN1cnNvci5waXhlbHNf MSk7CiAJbWdhZzIwMF9ib19jcmVhdGUoZGV2LCByb3VuZHVwKDQ4KjY0LCBQQUdFX1NJWkUpLCAw LCAwLAogCQkJCQkgICZtZGV2LT5jdXJzb3IucGl4ZWxzXzIpOwotCWlmICghbWRldi0+Y3Vyc29y LnBpeGVsc18yIHx8ICFtZGV2LT5jdXJzb3IucGl4ZWxzXzEpCi0JCWdvdG8gY3Vyc29yX25vc3Bh Y2U7Ci0JbWRldi0+Y3Vyc29yLnBpeGVsc19jdXJyZW50ID0gbWRldi0+Y3Vyc29yLnBpeGVsc18x OwotCW1kZXYtPmN1cnNvci5waXhlbHNfcHJldiA9IG1kZXYtPmN1cnNvci5waXhlbHNfMjsKLQln b3RvIGN1cnNvcl9kb25lOwotIGN1cnNvcl9ub3NwYWNlOgotCW1kZXYtPmN1cnNvci5waXhlbHNf MSA9IE5VTEw7Ci0JbWRldi0+Y3Vyc29yLnBpeGVsc18yID0gTlVMTDsKLQlkZXZfd2FybigmZGV2 LT5wZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgc3BhY2UgZm9yIGN1cnNvcnMuIE5vdCBk b2luZyBoYXJkd2FyZSBjdXJzb3JzLlxuIik7Ci0gY3Vyc29yX2RvbmU6Ci0KLW91dDoKLQlpZiAo cikKLQkJbWdhZzIwMF9kcml2ZXJfdW5sb2FkKGRldik7CisJaWYgKCFtZGV2LT5jdXJzb3IucGl4 ZWxzXzIgfHwgIW1kZXYtPmN1cnNvci5waXhlbHNfMSkgeworCQltZGV2LT5jdXJzb3IucGl4ZWxz XzEgPSBOVUxMOworCQltZGV2LT5jdXJzb3IucGl4ZWxzXzIgPSBOVUxMOworCQlkZXZfd2Fybigm ZGV2LT5wZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IGFsbG9jYXRlIHNwYWNlIGZvciBjdXJzb3Jz LiBOb3QgZG9pbmcgaGFyZHdhcmUgY3Vyc29ycy5cbiIpOworCX0gZWxzZSB7CisJCW1kZXYtPmN1 cnNvci5waXhlbHNfY3VycmVudCA9IG1kZXYtPmN1cnNvci5waXhlbHNfMTsKKwkJbWRldi0+Y3Vy c29yLnBpeGVsc19wcmV2ID0gbWRldi0+Y3Vyc29yLnBpeGVsc18yOworCX0KKworCXJldHVybiAw OworCitlcnJfbW9kZXNldDoKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOworCW1nYWcy MDBfbW1fZmluaShtZGV2KTsKK2Vycl9tbToKKwlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsKKwog CXJldHVybiByOwogfQogCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4g aXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLApob3N0ZWQgYnkgVGhlIExpbnV4 IEZvdW5kYXRpb24KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751979AbbIQLBM (ORCPT ); Thu, 17 Sep 2015 07:01:12 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:55579 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751812AbbIQLBI (ORCPT ); Thu, 17 Sep 2015 07:01:08 -0400 From: Archit Taneja To: dri-devel@lists.freedesktop.org, mingo@kernel.org Cc: linux-kernel@vger.kernel.org, Archit Taneja , Daniel Vetter , Dave Airlie , David Airlie , Linus Torvalds , Peter Zijlstra , Sudip Mukherjee , Thomas Gleixner Subject: [PATCH 2/2] drm/mgag200: Fix driver_load error handling Date: Thu, 17 Sep 2015 16:30:55 +0530 Message-Id: <1442487655-9690-2-git-send-email-architt@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1442487655-9690-1-git-send-email-architt@codeaurora.org> References: <1442487655-9690-1-git-send-email-architt@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org mgag200_driver_load's error path just calls the drm driver's driver_unload op. It isn't safe to call this because it doesn't handle things well if driver_load fails somewhere mid way. Replace the call to mgag200_driver_unload with a more finegrained error handling path. Link: http://lkml.kernel.org/r/55F6E68D.8070800@codeaurora.org Reported-by: Ingo Molnar Cc: Daniel Vetter Cc: Dave Airlie Cc: David Airlie Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Sudip Mukherjee Cc: Thomas Gleixner Cc: dri-devel Signed-off-by: Archit Taneja --- drivers/gpu/drm/mgag200/mgag200_main.c | 36 +++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c b/drivers/gpu/drm/mgag200/mgag200_main.c index de06388..b1a0f56 100644 --- a/drivers/gpu/drm/mgag200/mgag200_main.c +++ b/drivers/gpu/drm/mgag200/mgag200_main.c @@ -220,7 +220,7 @@ int mgag200_driver_load(struct drm_device *dev, unsigned long flags) } r = mgag200_mm_init(mdev); if (r) - goto out; + goto err_mm; drm_mode_config_init(dev); dev->mode_config.funcs = (void *)&mga_mode_funcs; @@ -233,7 +233,7 @@ int mgag200_driver_load(struct drm_device *dev, unsigned long flags) r = mgag200_modeset_init(mdev); if (r) { dev_err(&dev->pdev->dev, "Fatal error during modeset init: %d\n", r); - goto out; + goto err_modeset; } /* Make small buffers to store a hardware cursor (double buffered icon updates) */ @@ -241,20 +241,24 @@ int mgag200_driver_load(struct drm_device *dev, unsigned long flags) &mdev->cursor.pixels_1); mgag200_bo_create(dev, roundup(48*64, PAGE_SIZE), 0, 0, &mdev->cursor.pixels_2); - if (!mdev->cursor.pixels_2 || !mdev->cursor.pixels_1) - goto cursor_nospace; - mdev->cursor.pixels_current = mdev->cursor.pixels_1; - mdev->cursor.pixels_prev = mdev->cursor.pixels_2; - goto cursor_done; - cursor_nospace: - mdev->cursor.pixels_1 = NULL; - mdev->cursor.pixels_2 = NULL; - dev_warn(&dev->pdev->dev, "Could not allocate space for cursors. Not doing hardware cursors.\n"); - cursor_done: - -out: - if (r) - mgag200_driver_unload(dev); + if (!mdev->cursor.pixels_2 || !mdev->cursor.pixels_1) { + mdev->cursor.pixels_1 = NULL; + mdev->cursor.pixels_2 = NULL; + dev_warn(&dev->pdev->dev, + "Could not allocate space for cursors. Not doing hardware cursors.\n"); + } else { + mdev->cursor.pixels_current = mdev->cursor.pixels_1; + mdev->cursor.pixels_prev = mdev->cursor.pixels_2; + } + + return 0; + +err_modeset: + drm_mode_config_cleanup(dev); + mgag200_mm_fini(mdev); +err_mm: + dev->dev_private = NULL; + return r; } -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation