From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Wu Subject: [PATCH v2 2/4] bochs: convert to drm_fb_helper_fbdev_setup/teardown Date: Fri, 7 Sep 2018 00:18:08 +0200 Message-ID: <20180906221810.20170-3-peter@lekensteyn.nl> References: <20180906221810.20170-1-peter@lekensteyn.nl> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.lekensteyn.nl (mail.lekensteyn.nl [IPv6:2a02:2308::360:1:25]) by gabe.freedesktop.org (Postfix) with ESMTPS id 27A206E788 for ; Thu, 6 Sep 2018 22:18:18 +0000 (UTC) In-Reply-To: <20180906221810.20170-1-peter@lekensteyn.nl> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Gerd Hoffmann Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org List-Id: dri-devel@lists.freedesktop.org Q3VycmVudGx5IHVubG9hZGluZyBib2Noc19kcm0gKGFmdGVyIHVuYmluZGluZyB0aGUgdnRjb25z b2xlKSByZXN1bHRzIGluCmEgd2FybmluZyBhYm91dCBhIGxlYWtlZCBjb25uZWN0b3I6CgogICAg W2RybTpkcm1fbW9kZV9jb25maWdfY2xlYW51cF0gKkVSUk9SKiBjb25uZWN0b3IgVmlydHVhbC0z IGxlYWtlZCEKCldoaWxlIGludmVzdGlnYXRpbmcgYSBwb3RlbnRpYWwgZml4IEkgbm90aWNlZCB0 aGF0IGEgbG90IG9mIG9wZW4tY29kZWQKZnVuY3Rpb25hbGl0eSBpcyBhbHJlYWR5IGltcGxlbWVu dGVkIGVsc2V3aGVyZSwgc28gc3RhcnQgY29udmVydGluZyBpdDoKYm9jaHNfZmJkZXZfaW5pdCAt PiBkcm1fZmJfaGVscGVyX2ZiZGV2X3NldHVwOiB0cml2aWFsIChzaW1pbGFyIGltcGwpLgpib2No c19mYmRldl9maW5pIC0+IGRybV9mYl9oZWxwZXJfZmJkZXZfdGVhcmRvd246IHJlcXVpcmVzIHVu ZW1iZWRkaW5nCiJzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIiBmcm9tICJzdHJ1Y3QgYm9jaHNfZnJh bWVidWZmZXIiLgoKVW5lbWJlZGRpbmcgZHJtX2ZyYW1lYnVmZmVyIGlzIG1hZGUgZWFzeSB1c2lu ZyBkcm1fZ2VtX2ZiZGV2X2ZiX2NyZWF0ZQp3aGljaCBjYW4gcmVwbGFjZSBib2Noc19mYmRldl9k ZXN0cm95IGFuZCBjdXN0b20gcm91dGluZXMgaW4gYm9jaHNfbW0uYy4KRm9yIHRoaXMgdG8gd29y aywgdGhlIEdFTSBvYmplY3QgaXMgbW92ZWQgaW50byAiZHJtX2ZyYW1lYnVmZmVyIi4gQWZ0ZXIK dGhhdCwgImJvY2hzX2ZyYW1lYnVmZmVyIiBpcyBubyBsb25nZXIgbmVlZGVkIGFuZCB0aGVyZWZv cmUgcmVtb3ZlZC4KClJlbW92ZSB0aGUgdW51c2VkICJzaXplIiBhbmQgImluaXRpYWxpemVkIiBm aWVsZHMgZnJvbSBmYiwgdGhlIGxhdHRlciBpcwpub3QgbmVjZXNzYXJ5IGFzIGRybV9mYl9oZWxw ZXJfZmJkZXZfdGVhcmRvd24gY2FuIGJlIGNhbGxlZCBldmVuIGlmCmJvY2hzZmJfY3JlYXRlIGZh aWxzLiBUaGlzIHRoZW9yeSB3YXMgdGVzdGVkIGJ5IHJldHVybmluZyBlYXJseSBhbmQKbGF0ZSAo anVzdCBiZWZvcmUgZHJtX2dlbV9mYmRldl9mYl9jcmVhdGUpLiBCb3RoIHNjZW5hcmlvcyBmYWls CmdyYWNlZnVsbHkgYWx0aG91Z2ggdGhlIGxhdHRlciBzZWVtcyB0byBsZWFrIHRoZSBvYmplY3Qg ZnJvbQpib2Noc2ZiX2NyZWF0ZV9vYmplY3QgKG5vdCBhIHJlZ3Jlc3Npb24pLgoKR3Vlc3Mgb24g dGhlIHJlYXNvbiBmb3IgdGhlIGVuY29kZXIgbGVhazogZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAg d2FzCnByZXZpb3VzbHkgdXNlZCwgYnV0IGRpZCBub3QgZGVzdHJveSBtdWNoLiBkcm1fZmJfaGVs cGVyX2ZiZGV2X3RlYXJkb3duCmlzIG5vdyB1c2VkIGFuZCBjYWxscyBkcm1fZnJhbWVidWZmZXJf cmVtb3ZlIHdoaWNoIGRvZXMgYSBiaXQgbW9yZSB3b3JrLgoKVGVzdGVkIHdpdGggJ2VjaG8gMCA+ IC9zeXMvY2xhc3MvdnRjb25zb2xlL3Z0Y29uMS9iaW5kOyBybW1vZCBib2Noc19kcm0nCmFuZCBh bHNvIHdpdGggWG9yZyArIGZiZGV2IChzdGFydHggLT4geHRlcm0pLiBUaGUgbGF0dGVyIHRyaWdn ZXJlZCBhCndhcm5pbmcgaW4gdHRtX2JvX3ZtX29wZW4gdGhhdCBleGlzdGVkIGJlZm9yZSwgc2Vl Cmh0dHBzOi8vbGttbC5rZXJuZWwub3JnL3IvMTQ2NDAwMDUzMy0xMzE0MC00LWdpdC1zZW5kLWVt YWlsLW1zdGF1ZHRAc3VzZS5kZQoKQWNrZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0 ZXJAZmZ3bGwuY2g+ClNpZ25lZC1vZmYtYnk6IFBldGVyIFd1IDxwZXRlckBsZWtlbnN0ZXluLm5s PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9ib2Nocy9ib2Nocy5oICAgICAgIHwgMTkgKystLS0tLQog ZHJpdmVycy9ncHUvZHJtL2JvY2hzL2JvY2hzX2ZiZGV2LmMgfCA3OSArKysrKysrLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2JvY2hzL2JvY2hzX2ttcy5jICAgfCAgNyAr LS0KIGRyaXZlcnMvZ3B1L2RybS9ib2Nocy9ib2Noc19tbS5jICAgIHwgNzQgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDE1NyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYm9jaHMvYm9jaHMuaCBi L2RyaXZlcnMvZ3B1L2RybS9ib2Nocy9ib2Nocy5oCmluZGV4IDM3NWJmOTJjZDA0Zi4uODUxNGE4 NGZiZGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYm9jaHMvYm9jaHMuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vYm9jaHMvYm9jaHMuaApAQCAtNTEsMTEgKzUxLDYgQEAgZW51bSBib2No c190eXBlcyB7CiAJQk9DSFNfVU5LTk9XTiwKIH07CiAKLXN0cnVjdCBib2Noc19mcmFtZWJ1ZmZl ciB7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOwotCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqOwotfTsKLQogc3RydWN0IGJvY2hzX2RldmljZSB7CiAJLyogaHcgKi8KIAl2b2lkIF9f aW9tZW0gICAqbW1pbzsKQEAgLTg4LDE1ICs4MywxMSBAQCBzdHJ1Y3QgYm9jaHNfZGV2aWNlIHsK IAogCS8qIGZiZGV2ICovCiAJc3RydWN0IHsKLQkJc3RydWN0IGJvY2hzX2ZyYW1lYnVmZmVyIGdm YjsKKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJCXN0cnVjdCBkcm1fZmJfaGVscGVy IGhlbHBlcjsKLQkJaW50IHNpemU7Ci0JCWJvb2wgaW5pdGlhbGl6ZWQ7CiAJfSBmYjsKIH07CiAK LSNkZWZpbmUgdG9fYm9jaHNfZnJhbWVidWZmZXIoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBi b2Noc19mcmFtZWJ1ZmZlciwgYmFzZSkKLQogc3RydWN0IGJvY2hzX2JvIHsKIAlzdHJ1Y3QgdHRt X2J1ZmZlcl9vYmplY3QgYm87CiAJc3RydWN0IHR0bV9wbGFjZW1lbnQgcGxhY2VtZW50OwpAQCAt MTQ4LDE1ICsxMzksOSBAQCBpbnQgYm9jaHNfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpm aWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogaW50IGJvY2hzX2R1bWJfbW1hcF9vZmZzZXQo c3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgdWlu dDMyX3QgaGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0KTsKIAotaW50IGJvY2hzX2ZyYW1lYnVmZmVy X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBib2Noc19mcmFtZWJ1 ZmZlciAqZ2ZiLAotCQkJICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21k LAotCQkJICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogaW50IGJvY2hzX2JvX3Bpbihz dHJ1Y3QgYm9jaHNfYm8gKmJvLCB1MzIgcGxfZmxhZywgdTY0ICpncHVfYWRkcik7CiBpbnQgYm9j aHNfYm9fdW5waW4oc3RydWN0IGJvY2hzX2JvICpibyk7CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qg ZHJtX21vZGVfY29uZmlnX2Z1bmNzIGJvY2hzX21vZGVfZnVuY3M7Ci0KIC8qIGJvY2hzX2ttcy5j ICovCiBpbnQgYm9jaHNfa21zX2luaXQoc3RydWN0IGJvY2hzX2RldmljZSAqYm9jaHMpOwogdm9p ZCBib2Noc19rbXNfZmluaShzdHJ1Y3QgYm9jaHNfZGV2aWNlICpib2Nocyk7CkBAIC0xNjQsMyAr MTQ5LDUgQEAgdm9pZCBib2Noc19rbXNfZmluaShzdHJ1Y3QgYm9jaHNfZGV2aWNlICpib2Nocyk7 CiAvKiBib2Noc19mYmRldi5jICovCiBpbnQgYm9jaHNfZmJkZXZfaW5pdChzdHJ1Y3QgYm9jaHNf ZGV2aWNlICpib2Nocyk7CiB2b2lkIGJvY2hzX2ZiZGV2X2Zpbmkoc3RydWN0IGJvY2hzX2Rldmlj ZSAqYm9jaHMpOworCitleHRlcm4gY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBi b2Noc19tb2RlX2Z1bmNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JvY2hzL2JvY2hz X2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYm9jaHMvYm9jaHNfZmJkZXYuYwppbmRleCAxNGVi OGQwZDVhMDAuLjhmNGQ2YzA1MmY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JvY2hz L2JvY2hzX2ZiZGV2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JvY2hzL2JvY2hzX2ZiZGV2LmMK QEAgLTYsNiArNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImJvY2hzLmgiCisjaW5jbHVkZSA8ZHJt L2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApA QCAtMTMsOSArMTQsNyBAQCBzdGF0aWMgaW50IGJvY2hzZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAq aW5mbywKIAkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBkcm1fZmJf aGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7Ci0Jc3RydWN0IGJvY2hzX2RldmljZSAqYm9j aHMgPQotCQljb250YWluZXJfb2YoZmJfaGVscGVyLCBzdHJ1Y3QgYm9jaHNfZGV2aWNlLCBmYi5o ZWxwZXIpOwotCXN0cnVjdCBib2Noc19ibyAqYm8gPSBnZW1fdG9fYm9jaHNfYm8oYm9jaHMtPmZi LmdmYi5vYmopOworCXN0cnVjdCBib2Noc19ibyAqYm8gPSBnZW1fdG9fYm9jaHNfYm8oZmJfaGVs cGVyLT5mYi0+b2JqWzBdKTsKIAogCXJldHVybiB0dG1fZmJkZXZfbW1hcCh2bWEsICZiby0+Ym8p OwogfQpAQCAtMTAxLDE5ICsxMDAsMjAgQEAgc3RhdGljIGludCBib2Noc2ZiX2NyZWF0ZShzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAogCiAJLyogaW5pdCBmYiBkZXZpY2UgKi8KIAlpbmZv ID0gZHJtX2ZiX2hlbHBlcl9hbGxvY19mYmkoaGVscGVyKTsKLQlpZiAoSVNfRVJSKGluZm8pKQor CWlmIChJU19FUlIoaW5mbykpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZmJp OiAlbGRcbiIsIFBUUl9FUlIoaW5mbykpOwogCQlyZXR1cm4gUFRSX0VSUihpbmZvKTsKKwl9CiAK IAlpbmZvLT5wYXIgPSAmYm9jaHMtPmZiLmhlbHBlcjsKIAotCXJldCA9IGJvY2hzX2ZyYW1lYnVm ZmVyX2luaXQoYm9jaHMtPmRldiwgJmJvY2hzLT5mYi5nZmIsICZtb2RlX2NtZCwgZ29iaik7Ci0J aWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWJvY2hzLT5mYi5zaXplID0gc2l6ZTsKKwlmYiA9 IGRybV9nZW1fZmJkZXZfZmJfY3JlYXRlKGJvY2hzLT5kZXYsIHNpemVzLCAwLCBnb2JqLCBOVUxM KTsKKwlpZiAoSVNfRVJSKGZiKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZnJh bWVidWZmZXI6ICVsZFxuIiwgUFRSX0VSUihmYikpOworCQlyZXR1cm4gUFRSX0VSUihmYik7CisJ fQogCiAJLyogc2V0dXAgaGVscGVyICovCi0JZmIgPSAmYm9jaHMtPmZiLmdmYi5iYXNlOwogCWJv Y2hzLT5mYi5oZWxwZXIuZmIgPSBmYjsKIAogCXN0cmNweShpbmZvLT5maXguaWQsICJib2Noc2Ry bWZiIik7CkBAIC0xMzAsMjcgKzEzMCw2IEBAIHN0YXRpYyBpbnQgYm9jaHNmYl9jcmVhdGUoc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKIAlkcm1fdm1hX29mZnNldF9yZW1vdmUoJmJvLT5i by5iZGV2LT52bWFfbWFuYWdlciwgJmJvLT5iby52bWFfbm9kZSk7CiAJaW5mby0+Zml4LnNtZW1f c3RhcnQgPSAwOwogCWluZm8tPmZpeC5zbWVtX2xlbiA9IHNpemU7Ci0KLQlib2Nocy0+ZmIuaW5p dGlhbGl6ZWQgPSB0cnVlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJvY2hzX2ZiZGV2 X2Rlc3Ryb3koc3RydWN0IGJvY2hzX2RldmljZSAqYm9jaHMpCi17Ci0Jc3RydWN0IGJvY2hzX2Zy YW1lYnVmZmVyICpnZmIgPSAmYm9jaHMtPmZiLmdmYjsKLQotCURSTV9ERUJVR19EUklWRVIoIlxu Iik7Ci0KLQlkcm1fZmJfaGVscGVyX3VucmVnaXN0ZXJfZmJpKCZib2Nocy0+ZmIuaGVscGVyKTsK LQotCWlmIChnZmItPm9iaikgewotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tl ZChnZmItPm9iaik7Ci0JCWdmYi0+b2JqID0gTlVMTDsKLQl9Ci0KLQlkcm1fZnJhbWVidWZmZXJf dW5yZWdpc3Rlcl9wcml2YXRlKCZnZmItPmJhc2UpOwotCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVw KCZnZmItPmJhc2UpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1OCw0MSArMTM3LDE3IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyBib2Noc19mYl9oZWxwZXJfZnVu Y3MgPSB7CiAJLmZiX3Byb2JlID0gYm9jaHNmYl9jcmVhdGUsCiB9OwogCitjb25zdCBzdHJ1Y3Qg ZHJtX21vZGVfY29uZmlnX2Z1bmNzIGJvY2hzX21vZGVfZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9 IGRybV9nZW1fZmJfY3JlYXRlLAorfTsKKwogaW50IGJvY2hzX2ZiZGV2X2luaXQoc3RydWN0IGJv Y2hzX2RldmljZSAqYm9jaHMpCiB7Ci0JaW50IHJldDsKLQotCWRybV9mYl9oZWxwZXJfcHJlcGFy ZShib2Nocy0+ZGV2LCAmYm9jaHMtPmZiLmhlbHBlciwKLQkJCSAgICAgICZib2Noc19mYl9oZWxw ZXJfZnVuY3MpOwotCi0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0KGJvY2hzLT5kZXYsICZib2No cy0+ZmIuaGVscGVyLCAxKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gZHJt X2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKCZib2Nocy0+ZmIuaGVscGVyKTsK LQlpZiAocmV0KQotCQlnb3RvIGZpbmk7Ci0KLQlkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1 bmN0aW9ucyhib2Nocy0+ZGV2KTsKLQotCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25m aWcoJmJvY2hzLT5mYi5oZWxwZXIsIDMyKTsKLQlpZiAocmV0KQotCQlnb3RvIGZpbmk7Ci0KLQly ZXR1cm4gMDsKLQotZmluaToKLQlkcm1fZmJfaGVscGVyX2ZpbmkoJmJvY2hzLT5mYi5oZWxwZXIp OwotCXJldHVybiByZXQ7CisJcmV0dXJuIGRybV9mYl9oZWxwZXJfZmJkZXZfc2V0dXAoYm9jaHMt PmRldiwgJmJvY2hzLT5mYi5oZWxwZXIsCisJCQkJCSAmYm9jaHNfZmJfaGVscGVyX2Z1bmNzLCAz MiwgMSk7CiB9CiAKIHZvaWQgYm9jaHNfZmJkZXZfZmluaShzdHJ1Y3QgYm9jaHNfZGV2aWNlICpi b2NocykKIHsKLQlpZiAoYm9jaHMtPmZiLmluaXRpYWxpemVkKQotCQlib2Noc19mYmRldl9kZXN0 cm95KGJvY2hzKTsKLQotCWlmIChib2Nocy0+ZmIuaGVscGVyLmZiZGV2KQotCQlkcm1fZmJfaGVs cGVyX2ZpbmkoJmJvY2hzLT5mYi5oZWxwZXIpOwotCi0JYm9jaHMtPmZiLmluaXRpYWxpemVkID0g ZmFsc2U7CisJZHJtX2ZiX2hlbHBlcl9mYmRldl90ZWFyZG93bihib2Nocy0+ZGV2KTsKIH0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ib2Nocy9ib2Noc19rbXMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9ib2Nocy9ib2Noc19rbXMuYwppbmRleCBjYTVhOWFmZGQ1Y2YuLmVhOWE0M2QzMWJmMSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JvY2hzL2JvY2hzX2ttcy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9ib2Nocy9ib2Noc19rbXMuYwpAQCAtMzUsMTQgKzM1LDEyIEBAIHN0YXRpYyBp bnQgYm9jaHNfY3J0Y19tb2RlX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHgs IGludCB5LAogewogCXN0cnVjdCBib2Noc19kZXZpY2UgKmJvY2hzID0KIAkJY29udGFpbmVyX29m KGNydGMsIHN0cnVjdCBib2Noc19kZXZpY2UsIGNydGMpOwotCXN0cnVjdCBib2Noc19mcmFtZWJ1 ZmZlciAqYm9jaHNfZmI7CiAJc3RydWN0IGJvY2hzX2JvICpibzsKIAl1NjQgZ3B1X2FkZHIgPSAw OwogCWludCByZXQ7CiAKIAlpZiAob2xkX2ZiKSB7Ci0JCWJvY2hzX2ZiID0gdG9fYm9jaHNfZnJh bWVidWZmZXIob2xkX2ZiKTsKLQkJYm8gPSBnZW1fdG9fYm9jaHNfYm8oYm9jaHNfZmItPm9iaik7 CisJCWJvID0gZ2VtX3RvX2JvY2hzX2JvKG9sZF9mYi0+b2JqWzBdKTsKIAkJcmV0ID0gdHRtX2Jv X3Jlc2VydmUoJmJvLT5ibywgdHJ1ZSwgZmFsc2UsIE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQlE Uk1fRVJST1IoImZhaWxlZCB0byByZXNlcnZlIG9sZF9mYiBib1xuIik7CkBAIC01NSw4ICs1Myw3 IEBAIHN0YXRpYyBpbnQgYm9jaHNfY3J0Y19tb2RlX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywgaW50IHgsIGludCB5LAogCWlmIChXQVJOX09OKGNydGMtPnByaW1hcnktPmZiID09IE5V TEwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJvY2hzX2ZiID0gdG9fYm9jaHNfZnJhbWVidWZm ZXIoY3J0Yy0+cHJpbWFyeS0+ZmIpOwotCWJvID0gZ2VtX3RvX2JvY2hzX2JvKGJvY2hzX2ZiLT5v YmopOworCWJvID0gZ2VtX3RvX2JvY2hzX2JvKGNydGMtPnByaW1hcnktPmZiLT5vYmpbMF0pOwog CXJldCA9IHR0bV9ib19yZXNlcnZlKCZiby0+Ym8sIHRydWUsIGZhbHNlLCBOVUxMKTsKIAlpZiAo cmV0KQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JvY2hzL2Jv Y2hzX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vYm9jaHMvYm9jaHNfbW0uYwppbmRleCBjOWM3MDk3 MDMwY2EuLmE2MWMxZWNiMmJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JvY2hzL2Jv Y2hzX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JvY2hzL2JvY2hzX21tLmMKQEAgLTQ1Nyw3 NyArNDU3LDMgQEAgaW50IGJvY2hzX2R1bWJfbW1hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpm aWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNl X3VubG9ja2VkKG9iaik7CiAJcmV0dXJuIDA7CiB9Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQot c3RhdGljIHZvaWQgYm9jaHNfdXNlcl9mcmFtZWJ1ZmZlcl9kZXN0cm95KHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiKQotewotCXN0cnVjdCBib2Noc19mcmFtZWJ1ZmZlciAqYm9jaHNfZmIgPSB0 b19ib2Noc19mcmFtZWJ1ZmZlcihmYik7Ci0KLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91 bmxvY2tlZChib2Noc19mYi0+b2JqKTsKLQlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmYik7Ci0J a2ZyZWUoZmIpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5j cyBib2Noc19mYl9mdW5jcyA9IHsKLQkuZGVzdHJveSA9IGJvY2hzX3VzZXJfZnJhbWVidWZmZXJf ZGVzdHJveSwKLX07Ci0KLWludCBib2Noc19mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCi0JCQkgICBzdHJ1Y3QgYm9jaHNfZnJhbWVidWZmZXIgKmdmYiwKLQkJCSAgIGNv bnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCwKLQkJCSAgIHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqb2JqKQotewotCWludCByZXQ7Ci0KLQlkcm1faGVscGVyX21vZGVfZmlsbF9m Yl9zdHJ1Y3QoZGV2LCAmZ2ZiLT5iYXNlLCBtb2RlX2NtZCk7Ci0JZ2ZiLT5vYmogPSBvYmo7Ci0J cmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCAmZ2ZiLT5iYXNlLCAmYm9jaHNfZmJfZnVu Y3MpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJkcm1fZnJhbWVidWZmZXJfaW5pdCBmYWls ZWQ6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKgotYm9jaHNfdXNlcl9mcmFtZWJ1ZmZlcl9jcmVh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmls cCwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCkKLXsK LQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgYm9jaHNfZnJhbWVidWZmZXIg KmJvY2hzX2ZiOwotCWludCByZXQ7Ci0KLQlEUk1fREVCVUdfRFJJVkVSKCIlZHglZCwgZm9ybWF0 ICVjJWMlYyVjXG4iLAotCSAgICAgICBtb2RlX2NtZC0+d2lkdGgsIG1vZGVfY21kLT5oZWlnaHQs Ci0JICAgICAgIChtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0KSAgICAgICAmIDB4ZmYsCi0JICAgICAg IChtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0ID4+IDgpICAmIDB4ZmYsCi0JICAgICAgIChtb2RlX2Nt ZC0+cGl4ZWxfZm9ybWF0ID4+IDE2KSAmIDB4ZmYsCi0JICAgICAgIChtb2RlX2NtZC0+cGl4ZWxf Zm9ybWF0ID4+IDI0KSAmIDB4ZmYpOwotCi0JaWYgKG1vZGVfY21kLT5waXhlbF9mb3JtYXQgIT0g RFJNX0ZPUk1BVF9YUkdCODg4OCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Ci0KLQlvYmog PSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlscCwgbW9kZV9jbWQtPmhhbmRsZXNbMF0pOwotCWlm IChvYmogPT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Ci0KLQlib2Noc19mYiA9 IGt6YWxsb2Moc2l6ZW9mKCpib2Noc19mYiksIEdGUF9LRVJORUwpOwotCWlmICghYm9jaHNfZmIp IHsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKLQkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCi0JcmV0ID0gYm9jaHNfZnJhbWVidWZmZXJfaW5pdChk ZXYsIGJvY2hzX2ZiLCBtb2RlX2NtZCwgb2JqKTsKLQlpZiAocmV0KSB7Ci0JCWRybV9nZW1fb2Jq ZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7Ci0JCWtmcmVlKGJvY2hzX2ZiKTsKLQkJcmV0 dXJuIEVSUl9QVFIocmV0KTsKLQl9Ci0JcmV0dXJuICZib2Noc19mYi0+YmFzZTsKLX0KLQotY29u c3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBib2Noc19tb2RlX2Z1bmNzID0gewotCS5m Yl9jcmVhdGUgPSBib2Noc191c2VyX2ZyYW1lYnVmZmVyX2NyZWF0ZSwKLX07Ci0tIAoyLjE4LjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= 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=-2.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, URIBL_BLOCKED,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 548CBC4321E for ; Thu, 6 Sep 2018 22:18:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E9C1B2083D for ; Thu, 6 Sep 2018 22:18:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lekensteyn.nl header.i=@lekensteyn.nl header.b="eR0QjXEc" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E9C1B2083D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lekensteyn.nl Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728530AbeIGCz5 (ORCPT ); Thu, 6 Sep 2018 22:55:57 -0400 Received: from lekensteyn.nl ([178.21.112.251]:35275 "EHLO lekensteyn.nl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727785AbeIGCzy (ORCPT ); Thu, 6 Sep 2018 22:55:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lekensteyn.nl; s=s2048-2015-q1; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=OJ0vrBcWUBttYkCphcfVAggucY4nIcj0n8YXd1H2fEk=; b=eR0QjXEceGMiOcgVqU5NJtm0nOVXyxw11avGCYcazuyXQhdhI6CZgJEqAzK+gP+FamSUmMVL/v6pbYR5ipJgToaZgOcc9aMHGL0bzoY8ltQbrGq5JZ/J3hBq6b0xQBRFOHSDs7U7WYhnq3xL93GMOc4bQl+/RHuuQ2eOZ45B3YJduYh6WJm0F4LEShZRQ25cj7yAj6OOuR5Py0JfFV/7fpJIVXvDN/MOMrQni/0DjzYLLX0jsH8fUiM3cIWF4jZgiAQN1qnrmn4k3pi+DsS9/C6W5ShssXidPM8SEjczuzasS1mVxeQ093TeGGKQG+AQBCpbKXU4KbCm3bKhJ8qtKA==; Received: by lekensteyn.nl with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1fy2bN-0005Us-28; Fri, 07 Sep 2018 00:18:13 +0200 From: Peter Wu To: Gerd Hoffmann Cc: virtualization@lists.linux-foundation.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v2 2/4] bochs: convert to drm_fb_helper_fbdev_setup/teardown Date: Fri, 7 Sep 2018 00:18:08 +0200 Message-Id: <20180906221810.20170-3-peter@lekensteyn.nl> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180906221810.20170-1-peter@lekensteyn.nl> References: <20180906221810.20170-1-peter@lekensteyn.nl> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently unloading bochs_drm (after unbinding the vtconsole) results in a warning about a leaked connector: [drm:drm_mode_config_cleanup] *ERROR* connector Virtual-3 leaked! While investigating a potential fix I noticed that a lot of open-coded functionality is already implemented elsewhere, so start converting it: bochs_fbdev_init -> drm_fb_helper_fbdev_setup: trivial (similar impl). bochs_fbdev_fini -> drm_fb_helper_fbdev_teardown: requires unembedding "struct drm_framebuffer" from "struct bochs_framebuffer". Unembedding drm_framebuffer is made easy using drm_gem_fbdev_fb_create which can replace bochs_fbdev_destroy and custom routines in bochs_mm.c. For this to work, the GEM object is moved into "drm_framebuffer". After that, "bochs_framebuffer" is no longer needed and therefore removed. Remove the unused "size" and "initialized" fields from fb, the latter is not necessary as drm_fb_helper_fbdev_teardown can be called even if bochsfb_create fails. This theory was tested by returning early and late (just before drm_gem_fbdev_fb_create). Both scenarios fail gracefully although the latter seems to leak the object from bochsfb_create_object (not a regression). Guess on the reason for the encoder leak: drm_framebuffer_cleanup was previously used, but did not destroy much. drm_fb_helper_fbdev_teardown is now used and calls drm_framebuffer_remove which does a bit more work. Tested with 'echo 0 > /sys/class/vtconsole/vtcon1/bind; rmmod bochs_drm' and also with Xorg + fbdev (startx -> xterm). The latter triggered a warning in ttm_bo_vm_open that existed before, see https://lkml.kernel.org/r/1464000533-13140-4-git-send-email-mstaudt@suse.de Acked-by: Daniel Vetter Signed-off-by: Peter Wu --- drivers/gpu/drm/bochs/bochs.h | 19 ++----- drivers/gpu/drm/bochs/bochs_fbdev.c | 79 +++++++---------------------- drivers/gpu/drm/bochs/bochs_kms.c | 7 +-- drivers/gpu/drm/bochs/bochs_mm.c | 74 --------------------------- 4 files changed, 22 insertions(+), 157 deletions(-) diff --git a/drivers/gpu/drm/bochs/bochs.h b/drivers/gpu/drm/bochs/bochs.h index 375bf92cd04f..8514a84fbdbe 100644 --- a/drivers/gpu/drm/bochs/bochs.h +++ b/drivers/gpu/drm/bochs/bochs.h @@ -51,11 +51,6 @@ enum bochs_types { BOCHS_UNKNOWN, }; -struct bochs_framebuffer { - struct drm_framebuffer base; - struct drm_gem_object *obj; -}; - struct bochs_device { /* hw */ void __iomem *mmio; @@ -88,15 +83,11 @@ struct bochs_device { /* fbdev */ struct { - struct bochs_framebuffer gfb; + struct drm_framebuffer *fb; struct drm_fb_helper helper; - int size; - bool initialized; } fb; }; -#define to_bochs_framebuffer(x) container_of(x, struct bochs_framebuffer, base) - struct bochs_bo { struct ttm_buffer_object bo; struct ttm_placement placement; @@ -148,15 +139,9 @@ int bochs_dumb_create(struct drm_file *file, struct drm_device *dev, int bochs_dumb_mmap_offset(struct drm_file *file, struct drm_device *dev, uint32_t handle, uint64_t *offset); -int bochs_framebuffer_init(struct drm_device *dev, - struct bochs_framebuffer *gfb, - const struct drm_mode_fb_cmd2 *mode_cmd, - struct drm_gem_object *obj); int bochs_bo_pin(struct bochs_bo *bo, u32 pl_flag, u64 *gpu_addr); int bochs_bo_unpin(struct bochs_bo *bo); -extern const struct drm_mode_config_funcs bochs_mode_funcs; - /* bochs_kms.c */ int bochs_kms_init(struct bochs_device *bochs); void bochs_kms_fini(struct bochs_device *bochs); @@ -164,3 +149,5 @@ void bochs_kms_fini(struct bochs_device *bochs); /* bochs_fbdev.c */ int bochs_fbdev_init(struct bochs_device *bochs); void bochs_fbdev_fini(struct bochs_device *bochs); + +extern const struct drm_mode_config_funcs bochs_mode_funcs; diff --git a/drivers/gpu/drm/bochs/bochs_fbdev.c b/drivers/gpu/drm/bochs/bochs_fbdev.c index 14eb8d0d5a00..8f4d6c052f7b 100644 --- a/drivers/gpu/drm/bochs/bochs_fbdev.c +++ b/drivers/gpu/drm/bochs/bochs_fbdev.c @@ -6,6 +6,7 @@ */ #include "bochs.h" +#include /* ---------------------------------------------------------------------- */ @@ -13,9 +14,7 @@ static int bochsfb_mmap(struct fb_info *info, struct vm_area_struct *vma) { struct drm_fb_helper *fb_helper = info->par; - struct bochs_device *bochs = - container_of(fb_helper, struct bochs_device, fb.helper); - struct bochs_bo *bo = gem_to_bochs_bo(bochs->fb.gfb.obj); + struct bochs_bo *bo = gem_to_bochs_bo(fb_helper->fb->obj[0]); return ttm_fbdev_mmap(vma, &bo->bo); } @@ -101,19 +100,20 @@ static int bochsfb_create(struct drm_fb_helper *helper, /* init fb device */ info = drm_fb_helper_alloc_fbi(helper); - if (IS_ERR(info)) + if (IS_ERR(info)) { + DRM_ERROR("Failed to allocate fbi: %ld\n", PTR_ERR(info)); return PTR_ERR(info); + } info->par = &bochs->fb.helper; - ret = bochs_framebuffer_init(bochs->dev, &bochs->fb.gfb, &mode_cmd, gobj); - if (ret) - return ret; - - bochs->fb.size = size; + fb = drm_gem_fbdev_fb_create(bochs->dev, sizes, 0, gobj, NULL); + if (IS_ERR(fb)) { + DRM_ERROR("Failed to create framebuffer: %ld\n", PTR_ERR(fb)); + return PTR_ERR(fb); + } /* setup helper */ - fb = &bochs->fb.gfb.base; bochs->fb.helper.fb = fb; strcpy(info->fix.id, "bochsdrmfb"); @@ -130,27 +130,6 @@ static int bochsfb_create(struct drm_fb_helper *helper, drm_vma_offset_remove(&bo->bo.bdev->vma_manager, &bo->bo.vma_node); info->fix.smem_start = 0; info->fix.smem_len = size; - - bochs->fb.initialized = true; - return 0; -} - -static int bochs_fbdev_destroy(struct bochs_device *bochs) -{ - struct bochs_framebuffer *gfb = &bochs->fb.gfb; - - DRM_DEBUG_DRIVER("\n"); - - drm_fb_helper_unregister_fbi(&bochs->fb.helper); - - if (gfb->obj) { - drm_gem_object_unreference_unlocked(gfb->obj); - gfb->obj = NULL; - } - - drm_framebuffer_unregister_private(&gfb->base); - drm_framebuffer_cleanup(&gfb->base); - return 0; } @@ -158,41 +137,17 @@ static const struct drm_fb_helper_funcs bochs_fb_helper_funcs = { .fb_probe = bochsfb_create, }; +const struct drm_mode_config_funcs bochs_mode_funcs = { + .fb_create = drm_gem_fb_create, +}; + int bochs_fbdev_init(struct bochs_device *bochs) { - int ret; - - drm_fb_helper_prepare(bochs->dev, &bochs->fb.helper, - &bochs_fb_helper_funcs); - - ret = drm_fb_helper_init(bochs->dev, &bochs->fb.helper, 1); - if (ret) - return ret; - - ret = drm_fb_helper_single_add_all_connectors(&bochs->fb.helper); - if (ret) - goto fini; - - drm_helper_disable_unused_functions(bochs->dev); - - ret = drm_fb_helper_initial_config(&bochs->fb.helper, 32); - if (ret) - goto fini; - - return 0; - -fini: - drm_fb_helper_fini(&bochs->fb.helper); - return ret; + return drm_fb_helper_fbdev_setup(bochs->dev, &bochs->fb.helper, + &bochs_fb_helper_funcs, 32, 1); } void bochs_fbdev_fini(struct bochs_device *bochs) { - if (bochs->fb.initialized) - bochs_fbdev_destroy(bochs); - - if (bochs->fb.helper.fbdev) - drm_fb_helper_fini(&bochs->fb.helper); - - bochs->fb.initialized = false; + drm_fb_helper_fbdev_teardown(bochs->dev); } diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c index ca5a9afdd5cf..ea9a43d31bf1 100644 --- a/drivers/gpu/drm/bochs/bochs_kms.c +++ b/drivers/gpu/drm/bochs/bochs_kms.c @@ -35,14 +35,12 @@ static int bochs_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, { struct bochs_device *bochs = container_of(crtc, struct bochs_device, crtc); - struct bochs_framebuffer *bochs_fb; struct bochs_bo *bo; u64 gpu_addr = 0; int ret; if (old_fb) { - bochs_fb = to_bochs_framebuffer(old_fb); - bo = gem_to_bochs_bo(bochs_fb->obj); + bo = gem_to_bochs_bo(old_fb->obj[0]); ret = ttm_bo_reserve(&bo->bo, true, false, NULL); if (ret) { DRM_ERROR("failed to reserve old_fb bo\n"); @@ -55,8 +53,7 @@ static int bochs_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, if (WARN_ON(crtc->primary->fb == NULL)) return -EINVAL; - bochs_fb = to_bochs_framebuffer(crtc->primary->fb); - bo = gem_to_bochs_bo(bochs_fb->obj); + bo = gem_to_bochs_bo(crtc->primary->fb->obj[0]); ret = ttm_bo_reserve(&bo->bo, true, false, NULL); if (ret) return ret; diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c index c9c7097030ca..a61c1ecb2bdc 100644 --- a/drivers/gpu/drm/bochs/bochs_mm.c +++ b/drivers/gpu/drm/bochs/bochs_mm.c @@ -457,77 +457,3 @@ int bochs_dumb_mmap_offset(struct drm_file *file, struct drm_device *dev, drm_gem_object_unreference_unlocked(obj); return 0; } - -/* ---------------------------------------------------------------------- */ - -static void bochs_user_framebuffer_destroy(struct drm_framebuffer *fb) -{ - struct bochs_framebuffer *bochs_fb = to_bochs_framebuffer(fb); - - drm_gem_object_unreference_unlocked(bochs_fb->obj); - drm_framebuffer_cleanup(fb); - kfree(fb); -} - -static const struct drm_framebuffer_funcs bochs_fb_funcs = { - .destroy = bochs_user_framebuffer_destroy, -}; - -int bochs_framebuffer_init(struct drm_device *dev, - struct bochs_framebuffer *gfb, - const struct drm_mode_fb_cmd2 *mode_cmd, - struct drm_gem_object *obj) -{ - int ret; - - drm_helper_mode_fill_fb_struct(dev, &gfb->base, mode_cmd); - gfb->obj = obj; - ret = drm_framebuffer_init(dev, &gfb->base, &bochs_fb_funcs); - if (ret) { - DRM_ERROR("drm_framebuffer_init failed: %d\n", ret); - return ret; - } - return 0; -} - -static struct drm_framebuffer * -bochs_user_framebuffer_create(struct drm_device *dev, - struct drm_file *filp, - const struct drm_mode_fb_cmd2 *mode_cmd) -{ - struct drm_gem_object *obj; - struct bochs_framebuffer *bochs_fb; - int ret; - - DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n", - mode_cmd->width, mode_cmd->height, - (mode_cmd->pixel_format) & 0xff, - (mode_cmd->pixel_format >> 8) & 0xff, - (mode_cmd->pixel_format >> 16) & 0xff, - (mode_cmd->pixel_format >> 24) & 0xff); - - if (mode_cmd->pixel_format != DRM_FORMAT_XRGB8888) - return ERR_PTR(-ENOENT); - - obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]); - if (obj == NULL) - return ERR_PTR(-ENOENT); - - bochs_fb = kzalloc(sizeof(*bochs_fb), GFP_KERNEL); - if (!bochs_fb) { - drm_gem_object_unreference_unlocked(obj); - return ERR_PTR(-ENOMEM); - } - - ret = bochs_framebuffer_init(dev, bochs_fb, mode_cmd, obj); - if (ret) { - drm_gem_object_unreference_unlocked(obj); - kfree(bochs_fb); - return ERR_PTR(ret); - } - return &bochs_fb->base; -} - -const struct drm_mode_config_funcs bochs_mode_funcs = { - .fb_create = bochs_user_framebuffer_create, -}; -- 2.18.0