From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Subject: [PATCH v2 02/12] fbdev: allow apertures == NULL in remove_conflicting_framebuffers() Date: Thu, 30 Aug 2018 23:00:05 +0200 Message-ID: <7e3a48e397298b38d7ddc7f45d48226d1f5db3e4.1535656077.git.mirq-linux@rere.qmqm.pl> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: dri-devel@lists.freedesktop.org Cc: linux-fbdev@vger.kernel.org, linux-tegra@vger.kernel.org, Bartlomiej Zolnierkiewicz , David Airlie , amd-gfx@lists.freedesktop.org, virtualization@lists.linux-foundation.org, Eric Anholt , Thierry Reding , Gerd Hoffmann , Alex Deucher , Maxime Ripard , linux-arm-kernel@lists.infradead.org List-Id: linux-tegra@vger.kernel.org SW50ZXJwcmV0IChvdGhlcndpc2UtaW52YWxpZCkgTlVMTCBhcGVydHVyZXMgYXJndW1lbnQgdG8g bWVhbiBhbGwtbWVtb3J5CnJhbmdlLiBUaGlzIHdpbGwgYWxsb3cgdG8gcmVtb3ZlIHNldmVyYWwg ZHVwbGljYXRlcyBvZiB0aGlzIGNvZGUgZnJvbQpkcml2ZXJzIGluIGZvbGxvd2luZyBwYXRjaGVz LgoKU2lnbmVkLW9mZi1ieTogTWljaGHFgiBNaXJvc8WCYXcgPG1pcnEtbGludXhAcmVyZS5xbXFt LnBsPgpbZm9yIHYxXQpBY2tlZC1ieTogQmFydGxvbWllaiBab2xuaWVya2lld2ljeiA8Yi56b2xu aWVya2llQHNhbXN1bmcuY29tPgoKLS0tCnYyOiBhZGRlZCBrZXJuZWxkb2MgdG8gY29ycmVzcG9u ZGluZyBEUk0gaGVscGVyCi0tLQogZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZibWVtLmMgfCAx NCArKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oICAgICAgfCAxMCAr KysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYv Y29yZS9mYm1lbS5jCmluZGV4IDMwYTE4ZDRjOWRlNC4uMGRmMTQ4ZWI0Njk5IDEwMDY0NAotLS0g YS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2Zi ZGV2L2NvcmUvZmJtZW0uYwpAQCAtMTc3OSwxMSArMTc3OSwyNSBAQCBpbnQgcmVtb3ZlX2NvbmZs aWN0aW5nX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYSwKIAkJCQkgICAg Y29uc3QgY2hhciAqbmFtZSwgYm9vbCBwcmltYXJ5KQogewogCWludCByZXQ7CisJYm9vbCBkb19m cmVlID0gZmFsc2U7CisKKwlpZiAoIWEpIHsKKwkJYSA9IGFsbG9jX2FwZXJ0dXJlcygxKTsKKwkJ aWYgKCFhKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJYS0+cmFuZ2VzWzBdLmJhc2UgPSAwOwor CQlhLT5yYW5nZXNbMF0uc2l6ZSA9IH4wOworCQlkb19mcmVlID0gdHJ1ZTsKKwl9CiAKIAltdXRl eF9sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CiAJcmV0ID0gZG9fcmVtb3ZlX2NvbmZsaWN0aW5n X2ZyYW1lYnVmZmVycyhhLCBuYW1lLCBwcmltYXJ5KTsKIAltdXRleF91bmxvY2soJnJlZ2lzdHJh dGlvbl9sb2NrKTsKIAorCWlmIChkb19mcmVlKQorCQlrZnJlZShhKTsKKwogCXJldHVybiByZXQ7 CiB9CiBFWFBPUlRfU1lNQk9MKHJlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMpOwpkaWZm IC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2Zi X2hlbHBlci5oCmluZGV4IGIwNjk0MzNlN2ZjMS4uMWMxZTUzYWJiMjVkIDEwMDY0NAotLS0gYS9p bmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBl ci5oCkBAIC01NjYsNiArNTY2LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZmJfaGVscGVy X291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAogI2VuZGlmCiAK Ky8qKgorICogZHJtX2ZiX2hlbHBlcl9yZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzIC0g cmVtb3ZlIGZpcm13YXJlIGZyYW1lYnVmZmVycworICogQGE6IG1lbW9yeSByYW5nZSwgdXNlcnMg b2Ygd2hpY2ggYXJlIHRvIGJlIHJlbW92ZWQKKyAqIEBuYW1lOiByZXF1ZXN0aW5nIGRyaXZlciBu YW1lCisgKiBAcHJpbWFyeTogYWxzbyBraWNrIHZnYTE2ZmIgaWYgcHJlc2VudAorICoKKyAqIFRo aXMgZnVuY3Rpb24gcmVtb3ZlcyBmcmFtZWJ1ZmZlciBkZXZpY2VzIChlZy4gaW5pdGlhbGl6ZWQg YnkgZmlybXdhcmUpCisgKiB3aGljaCB1c2UgbWVtb3J5IHJhbmdlIGRlc2NyaWJlZCBieSBAYS4g SWYgQGEgaXMgTlVMTCBhbGwgc3VjaCBkZXZpY2VzIGFyZQorICogcmVtb3ZlZC4KKyAqLwogc3Rh dGljIGlubGluZSBpbnQKIGRybV9mYl9oZWxwZXJfcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVm ZmVycyhzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYSwKIAkJCQkJICAgICAgY29uc3QgY2hhciAq bmFtZSwgYm9vbCBwcmltYXJ5KQotLSAKMi4xOC4wCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Date: Thu, 30 Aug 2018 21:00:05 +0000 Subject: [PATCH v2 02/12] fbdev: allow apertures == NULL in remove_conflicting_framebuffers() Message-Id: <7e3a48e397298b38d7ddc7f45d48226d1f5db3e4.1535656077.git.mirq-linux@rere.qmqm.pl> List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: dri-devel@lists.freedesktop.org Cc: linux-fbdev@vger.kernel.org, linux-tegra@vger.kernel.org, Bartlomiej Zolnierkiewicz , David Airlie , amd-gfx@lists.freedesktop.org, virtualization@lists.linux-foundation.org, Eric Anholt , Thierry Reding , Gerd Hoffmann , Alex Deucher , Maxime Ripard , linux-arm-kernel@lists.infradead.org Interpret (otherwise-invalid) NULL apertures argument to mean all-memory range. This will allow to remove several duplicates of this code from drivers in following patches. Signed-off-by: Michał Mirosław [for v1] Acked-by: Bartlomiej Zolnierkiewicz --- v2: added kerneldoc to corresponding DRM helper --- drivers/video/fbdev/core/fbmem.c | 14 ++++++++++++++ include/drm/drm_fb_helper.h | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 30a18d4c9de4..0df148eb4699 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -1779,11 +1779,25 @@ int remove_conflicting_framebuffers(struct apertures_struct *a, const char *name, bool primary) { int ret; + bool do_free = false; + + if (!a) { + a = alloc_apertures(1); + if (!a) + return -ENOMEM; + + a->ranges[0].base = 0; + a->ranges[0].size = ~0; + do_free = true; + } mutex_lock(®istration_lock); ret = do_remove_conflicting_framebuffers(a, name, primary); mutex_unlock(®istration_lock); + if (do_free) + kfree(a); + return ret; } EXPORT_SYMBOL(remove_conflicting_framebuffers); diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h index b069433e7fc1..1c1e53abb25d 100644 --- a/include/drm/drm_fb_helper.h +++ b/include/drm/drm_fb_helper.h @@ -566,6 +566,16 @@ static inline void drm_fb_helper_output_poll_changed(struct drm_device *dev) #endif +/** + * drm_fb_helper_remove_conflicting_framebuffers - remove firmware framebuffers + * @a: memory range, users of which are to be removed + * @name: requesting driver name + * @primary: also kick vga16fb if present + * + * This function removes framebuffer devices (eg. initialized by firmware) + * which use memory range described by @a. If @a is NULL all such devices are + * removed. + */ static inline int drm_fb_helper_remove_conflicting_framebuffers(struct apertures_struct *a, const char *name, bool primary) -- 2.18.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: mirq-linux@rere.qmqm.pl (=?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?=) Date: Thu, 30 Aug 2018 23:00:05 +0200 Subject: [PATCH v2 02/12] fbdev: allow apertures == NULL in remove_conflicting_framebuffers() In-Reply-To: References: Message-ID: <7e3a48e397298b38d7ddc7f45d48226d1f5db3e4.1535656077.git.mirq-linux@rere.qmqm.pl> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Interpret (otherwise-invalid) NULL apertures argument to mean all-memory range. This will allow to remove several duplicates of this code from drivers in following patches. Signed-off-by: Micha? Miros?aw [for v1] Acked-by: Bartlomiej Zolnierkiewicz --- v2: added kerneldoc to corresponding DRM helper --- drivers/video/fbdev/core/fbmem.c | 14 ++++++++++++++ include/drm/drm_fb_helper.h | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 30a18d4c9de4..0df148eb4699 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -1779,11 +1779,25 @@ int remove_conflicting_framebuffers(struct apertures_struct *a, const char *name, bool primary) { int ret; + bool do_free = false; + + if (!a) { + a = alloc_apertures(1); + if (!a) + return -ENOMEM; + + a->ranges[0].base = 0; + a->ranges[0].size = ~0; + do_free = true; + } mutex_lock(®istration_lock); ret = do_remove_conflicting_framebuffers(a, name, primary); mutex_unlock(®istration_lock); + if (do_free) + kfree(a); + return ret; } EXPORT_SYMBOL(remove_conflicting_framebuffers); diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h index b069433e7fc1..1c1e53abb25d 100644 --- a/include/drm/drm_fb_helper.h +++ b/include/drm/drm_fb_helper.h @@ -566,6 +566,16 @@ static inline void drm_fb_helper_output_poll_changed(struct drm_device *dev) #endif +/** + * drm_fb_helper_remove_conflicting_framebuffers - remove firmware framebuffers + * @a: memory range, users of which are to be removed + * @name: requesting driver name + * @primary: also kick vga16fb if present + * + * This function removes framebuffer devices (eg. initialized by firmware) + * which use memory range described by @a. If @a is NULL all such devices are + * removed. + */ static inline int drm_fb_helper_remove_conflicting_framebuffers(struct apertures_struct *a, const char *name, bool primary) -- 2.18.0