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.3 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,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 515C6C34026 for ; Mon, 17 Feb 2020 15:45:20 +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 246552467B for ; Mon, 17 Feb 2020 15:45:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Tx/CYjxZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 246552467B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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 9980A6E97F; Mon, 17 Feb 2020 15:45:17 +0000 (UTC) Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id E6EAD6E980; Mon, 17 Feb 2020 15:45:15 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id m16so20266456wrx.11; Mon, 17 Feb 2020 07:45:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=UJYLvYhU/BqgpOkWhQ0m0kEeKCv5RPci/PQtxcc6Sms=; b=Tx/CYjxZEk0/Xevp7mrQ/aP9gQWxxotISyfE7+iXMWlxL4mR1huTeWDicC+HbvMp9s 2lZq5FIMoXIZHCZBG4sbo9yv1FOmkXwLR+3YZNd1eFEZeK4R7rC3zcSIGNyJYUkBl++o EfxRgGhwAyVPvDen838UkNKRs8JLHMC2RHoUprlOpajNkkzu6iE0M133jKQ77ZKX3zTv ANSGQrlqWnaozEFu2eSq2jdOT4upTnU5+cGfNlVPDnWdaTZepolm3aV0rmTqj0tJfHxP MsN/mgmaSMXFBwhRHXXRrz8G9gLpR/W8xzYAZXTXiuNPjTTDhApfN9lQui8JDywexSn9 2YXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UJYLvYhU/BqgpOkWhQ0m0kEeKCv5RPci/PQtxcc6Sms=; b=QUeeQVlWaU4ePOvNgr8hQf7s9H91LXxs4z01A0cywcmTOnExb2OcOI9+KhSSbwiyHk H34iEN4PogAsDNQ+uJLf6LoHT+0wYEz1oUK7AgZzCTxq8aF3q1bdSdGosuRU/zVurZ66 UDOGJAJVG0IpBKPAe2xNHOwH4gZdbbxftniKV+FNwksBenRltK0UfcztdaaGvMz8SrAJ KtI6NmkjFweshzBY2eh9p/ZTiPxoduwaViOXBB04WEQQKAaRSCemx905qPzFgZAgsOxo O9WZadwuFJzyaTREzjAjZbAVQtzXCQoZwYbExCmGZSVRl/fFfATDI8IKFOwa+AJmK2K4 XhmA== X-Gm-Message-State: APjAAAUe8PoPFBVCI7AaqMIXWTavbwmoU36B+2yuaGoNepLBpBUg3MMp uwsZ+MYqtj9BttDC5M7fgOqbatGy X-Google-Smtp-Source: APXvYqzWsqZUjs2VfoAK40fa2+bWQXMLfMfldGRsgRQDRhkQNwkjAkKFE6JVhwiXEpPZ1HGtVCvxYw== X-Received: by 2002:a5d:4b88:: with SMTP id b8mr23030241wrt.343.1581954313942; Mon, 17 Feb 2020 07:45:13 -0800 (PST) Received: from abel.fritz.box ([2a02:908:1252:fb60:180d:d2d6:6ff9:a6cb]) by smtp.gmail.com with ESMTPSA id r6sm1372658wrq.92.2020.02.17.07.45.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2020 07:45:13 -0800 (PST) From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" X-Google-Original-From: =?UTF-8?q?Christian=20K=C3=B6nig?= To: dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-media@vger.kernel.org, intel-gfx@lists.freedesktop.org, daniel@ffwll.ch Subject: [PATCH 1/5] dma-buf: add dynamic DMA-buf handling v14 Date: Mon, 17 Feb 2020 16:45:05 +0100 Message-Id: <20200217154509.2265-2-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200217154509.2265-1-christian.koenig@amd.com> References: <20200217154509.2265-1-christian.koenig@amd.com> MIME-Version: 1.0 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gdGhlIGV4cG9ydGVyIHNpZGUgd2UgYWRkIG9wdGlvbmFsIGV4cGxpY2l0IHBpbm5pbmcgY2Fs bGJhY2tzLiBXaGljaCBhcmUKY2FsbGVkIHdoZW4gdGhlIGltcG9ydGVyIGRvZXNuJ3QgaW1wbGVt ZW50IGR5bmFtaWMgaGFuZGxpbmcsIG1vdmUgbm90aWZpY2F0aW9uCm9yIG5lZWQgdGhlIERNQS1i dWYgbG9ja2VkIGluIHBsYWNlIGZvciBpdHMgdXNlIGNhc2UuCgpPbiB0aGUgaW1wb3J0ZXIgc2lk ZSB3ZSBhZGQgYW4gb3B0aW9uYWwgbW92ZV9ub3RpZnkgY2FsbGJhY2suIFRoaXMgY2FsbGJhY2sg aXMKdXNlZCBieSB0aGUgZXhwb3J0ZXIgdG8gaW5mb3JtIHRoZSBpbXBvcnRlcnMgdGhhdCB0aGVp ciBtYXBwaW5ncyBzaG91bGQgYmUKZGVzdHJveWVkIGFzIHNvb24gYXMgcG9zc2libGUuCgpUaGlz IGFsbG93cyB0aGUgZXhwb3J0ZXIgdG8gcHJvdmlkZSB0aGUgbWFwcGluZ3Mgd2l0aG91dCB0aGUg bmVlZCB0byBwaW4KdGhlIGJhY2tpbmcgc3RvcmUuCgp2MjogZG9uJ3QgdHJ5IHRvIGludmFsaWRh dGUgbWFwcGluZ3Mgd2hlbiB0aGUgY2FsbGJhY2sgaXMgTlVMTCwKICAgIGxvY2sgdGhlIHJlc2Vy dmF0aW9uIG9iaiB3aGlsZSB1c2luZyB0aGUgYXR0YWNobWVudHMsCiAgICBhZGQgaGVscGVyIHRv IHNldCB0aGUgY2FsbGJhY2sKdjM6IG1vdmUgZmxhZyBmb3IgaW52YWxpZGF0aW9uIHN1cHBvcnQg aW50byB0aGUgRE1BLWJ1ZiwKICAgIHVzZSBuZXcgYXR0YWNoX2luZm8gc3RydWN0dXJlIHRvIHNl dCB0aGUgY2FsbGJhY2sKdjQ6IHVzZSBpbXBvcnRlcl9wcml2IGZpZWxkIGluc3RlYWQgb2YgbWFu Z2xpbmcgZXhwb3J0ZXIgcHJpdi4KdjU6IGRyb3AgaW52YWxpZGF0aW9uX3N1cHBvcnRlZCBmbGFn CnY2OiBzcXVhc2ggdG9nZXRoZXIgd2l0aCBwaW4vdW5waW4gY2hhbmdlcwp2NzogcGluL3VucGlu IHRha2VzIGFuIGF0dGFjaG1lbnQgbm93CnY4OiBudWtlIGRtYV9idWZfYXR0YWNobWVudF8obWFw fHVubWFwKV9sb2NrZWQsCiAgICBldmVyeXRoaW5nIGlzIG5vdyBoYW5kbGVkIGJhY2t3YXJkIGNv bXBhdGlibGUKdjk6IGFsd2F5cyBjYWNoZSB3aGVuIGV4cG9ydC9pbXBvcnRlciBkb24ndCBhZ3Jl ZSBvbiBkeW5hbWljIGhhbmRsaW5nCnYxMDogbWluaW1hbCBzdHlsZSBjbGVhbnVwCnYxMTogZHJv cCBhdXRvbWF0aWNhbGx5IHJlLWVudHJ5IGF2b2lkYW5jZQp2MTI6IHJlbmFtZSBjYWxsYmFjayB0 byBtb3ZlX25vdGlmeQp2MTM6IGFkZCBtaWdodF9sb2NrIGluIGFwcHJvcHJpYXRlIHBsYWNlcwp2 MTQ6IHJlYmFzZSBvbiBzZXBhcmF0ZWQgbG9ja2luZyBjaGFuZ2UKClNpZ25lZC1vZmYtYnk6IENo cmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2Rt YS1idWYvZG1hLWJ1Zi5jICAgICAgICAgICAgICAgICAgIHwgMTA2ICsrKysrKysrKysrKysrKysr Ky0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jIHwgICA2ICst CiBpbmNsdWRlL2xpbnV4L2RtYS1idWYuaCAgICAgICAgICAgICAgICAgICAgIHwgIDc4ICsrKysr KysrKysrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDE3MCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9k bWEtYnVmL2RtYS1idWYuYwppbmRleCBkMzc3YjRjYTY2YmYuLmNlMjkzY2VlNzZlZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYworKysgYi9kcml2ZXJzL2RtYS1idWYvZG1h LWJ1Zi5jCkBAIC01MjksNiArNTI5LDEwIEBAIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9y dChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pCiAJCSAgICBleHBf aW5mby0+b3BzLT5keW5hbWljX21hcHBpbmcpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK IAorCWlmIChXQVJOX09OKCFleHBfaW5mby0+b3BzLT5keW5hbWljX21hcHBpbmcgJiYKKwkJICAg IChleHBfaW5mby0+b3BzLT5waW4gfHwgZXhwX2luZm8tPm9wcy0+dW5waW4pKSkKKwkJcmV0dXJu IEVSUl9QVFIoLUVJTlZBTCk7CisKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGV4cF9pbmZvLT5vd25l cikpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCkBAIC02NTMsNyArNjU3LDggQEAgRVhQ T1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9wdXQpOwogICogY2FsbHMgYXR0YWNoKCkgb2YgZG1hX2J1 Zl9vcHMgdG8gYWxsb3cgZGV2aWNlLXNwZWNpZmljIGF0dGFjaCBmdW5jdGlvbmFsaXR5CiAgKiBA ZG1hYnVmOgkJW2luXQlidWZmZXIgdG8gYXR0YWNoIGRldmljZSB0by4KICAqIEBkZXY6CQlbaW5d CWRldmljZSB0byBiZSBhdHRhY2hlZC4KLSAqIEBkeW5hbWljX21hcHBpbmc6CVtpbl0JY2FsbGlu ZyBjb252ZW50aW9uIGZvciBtYXAvdW5tYXAKKyAqIEBpbXBvcnRlcl9vcHMJW2luXQlpbXBvcnRl ciBvcGVyYXRpb25zIGZvciB0aGUgYXR0YWNobWVudAorICogQGltcG9ydGVyX3ByaXYJW2luXQlp bXBvcnRlciBwcml2YXRlIHBvaW50ZXIgZm9yIHRoZSBhdHRhY2htZW50CiAgKgogICogUmV0dXJu cyBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50IHBvaW50ZXIgZm9yIHRoaXMgYXR0YWNobWVudC4g QXR0YWNobWVudHMKICAqIG11c3QgYmUgY2xlYW5lZCB1cCBieSBjYWxsaW5nIGRtYV9idWZfZGV0 YWNoKCkuCkBAIC02NjksNyArNjc0LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9wdXQp OwogICovCiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICoKIGRtYV9idWZfZHluYW1pY19hdHRh Y2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAotCQkgICAgICAg Ym9vbCBkeW5hbWljX21hcHBpbmcpCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2hfb3BzICppbXBvcnRlcl9vcHMsCisJCSAgICAgICB2b2lkICppbXBvcnRlcl9wcml2KQogewog CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKIAlpbnQgcmV0OwpAQCAtNjgzLDcg KzY4OSw4IEBAIGRtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwg c3RydWN0IGRldmljZSAqZGV2LAogCiAJYXR0YWNoLT5kZXYgPSBkZXY7CiAJYXR0YWNoLT5kbWFi dWYgPSBkbWFidWY7Ci0JYXR0YWNoLT5keW5hbWljX21hcHBpbmcgPSBkeW5hbWljX21hcHBpbmc7 CisJYXR0YWNoLT5pbXBvcnRlcl9vcHMgPSBpbXBvcnRlcl9vcHM7CisJYXR0YWNoLT5pbXBvcnRl cl9wcml2ID0gaW1wb3J0ZXJfcHJpdjsKIAogCWlmIChkbWFidWYtPm9wcy0+YXR0YWNoKSB7CiAJ CXJldCA9IGRtYWJ1Zi0+b3BzLT5hdHRhY2goZG1hYnVmLCBhdHRhY2gpOwpAQCAtNzAyLDE1ICs3 MDksMTkgQEAgZG1hX2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBz dHJ1Y3QgZGV2aWNlICpkZXYsCiAJICAgIGRtYV9idWZfaXNfZHluYW1pYyhkbWFidWYpKSB7CiAJ CXN0cnVjdCBzZ190YWJsZSAqc2d0OwogCi0JCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNo LT5kbWFidWYpKQorCQlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkgewog CQkJZG1hX3Jlc3ZfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7CisJCQlyZXQgPSBk bWFfYnVmX3BpbihhdHRhY2gpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycl91bmxvY2s7CisJ CX0KIAogCQlzZ3QgPSBkbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBETUFfQklESVJF Q1RJT05BTCk7CiAJCWlmICghc2d0KQogCQkJc2d0ID0gRVJSX1BUUigtRU5PTUVNKTsKIAkJaWYg KElTX0VSUihzZ3QpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHNndCk7Ci0JCQlnb3RvIGVycl91bmxv Y2s7CisJCQlnb3RvIGVycl91bnBpbjsKIAkJfQogCQlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0 dGFjaC0+ZG1hYnVmKSkKIAkJCWRtYV9yZXN2X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7 CkBAIC03MjQsNiArNzM1LDEwIEBAIGRtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9i dWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAogCWtmcmVlKGF0dGFjaCk7CiAJcmV0dXJu IEVSUl9QVFIocmV0KTsKIAorZXJyX3VucGluOgorCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0 YWNoLT5kbWFidWYpKQorCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7CisKIGVycl91bmxvY2s6CiAJ aWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCiAJCWRtYV9yZXN2X3VubG9j ayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7CkBAIC03NDQsNyArNzU5LDcgQEAgRVhQT1JUX1NZTUJP TF9HUEwoZG1hX2J1Zl9keW5hbWljX2F0dGFjaCk7CiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCQkJCQkgIHN0cnVjdCBk ZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZG1hX2J1Zl9keW5hbWljX2F0dGFjaChkbWFidWYsIGRl diwgZmFsc2UpOworCXJldHVybiBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGRtYWJ1ZiwgZGV2LCBO VUxMLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfYXR0YWNoKTsKIApAQCAt NzY3LDggKzc4MiwxMCBAQCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFi dWYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKIAogCQlkbWFidWYtPm9wcy0+ dW5tYXBfZG1hX2J1ZihhdHRhY2gsIGF0dGFjaC0+c2d0LCBhdHRhY2gtPmRpcik7CiAKLQkJaWYg KGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCisJCWlmIChkbWFfYnVmX2lzX2R5 bmFtaWMoYXR0YWNoLT5kbWFidWYpKSB7CisJCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7CiAJCQlk bWFfcmVzdl91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOworCQl9CiAJfQogCiAJZG1hX3Jl c3ZfbG9jayhkbWFidWYtPnJlc3YsIE5VTEwpOwpAQCAtNzgxLDYgKzc5OCw0NCBAQCB2b2lkIGRt YV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmF0dGFjaCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfZGV0YWNoKTsKIAor LyoqCisgKiBkbWFfYnVmX3BpbiAtIExvY2sgZG93biB0aGUgRE1BLWJ1ZgorICoKKyAqIEBhdHRh Y2g6CVtpbl0JYXR0YWNobWVudCB3aGljaCBzaG91bGQgYmUgcGlubmVkCisgKgorICogUmV0dXJu czoKKyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICov CitpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQorewor CXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBhdHRhY2gtPmRtYWJ1ZjsKKwlpbnQgcmV0ID0gMDsK KworCWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0+cmVzdik7CisKKwlpZiAoZG1hYnVmLT5v cHMtPnBpbikKKwkJcmV0ID0gZG1hYnVmLT5vcHMtPnBpbihhdHRhY2gpOworCisJcmV0dXJuIHJl dDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfcGluKTsKKworLyoqCisgKiBkbWFfYnVm X3VucGluIC0gUmVtb3ZlIGxvY2sgZnJvbSBETUEtYnVmCisgKgorICogQGF0dGFjaDoJW2luXQlh dHRhY2htZW50IHdoaWNoIHNob3VsZCBiZSB1bnBpbm5lZAorICovCit2b2lkIGRtYV9idWZfdW5w aW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBkbWFfYnVm ICpkbWFidWYgPSBhdHRhY2gtPmRtYWJ1ZjsKKworCWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1 Zi0+cmVzdik7CisKKwlpZiAoZG1hYnVmLT5vcHMtPnVucGluKQorCQlkbWFidWYtPm9wcy0+dW5w aW4oYXR0YWNoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfdW5waW4pOworCiAvKioK ICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJs ZSBvZiB0aGUgYXR0YWNobWVudDsKICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3Bh Y2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGUKQEAgLTgwMCw2ICs4NTUs NyBAQCBzdHJ1Y3Qgc2dfdGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCAqYXR0YWNoLAogCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJl Y3Rpb24pCiB7CiAJc3RydWN0IHNnX3RhYmxlICpzZ190YWJsZTsKKwlpbnQgcjsKIAogCW1pZ2h0 X3NsZWVwKCk7CiAKQEAgLTgyMSwxMyArODc3LDIzIEBAIHN0cnVjdCBzZ190YWJsZSAqZG1hX2J1 Zl9tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCiAJCXJl dHVybiBhdHRhY2gtPnNndDsKIAl9CiAKLQlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ ZG1hYnVmKSkKKwlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkgewogCQlk bWFfcmVzdl9hc3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7CisJCWlmICghYXR0YWNo LT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5KSB7CisJCQlyID0gZG1hX2J1Zl9waW4oYXR0YWNo KTsKKwkJCWlmIChyKQorCQkJCXJldHVybiBFUlJfUFRSKHIpOworCQl9CisJfQogCiAJc2dfdGFi bGUgPSBhdHRhY2gtPmRtYWJ1Zi0+b3BzLT5tYXBfZG1hX2J1ZihhdHRhY2gsIGRpcmVjdGlvbik7 CiAJaWYgKCFzZ190YWJsZSkKIAkJc2dfdGFibGUgPSBFUlJfUFRSKC1FTk9NRU0pOwogCisJaWYg KElTX0VSUihzZ190YWJsZSkgJiYgZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSAm JgorCSAgICAhYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5KQorCQlkbWFfYnVmX3Vu cGluKGF0dGFjaCk7CisKIAlpZiAoIUlTX0VSUihzZ190YWJsZSkgJiYgYXR0YWNoLT5kbWFidWYt Pm9wcy0+Y2FjaGVfc2d0X21hcHBpbmcpIHsKIAkJYXR0YWNoLT5zZ3QgPSBzZ190YWJsZTsKIAkJ YXR0YWNoLT5kaXIgPSBkaXJlY3Rpb247CkBAIC04NjYsOSArOTMyLDMzIEBAIHZvaWQgZG1hX2J1 Zl91bm1hcF9hdHRhY2htZW50KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKIAkJ ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOwogCiAJYXR0YWNoLT5k bWFidWYtPm9wcy0+dW5tYXBfZG1hX2J1ZihhdHRhY2gsIHNnX3RhYmxlLCBkaXJlY3Rpb24pOwor CisJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikgJiYKKwkgICAgIWF0dGFj aC0+aW1wb3J0ZXJfb3BzLT5tb3ZlX25vdGlmeSkKKwkJZG1hX2J1Zl91bnBpbihhdHRhY2gpOwog fQogRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KTsKIAorLyoqCisg KiBkbWFfYnVmX21vdmVfbm90aWZ5IC0gbm90aWZ5IGF0dGFjaG1lbnRzIHRoYXQgRE1BLWJ1ZiBp cyBtb3ZpbmcKKyAqCisgKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB3aGljaCBpcyBtb3ZpbmcKKyAq CisgKiBJbmZvcm1zIGFsbCBhdHRhY2htZW5zdCB0aGF0IHRoZXkgbmVlZCB0byBkZXN0cm95IGFu ZCByZWNyZWF0ZWQgYWxsIHRoZWlyCisgKiBtYXBwaW5ncy4KKyAqLwordm9pZCBkbWFfYnVmX21v dmVfbm90aWZ5KHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7CisJc3RydWN0IGRtYV9idWZfYXR0 YWNobWVudCAqYXR0YWNoOworCisJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLT5yZXN2KTsK KworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXR0YWNoLCAmZG1hYnVmLT5hdHRhY2htZW50cywgbm9k ZSkKKwkJaWYgKGF0dGFjaC0+aW1wb3J0ZXJfb3BzICYmIGF0dGFjaC0+aW1wb3J0ZXJfb3BzLT5t b3ZlX25vdGlmeSkKKwkJCWF0dGFjaC0+aW1wb3J0ZXJfb3BzLT5tb3ZlX25vdGlmeShhdHRhY2gp OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9tb3ZlX25vdGlmeSk7CisKIC8qKgogICog RE9DOiBjcHUgYWNjZXNzCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2RtYV9idWYuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9k bWFfYnVmLmMKaW5kZXggZTJlZWM3YjY2MzM0Li5iMmNhNzhiNmFiY2UgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYwpAQCAtNDE0LDYgKzQxNCw5IEBAIGFt ZGdwdV9kbWFfYnVmX2NyZWF0ZV9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRt YV9idWYgKmRtYV9idWYpCiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAorc3RhdGljIGNvbnN0 IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgYW1kZ3B1X2RtYV9idWZfYXR0YWNoX29wcyA9IHsK K307CisKIC8qKgogICogYW1kZ3B1X2dlbV9wcmltZV9pbXBvcnQgLSAmZHJtX2RyaXZlci5nZW1f cHJpbWVfaW1wb3J0IGltcGxlbWVudGF0aW9uCiAgKiBAZGV2OiBEUk0gZGV2aWNlCkBAIC00NDYs NyArNDQ5LDggQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICphbWRncHVfZ2VtX3ByaW1lX2ltcG9y dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIG9i ajsKIAotCWF0dGFjaCA9IGRtYV9idWZfZHluYW1pY19hdHRhY2goZG1hX2J1ZiwgZGV2LT5kZXYs IHRydWUpOworCWF0dGFjaCA9IGRtYV9idWZfZHluYW1pY19hdHRhY2goZG1hX2J1ZiwgZGV2LT5k ZXYsCisJCQkJCSZhbWRncHVfZG1hX2J1Zl9hdHRhY2hfb3BzLCBOVUxMKTsKIAlpZiAoSVNfRVJS KGF0dGFjaCkpIHsKIAkJZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7CiAJCXJldHVybiBFUlJfQ0FT VChhdHRhY2gpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRl L2xpbnV4L2RtYS1idWYuaAppbmRleCBhZjczZjgzNWM1MWMuLjc0NTZiYjkzNzYzNSAxMDA2NDQK LS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVm LmgKQEAgLTkzLDE0ICs5Myw0MCBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewogCSAqLwogCXZvaWQg KCpkZXRhY2gpKHN0cnVjdCBkbWFfYnVmICosIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKik7 CiAKKwkvKioKKwkgKiBAcGluOgorCSAqCisJICogVGhpcyBpcyBjYWxsZWQgYnkgZG1hX2J1Zl9w aW4gYW5kIGxldHMgdGhlIGV4cG9ydGVyIGtub3cgdGhhdCB0aGUKKwkgKiBETUEtYnVmIGNhbid0 IGJlIG1vdmVkIGFueSBtb3JlLgorCSAqCisJICogVGhpcyBpcyBjYWxsZWQgd2l0aCB0aGUgZG1h YnVmLT5yZXN2IG9iamVjdCBsb2NrZWQuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlv bmFsLgorCSAqCisJICogUmV0dXJuczoKKwkgKgorCSAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorCSAqLworCWludCAoKnBpbikoc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoKTsKKworCS8qKgorCSAqIEB1bnBpbjoKKwkgKgorCSAqIFRoaXMg aXMgY2FsbGVkIGJ5IGRtYV9idWZfdW5waW4gYW5kIGxldHMgdGhlIGV4cG9ydGVyIGtub3cgdGhh dCB0aGUKKwkgKiBETUEtYnVmIGNhbiBiZSBtb3ZlZCBhZ2Fpbi4KKwkgKgorCSAqIFRoaXMgaXMg Y2FsbGVkIHdpdGggdGhlIGRtYWJ1Zi0+cmVzdiBvYmplY3QgbG9ja2VkLgorCSAqCisJICogVGhp cyBjYWxsYmFjayBpcyBvcHRpb25hbC4KKwkgKi8KKwl2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CisKIAkvKioKIAkgKiBAbWFwX2RtYV9idWY6CiAJICoK IAkgKiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVmX21hcF9hdHRhY2htZW50KCkgYW5kIGlzIHVz ZWQgdG8gbWFwIGEKIAkgKiBzaGFyZWQgJmRtYV9idWYgaW50byBkZXZpY2UgYWRkcmVzcyBzcGFj ZSwgYW5kIGl0IGlzIG1hbmRhdG9yeS4gSXQKLQkgKiBjYW4gb25seSBiZSBjYWxsZWQgaWYgQGF0 dGFjaCBoYXMgYmVlbiBjYWxsZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzCi0JICogZXNzZW50aWFsbHkg cGlucyB0aGUgRE1BIGJ1ZmZlciBpbnRvIHBsYWNlLCBhbmQgaXQgY2Fubm90IGJlIG1vdmVkCi0J ICogYW55IG1vcmUKKwkgKiBjYW4gb25seSBiZSBjYWxsZWQgaWYgQGF0dGFjaCBoYXMgYmVlbiBj YWxsZWQgc3VjY2Vzc2Z1bGx5LgogCSAqCiAJICogVGhpcyBjYWxsIG1heSBzbGVlcCwgZS5nLiB3 aGVuIHRoZSBiYWNraW5nIHN0b3JhZ2UgZmlyc3QgbmVlZHMgdG8gYmUKIAkgKiBhbGxvY2F0ZWQs IG9yIG1vdmVkIHRvIGEgbG9jYXRpb24gc3VpdGFibGUgZm9yIGFsbCBjdXJyZW50bHkgYXR0YWNo ZWQKQEAgLTE0MSw5ICsxNjcsNiBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewogCSAqCiAJICogVGhp cyBpcyBjYWxsZWQgYnkgZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KCkgYW5kIHNob3VsZCB1bm1h cCBhbmQKIAkgKiByZWxlYXNlIHRoZSAmc2dfdGFibGUgYWxsb2NhdGVkIGluIEBtYXBfZG1hX2J1 ZiwgYW5kIGl0IGlzIG1hbmRhdG9yeS4KLQkgKiBJdCBzaG91bGQgYWxzbyB1bnBpbiB0aGUgYmFj a2luZyBzdG9yYWdlIGlmIHRoaXMgaXMgdGhlIGxhc3QgbWFwcGluZwotCSAqIG9mIHRoZSBETUEg YnVmZmVyLCBpdCB0aGUgZXhwb3J0ZXIgc3VwcG9ydHMgYmFja2luZyBzdG9yYWdlCi0JICogbWln cmF0aW9uLgogCSAqLwogCXZvaWQgKCp1bm1hcF9kbWFfYnVmKShzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICosCiAJCQkgICAgICBzdHJ1Y3Qgc2dfdGFibGUgKiwKQEAgLTMzNiw2ICszNTksMzQg QEAgc3RydWN0IGRtYV9idWYgewogCX0gY2JfZXhjbCwgY2Jfc2hhcmVkOwogfTsKIAorLyoqCisg KiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIC0gaW1wb3J0ZXIgb3BlcmF0aW9ucyBmb3IgYW4g YXR0YWNobWVudAorICogQG1vdmVfbm90aWZ5OiBbb3B0aW9uYWxdIG5vdGlmaWNhdGlvbiB0aGF0 IHRoZSBETUEtYnVmIGlzIG1vdmluZworICoKKyAqIEF0dGFjaG1lbnQgb3BlcmF0aW9ucyBpbXBs ZW1lbnRlZCBieSB0aGUgaW1wb3J0ZXIuCisgKi8KK3N0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMg eworCS8qKgorCSAqIEBtb3ZlX25vdGlmeQorCSAqCisJICogSWYgdGhpcyBjYWxsYmFjayBpcyBw cm92aWRlZCB0aGUgZnJhbWV3b3JrIGNhbiBhdm9pZCBwaW5uaW5nIHRoZQorCSAqIGJhY2tpbmcg c3RvcmUgd2hpbGUgbWFwcGluZ3MgZXhpc3RzLgorCSAqCisJICogVGhpcyBjYWxsYmFjayBpcyBj YWxsZWQgd2l0aCB0aGUgbG9jayBvZiB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0CisJICogYXNzb2Np YXRlZCB3aXRoIHRoZSBkbWFfYnVmIGhlbGQgYW5kIHRoZSBtYXBwaW5nIGZ1bmN0aW9uIG11c3Qg YmUKKwkgKiBjYWxsZWQgd2l0aCB0aGlzIGxvY2sgaGVsZCBhcyB3ZWxsLiBUaGlzIG1ha2VzIHN1 cmUgdGhhdCBubyBtYXBwaW5nCisJICogaXMgY3JlYXRlZCBjb25jdXJyZW50bHkgd2l0aCBhbiBv bmdvaW5nIG1vdmUgb3BlcmF0aW9uLgorCSAqCisJICogTWFwcGluZ3Mgc3RheSB2YWxpZCBhbmQg YXJlIG5vdCBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGlzIGNhbGxiYWNrLgorCSAqIEJ1dCB0aGUg RE1BLWJ1ZiBjYW4gbm93IGJlIGluIGEgZGlmZmVyZW50IHBoeXNpY2FsIGxvY2F0aW9uLCBzbyBh bGwKKwkgKiBtYXBwaW5ncyBzaG91bGQgYmUgZGVzdHJveWVkIGFuZCByZS1jcmVhdGVkIGFzIHNv b24gYXMgcG9zc2libGUuCisJICoKKwkgKiBOZXcgbWFwcGluZ3MgY2FuIGJlIGNyZWF0ZWQgYWZ0 ZXIgdGhpcyBjYWxsYmFjayByZXR1cm5zLCBhbmQgd2lsbAorCSAqIHBvaW50IHRvIHRoZSBuZXcg bG9jYXRpb24gb2YgdGhlIERNQS1idWYuCisJICovCisJdm9pZCAoKm1vdmVfbm90aWZ5KShzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50IC0gaG9sZHMgZGV2aWNlLWJ1ZmZlciBhdHRhY2htZW50IGRhdGEKICAq IEBkbWFidWY6IGJ1ZmZlciBmb3IgdGhpcyBhdHRhY2htZW50LgpAQCAtMzQ0LDggKzM5NSw5IEBA IHN0cnVjdCBkbWFfYnVmIHsKICAqIEBzZ3Q6IGNhY2hlZCBtYXBwaW5nLgogICogQGRpcjogZGly ZWN0aW9uIG9mIGNhY2hlZCBtYXBwaW5nLgogICogQHByaXY6IGV4cG9ydGVyIHNwZWNpZmljIGF0 dGFjaG1lbnQgZGF0YS4KLSAqIEBkeW5hbWljX21hcHBpbmc6IHRydWUgaWYgZG1hX2J1Zl9tYXAv dW5tYXBfYXR0YWNobWVudCgpIGlzIGNhbGxlZCB3aXRoIHRoZQotICogZG1hX3Jlc3YgbG9jayBo ZWxkLgorICogQGltcG9ydGVyX29wczogaW1wb3J0ZXIgb3BlcmF0aW9ucyBmb3IgdGhpcyBhdHRh Y2htZW50LCBpZiBwcm92aWRlZAorICogZG1hX2J1Zl9tYXAvdW5tYXBfYXR0YWNobWVudCgpIG11 c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRtYV9yZXN2IGxvY2sgaGVsZC4KKyAqIEBpbXBvcnRlcl9w cml2OiBpbXBvcnRlciBzcGVjaWZpYyBhdHRhY2htZW50IGRhdGEuCiAgKgogICogVGhpcyBzdHJ1 Y3R1cmUgaG9sZHMgdGhlIGF0dGFjaG1lbnQgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZG1hX2J1 ZiBidWZmZXIKICAqIGFuZCBpdHMgdXNlciBkZXZpY2UocykuIFRoZSBsaXN0IGNvbnRhaW5zIG9u ZSBhdHRhY2htZW50IHN0cnVjdCBwZXIgZGV2aWNlCkBAIC0zNjIsNyArNDE0LDggQEAgc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCB7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCXN0cnVjdCBz Z190YWJsZSAqc2d0OwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsKLQlib29sIGR5bmFt aWNfbWFwcGluZzsKKwljb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzICppbXBvcnRlcl9v cHM7CisJdm9pZCAqaW1wb3J0ZXJfcHJpdjsKIAl2b2lkICpwcml2OwogfTsKIApAQCAtNDM4LDE2 ICs0OTEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGRtYV9idWZfaXNfZHluYW1pYyhzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmKQogc3RhdGljIGlubGluZSBib29sCiBkbWFfYnVmX2F0dGFjaG1lbnRf aXNfZHluYW1pYyhzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiB7Ci0JcmV0dXJu IGF0dGFjaC0+ZHluYW1pY19tYXBwaW5nOworCXJldHVybiAhIWF0dGFjaC0+aW1wb3J0ZXJfb3Bz OwogfQogCiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmLAogCQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICoKIGRtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYg KmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAotCQkgICAgICAgYm9vbCBkeW5hbWljX21hcHBp bmcpOworCQkgICAgICAgY29uc3Qgc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyAqaW1wb3J0ZXJf b3BzLAorCQkgICAgICAgdm9pZCAqaW1wb3J0ZXJfcHJpdik7CiB2b2lkIGRtYV9idWZfZGV0YWNo KHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICphdHRhY2gpOworaW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0 dGFjaCk7Cit2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0 YWNoKTsKIAogc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFf YnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7CiAKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== 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.3 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable 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 0C87DC34049 for ; Tue, 18 Feb 2020 17:17:06 +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 D88DA20801 for ; Tue, 18 Feb 2020 17:17:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Tx/CYjxZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D88DA20801 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E36F16EA55; Tue, 18 Feb 2020 17:17:03 +0000 (UTC) Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id E6EAD6E980; Mon, 17 Feb 2020 15:45:15 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id m16so20266456wrx.11; Mon, 17 Feb 2020 07:45:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=UJYLvYhU/BqgpOkWhQ0m0kEeKCv5RPci/PQtxcc6Sms=; b=Tx/CYjxZEk0/Xevp7mrQ/aP9gQWxxotISyfE7+iXMWlxL4mR1huTeWDicC+HbvMp9s 2lZq5FIMoXIZHCZBG4sbo9yv1FOmkXwLR+3YZNd1eFEZeK4R7rC3zcSIGNyJYUkBl++o EfxRgGhwAyVPvDen838UkNKRs8JLHMC2RHoUprlOpajNkkzu6iE0M133jKQ77ZKX3zTv ANSGQrlqWnaozEFu2eSq2jdOT4upTnU5+cGfNlVPDnWdaTZepolm3aV0rmTqj0tJfHxP MsN/mgmaSMXFBwhRHXXRrz8G9gLpR/W8xzYAZXTXiuNPjTTDhApfN9lQui8JDywexSn9 2YXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UJYLvYhU/BqgpOkWhQ0m0kEeKCv5RPci/PQtxcc6Sms=; b=QUeeQVlWaU4ePOvNgr8hQf7s9H91LXxs4z01A0cywcmTOnExb2OcOI9+KhSSbwiyHk H34iEN4PogAsDNQ+uJLf6LoHT+0wYEz1oUK7AgZzCTxq8aF3q1bdSdGosuRU/zVurZ66 UDOGJAJVG0IpBKPAe2xNHOwH4gZdbbxftniKV+FNwksBenRltK0UfcztdaaGvMz8SrAJ KtI6NmkjFweshzBY2eh9p/ZTiPxoduwaViOXBB04WEQQKAaRSCemx905qPzFgZAgsOxo O9WZadwuFJzyaTREzjAjZbAVQtzXCQoZwYbExCmGZSVRl/fFfATDI8IKFOwa+AJmK2K4 XhmA== X-Gm-Message-State: APjAAAUe8PoPFBVCI7AaqMIXWTavbwmoU36B+2yuaGoNepLBpBUg3MMp uwsZ+MYqtj9BttDC5M7fgOqbatGy X-Google-Smtp-Source: APXvYqzWsqZUjs2VfoAK40fa2+bWQXMLfMfldGRsgRQDRhkQNwkjAkKFE6JVhwiXEpPZ1HGtVCvxYw== X-Received: by 2002:a5d:4b88:: with SMTP id b8mr23030241wrt.343.1581954313942; Mon, 17 Feb 2020 07:45:13 -0800 (PST) Received: from abel.fritz.box ([2a02:908:1252:fb60:180d:d2d6:6ff9:a6cb]) by smtp.gmail.com with ESMTPSA id r6sm1372658wrq.92.2020.02.17.07.45.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2020 07:45:13 -0800 (PST) From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" X-Google-Original-From: =?UTF-8?q?Christian=20K=C3=B6nig?= To: dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-media@vger.kernel.org, intel-gfx@lists.freedesktop.org, daniel@ffwll.ch Date: Mon, 17 Feb 2020 16:45:05 +0100 Message-Id: <20200217154509.2265-2-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200217154509.2265-1-christian.koenig@amd.com> References: <20200217154509.2265-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 18 Feb 2020 17:16:57 +0000 Subject: [Intel-gfx] [PATCH 1/5] dma-buf: add dynamic DMA-buf handling v14 X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gdGhlIGV4cG9ydGVyIHNpZGUgd2UgYWRkIG9wdGlvbmFsIGV4cGxpY2l0IHBpbm5pbmcgY2Fs bGJhY2tzLiBXaGljaCBhcmUKY2FsbGVkIHdoZW4gdGhlIGltcG9ydGVyIGRvZXNuJ3QgaW1wbGVt ZW50IGR5bmFtaWMgaGFuZGxpbmcsIG1vdmUgbm90aWZpY2F0aW9uCm9yIG5lZWQgdGhlIERNQS1i dWYgbG9ja2VkIGluIHBsYWNlIGZvciBpdHMgdXNlIGNhc2UuCgpPbiB0aGUgaW1wb3J0ZXIgc2lk ZSB3ZSBhZGQgYW4gb3B0aW9uYWwgbW92ZV9ub3RpZnkgY2FsbGJhY2suIFRoaXMgY2FsbGJhY2sg aXMKdXNlZCBieSB0aGUgZXhwb3J0ZXIgdG8gaW5mb3JtIHRoZSBpbXBvcnRlcnMgdGhhdCB0aGVp ciBtYXBwaW5ncyBzaG91bGQgYmUKZGVzdHJveWVkIGFzIHNvb24gYXMgcG9zc2libGUuCgpUaGlz IGFsbG93cyB0aGUgZXhwb3J0ZXIgdG8gcHJvdmlkZSB0aGUgbWFwcGluZ3Mgd2l0aG91dCB0aGUg bmVlZCB0byBwaW4KdGhlIGJhY2tpbmcgc3RvcmUuCgp2MjogZG9uJ3QgdHJ5IHRvIGludmFsaWRh dGUgbWFwcGluZ3Mgd2hlbiB0aGUgY2FsbGJhY2sgaXMgTlVMTCwKICAgIGxvY2sgdGhlIHJlc2Vy dmF0aW9uIG9iaiB3aGlsZSB1c2luZyB0aGUgYXR0YWNobWVudHMsCiAgICBhZGQgaGVscGVyIHRv IHNldCB0aGUgY2FsbGJhY2sKdjM6IG1vdmUgZmxhZyBmb3IgaW52YWxpZGF0aW9uIHN1cHBvcnQg aW50byB0aGUgRE1BLWJ1ZiwKICAgIHVzZSBuZXcgYXR0YWNoX2luZm8gc3RydWN0dXJlIHRvIHNl dCB0aGUgY2FsbGJhY2sKdjQ6IHVzZSBpbXBvcnRlcl9wcml2IGZpZWxkIGluc3RlYWQgb2YgbWFu Z2xpbmcgZXhwb3J0ZXIgcHJpdi4KdjU6IGRyb3AgaW52YWxpZGF0aW9uX3N1cHBvcnRlZCBmbGFn CnY2OiBzcXVhc2ggdG9nZXRoZXIgd2l0aCBwaW4vdW5waW4gY2hhbmdlcwp2NzogcGluL3VucGlu IHRha2VzIGFuIGF0dGFjaG1lbnQgbm93CnY4OiBudWtlIGRtYV9idWZfYXR0YWNobWVudF8obWFw fHVubWFwKV9sb2NrZWQsCiAgICBldmVyeXRoaW5nIGlzIG5vdyBoYW5kbGVkIGJhY2t3YXJkIGNv bXBhdGlibGUKdjk6IGFsd2F5cyBjYWNoZSB3aGVuIGV4cG9ydC9pbXBvcnRlciBkb24ndCBhZ3Jl ZSBvbiBkeW5hbWljIGhhbmRsaW5nCnYxMDogbWluaW1hbCBzdHlsZSBjbGVhbnVwCnYxMTogZHJv cCBhdXRvbWF0aWNhbGx5IHJlLWVudHJ5IGF2b2lkYW5jZQp2MTI6IHJlbmFtZSBjYWxsYmFjayB0 byBtb3ZlX25vdGlmeQp2MTM6IGFkZCBtaWdodF9sb2NrIGluIGFwcHJvcHJpYXRlIHBsYWNlcwp2 MTQ6IHJlYmFzZSBvbiBzZXBhcmF0ZWQgbG9ja2luZyBjaGFuZ2UKClNpZ25lZC1vZmYtYnk6IENo cmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2Rt YS1idWYvZG1hLWJ1Zi5jICAgICAgICAgICAgICAgICAgIHwgMTA2ICsrKysrKysrKysrKysrKysr Ky0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jIHwgICA2ICst CiBpbmNsdWRlL2xpbnV4L2RtYS1idWYuaCAgICAgICAgICAgICAgICAgICAgIHwgIDc4ICsrKysr KysrKysrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDE3MCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9k bWEtYnVmL2RtYS1idWYuYwppbmRleCBkMzc3YjRjYTY2YmYuLmNlMjkzY2VlNzZlZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYworKysgYi9kcml2ZXJzL2RtYS1idWYvZG1h LWJ1Zi5jCkBAIC01MjksNiArNTI5LDEwIEBAIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9y dChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pCiAJCSAgICBleHBf aW5mby0+b3BzLT5keW5hbWljX21hcHBpbmcpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK IAorCWlmIChXQVJOX09OKCFleHBfaW5mby0+b3BzLT5keW5hbWljX21hcHBpbmcgJiYKKwkJICAg IChleHBfaW5mby0+b3BzLT5waW4gfHwgZXhwX2luZm8tPm9wcy0+dW5waW4pKSkKKwkJcmV0dXJu IEVSUl9QVFIoLUVJTlZBTCk7CisKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGV4cF9pbmZvLT5vd25l cikpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCkBAIC02NTMsNyArNjU3LDggQEAgRVhQ T1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9wdXQpOwogICogY2FsbHMgYXR0YWNoKCkgb2YgZG1hX2J1 Zl9vcHMgdG8gYWxsb3cgZGV2aWNlLXNwZWNpZmljIGF0dGFjaCBmdW5jdGlvbmFsaXR5CiAgKiBA ZG1hYnVmOgkJW2luXQlidWZmZXIgdG8gYXR0YWNoIGRldmljZSB0by4KICAqIEBkZXY6CQlbaW5d CWRldmljZSB0byBiZSBhdHRhY2hlZC4KLSAqIEBkeW5hbWljX21hcHBpbmc6CVtpbl0JY2FsbGlu ZyBjb252ZW50aW9uIGZvciBtYXAvdW5tYXAKKyAqIEBpbXBvcnRlcl9vcHMJW2luXQlpbXBvcnRl ciBvcGVyYXRpb25zIGZvciB0aGUgYXR0YWNobWVudAorICogQGltcG9ydGVyX3ByaXYJW2luXQlp bXBvcnRlciBwcml2YXRlIHBvaW50ZXIgZm9yIHRoZSBhdHRhY2htZW50CiAgKgogICogUmV0dXJu cyBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50IHBvaW50ZXIgZm9yIHRoaXMgYXR0YWNobWVudC4g QXR0YWNobWVudHMKICAqIG11c3QgYmUgY2xlYW5lZCB1cCBieSBjYWxsaW5nIGRtYV9idWZfZGV0 YWNoKCkuCkBAIC02NjksNyArNjc0LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9wdXQp OwogICovCiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICoKIGRtYV9idWZfZHluYW1pY19hdHRh Y2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAotCQkgICAgICAg Ym9vbCBkeW5hbWljX21hcHBpbmcpCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2hfb3BzICppbXBvcnRlcl9vcHMsCisJCSAgICAgICB2b2lkICppbXBvcnRlcl9wcml2KQogewog CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKIAlpbnQgcmV0OwpAQCAtNjgzLDcg KzY4OSw4IEBAIGRtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwg c3RydWN0IGRldmljZSAqZGV2LAogCiAJYXR0YWNoLT5kZXYgPSBkZXY7CiAJYXR0YWNoLT5kbWFi dWYgPSBkbWFidWY7Ci0JYXR0YWNoLT5keW5hbWljX21hcHBpbmcgPSBkeW5hbWljX21hcHBpbmc7 CisJYXR0YWNoLT5pbXBvcnRlcl9vcHMgPSBpbXBvcnRlcl9vcHM7CisJYXR0YWNoLT5pbXBvcnRl cl9wcml2ID0gaW1wb3J0ZXJfcHJpdjsKIAogCWlmIChkbWFidWYtPm9wcy0+YXR0YWNoKSB7CiAJ CXJldCA9IGRtYWJ1Zi0+b3BzLT5hdHRhY2goZG1hYnVmLCBhdHRhY2gpOwpAQCAtNzAyLDE1ICs3 MDksMTkgQEAgZG1hX2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBz dHJ1Y3QgZGV2aWNlICpkZXYsCiAJICAgIGRtYV9idWZfaXNfZHluYW1pYyhkbWFidWYpKSB7CiAJ CXN0cnVjdCBzZ190YWJsZSAqc2d0OwogCi0JCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNo LT5kbWFidWYpKQorCQlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkgewog CQkJZG1hX3Jlc3ZfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7CisJCQlyZXQgPSBk bWFfYnVmX3BpbihhdHRhY2gpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycl91bmxvY2s7CisJ CX0KIAogCQlzZ3QgPSBkbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBETUFfQklESVJF Q1RJT05BTCk7CiAJCWlmICghc2d0KQogCQkJc2d0ID0gRVJSX1BUUigtRU5PTUVNKTsKIAkJaWYg KElTX0VSUihzZ3QpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHNndCk7Ci0JCQlnb3RvIGVycl91bmxv Y2s7CisJCQlnb3RvIGVycl91bnBpbjsKIAkJfQogCQlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0 dGFjaC0+ZG1hYnVmKSkKIAkJCWRtYV9yZXN2X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7 CkBAIC03MjQsNiArNzM1LDEwIEBAIGRtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9i dWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAogCWtmcmVlKGF0dGFjaCk7CiAJcmV0dXJu IEVSUl9QVFIocmV0KTsKIAorZXJyX3VucGluOgorCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0 YWNoLT5kbWFidWYpKQorCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7CisKIGVycl91bmxvY2s6CiAJ aWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCiAJCWRtYV9yZXN2X3VubG9j ayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7CkBAIC03NDQsNyArNzU5LDcgQEAgRVhQT1JUX1NZTUJP TF9HUEwoZG1hX2J1Zl9keW5hbWljX2F0dGFjaCk7CiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCQkJCQkgIHN0cnVjdCBk ZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZG1hX2J1Zl9keW5hbWljX2F0dGFjaChkbWFidWYsIGRl diwgZmFsc2UpOworCXJldHVybiBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGRtYWJ1ZiwgZGV2LCBO VUxMLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfYXR0YWNoKTsKIApAQCAt NzY3LDggKzc4MiwxMCBAQCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFi dWYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKIAogCQlkbWFidWYtPm9wcy0+ dW5tYXBfZG1hX2J1ZihhdHRhY2gsIGF0dGFjaC0+c2d0LCBhdHRhY2gtPmRpcik7CiAKLQkJaWYg KGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCisJCWlmIChkbWFfYnVmX2lzX2R5 bmFtaWMoYXR0YWNoLT5kbWFidWYpKSB7CisJCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7CiAJCQlk bWFfcmVzdl91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOworCQl9CiAJfQogCiAJZG1hX3Jl c3ZfbG9jayhkbWFidWYtPnJlc3YsIE5VTEwpOwpAQCAtNzgxLDYgKzc5OCw0NCBAQCB2b2lkIGRt YV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmF0dGFjaCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfZGV0YWNoKTsKIAor LyoqCisgKiBkbWFfYnVmX3BpbiAtIExvY2sgZG93biB0aGUgRE1BLWJ1ZgorICoKKyAqIEBhdHRh Y2g6CVtpbl0JYXR0YWNobWVudCB3aGljaCBzaG91bGQgYmUgcGlubmVkCisgKgorICogUmV0dXJu czoKKyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICov CitpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQorewor CXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBhdHRhY2gtPmRtYWJ1ZjsKKwlpbnQgcmV0ID0gMDsK KworCWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0+cmVzdik7CisKKwlpZiAoZG1hYnVmLT5v cHMtPnBpbikKKwkJcmV0ID0gZG1hYnVmLT5vcHMtPnBpbihhdHRhY2gpOworCisJcmV0dXJuIHJl dDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfcGluKTsKKworLyoqCisgKiBkbWFfYnVm X3VucGluIC0gUmVtb3ZlIGxvY2sgZnJvbSBETUEtYnVmCisgKgorICogQGF0dGFjaDoJW2luXQlh dHRhY2htZW50IHdoaWNoIHNob3VsZCBiZSB1bnBpbm5lZAorICovCit2b2lkIGRtYV9idWZfdW5w aW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBkbWFfYnVm ICpkbWFidWYgPSBhdHRhY2gtPmRtYWJ1ZjsKKworCWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1 Zi0+cmVzdik7CisKKwlpZiAoZG1hYnVmLT5vcHMtPnVucGluKQorCQlkbWFidWYtPm9wcy0+dW5w aW4oYXR0YWNoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfdW5waW4pOworCiAvKioK ICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJs ZSBvZiB0aGUgYXR0YWNobWVudDsKICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3Bh Y2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGUKQEAgLTgwMCw2ICs4NTUs NyBAQCBzdHJ1Y3Qgc2dfdGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCAqYXR0YWNoLAogCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJl Y3Rpb24pCiB7CiAJc3RydWN0IHNnX3RhYmxlICpzZ190YWJsZTsKKwlpbnQgcjsKIAogCW1pZ2h0 X3NsZWVwKCk7CiAKQEAgLTgyMSwxMyArODc3LDIzIEBAIHN0cnVjdCBzZ190YWJsZSAqZG1hX2J1 Zl9tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCiAJCXJl dHVybiBhdHRhY2gtPnNndDsKIAl9CiAKLQlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ ZG1hYnVmKSkKKwlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkgewogCQlk bWFfcmVzdl9hc3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7CisJCWlmICghYXR0YWNo LT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5KSB7CisJCQlyID0gZG1hX2J1Zl9waW4oYXR0YWNo KTsKKwkJCWlmIChyKQorCQkJCXJldHVybiBFUlJfUFRSKHIpOworCQl9CisJfQogCiAJc2dfdGFi bGUgPSBhdHRhY2gtPmRtYWJ1Zi0+b3BzLT5tYXBfZG1hX2J1ZihhdHRhY2gsIGRpcmVjdGlvbik7 CiAJaWYgKCFzZ190YWJsZSkKIAkJc2dfdGFibGUgPSBFUlJfUFRSKC1FTk9NRU0pOwogCisJaWYg KElTX0VSUihzZ190YWJsZSkgJiYgZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSAm JgorCSAgICAhYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5KQorCQlkbWFfYnVmX3Vu cGluKGF0dGFjaCk7CisKIAlpZiAoIUlTX0VSUihzZ190YWJsZSkgJiYgYXR0YWNoLT5kbWFidWYt Pm9wcy0+Y2FjaGVfc2d0X21hcHBpbmcpIHsKIAkJYXR0YWNoLT5zZ3QgPSBzZ190YWJsZTsKIAkJ YXR0YWNoLT5kaXIgPSBkaXJlY3Rpb247CkBAIC04NjYsOSArOTMyLDMzIEBAIHZvaWQgZG1hX2J1 Zl91bm1hcF9hdHRhY2htZW50KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKIAkJ ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOwogCiAJYXR0YWNoLT5k bWFidWYtPm9wcy0+dW5tYXBfZG1hX2J1ZihhdHRhY2gsIHNnX3RhYmxlLCBkaXJlY3Rpb24pOwor CisJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikgJiYKKwkgICAgIWF0dGFj aC0+aW1wb3J0ZXJfb3BzLT5tb3ZlX25vdGlmeSkKKwkJZG1hX2J1Zl91bnBpbihhdHRhY2gpOwog fQogRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KTsKIAorLyoqCisg KiBkbWFfYnVmX21vdmVfbm90aWZ5IC0gbm90aWZ5IGF0dGFjaG1lbnRzIHRoYXQgRE1BLWJ1ZiBp cyBtb3ZpbmcKKyAqCisgKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB3aGljaCBpcyBtb3ZpbmcKKyAq CisgKiBJbmZvcm1zIGFsbCBhdHRhY2htZW5zdCB0aGF0IHRoZXkgbmVlZCB0byBkZXN0cm95IGFu ZCByZWNyZWF0ZWQgYWxsIHRoZWlyCisgKiBtYXBwaW5ncy4KKyAqLwordm9pZCBkbWFfYnVmX21v dmVfbm90aWZ5KHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7CisJc3RydWN0IGRtYV9idWZfYXR0 YWNobWVudCAqYXR0YWNoOworCisJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLT5yZXN2KTsK KworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXR0YWNoLCAmZG1hYnVmLT5hdHRhY2htZW50cywgbm9k ZSkKKwkJaWYgKGF0dGFjaC0+aW1wb3J0ZXJfb3BzICYmIGF0dGFjaC0+aW1wb3J0ZXJfb3BzLT5t b3ZlX25vdGlmeSkKKwkJCWF0dGFjaC0+aW1wb3J0ZXJfb3BzLT5tb3ZlX25vdGlmeShhdHRhY2gp OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9tb3ZlX25vdGlmeSk7CisKIC8qKgogICog RE9DOiBjcHUgYWNjZXNzCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2RtYV9idWYuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9k bWFfYnVmLmMKaW5kZXggZTJlZWM3YjY2MzM0Li5iMmNhNzhiNmFiY2UgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYwpAQCAtNDE0LDYgKzQxNCw5IEBAIGFt ZGdwdV9kbWFfYnVmX2NyZWF0ZV9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRt YV9idWYgKmRtYV9idWYpCiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAorc3RhdGljIGNvbnN0 IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgYW1kZ3B1X2RtYV9idWZfYXR0YWNoX29wcyA9IHsK K307CisKIC8qKgogICogYW1kZ3B1X2dlbV9wcmltZV9pbXBvcnQgLSAmZHJtX2RyaXZlci5nZW1f cHJpbWVfaW1wb3J0IGltcGxlbWVudGF0aW9uCiAgKiBAZGV2OiBEUk0gZGV2aWNlCkBAIC00NDYs NyArNDQ5LDggQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICphbWRncHVfZ2VtX3ByaW1lX2ltcG9y dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIG9i ajsKIAotCWF0dGFjaCA9IGRtYV9idWZfZHluYW1pY19hdHRhY2goZG1hX2J1ZiwgZGV2LT5kZXYs IHRydWUpOworCWF0dGFjaCA9IGRtYV9idWZfZHluYW1pY19hdHRhY2goZG1hX2J1ZiwgZGV2LT5k ZXYsCisJCQkJCSZhbWRncHVfZG1hX2J1Zl9hdHRhY2hfb3BzLCBOVUxMKTsKIAlpZiAoSVNfRVJS KGF0dGFjaCkpIHsKIAkJZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7CiAJCXJldHVybiBFUlJfQ0FT VChhdHRhY2gpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRl L2xpbnV4L2RtYS1idWYuaAppbmRleCBhZjczZjgzNWM1MWMuLjc0NTZiYjkzNzYzNSAxMDA2NDQK LS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVm LmgKQEAgLTkzLDE0ICs5Myw0MCBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewogCSAqLwogCXZvaWQg KCpkZXRhY2gpKHN0cnVjdCBkbWFfYnVmICosIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKik7 CiAKKwkvKioKKwkgKiBAcGluOgorCSAqCisJICogVGhpcyBpcyBjYWxsZWQgYnkgZG1hX2J1Zl9w aW4gYW5kIGxldHMgdGhlIGV4cG9ydGVyIGtub3cgdGhhdCB0aGUKKwkgKiBETUEtYnVmIGNhbid0 IGJlIG1vdmVkIGFueSBtb3JlLgorCSAqCisJICogVGhpcyBpcyBjYWxsZWQgd2l0aCB0aGUgZG1h YnVmLT5yZXN2IG9iamVjdCBsb2NrZWQuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlv bmFsLgorCSAqCisJICogUmV0dXJuczoKKwkgKgorCSAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorCSAqLworCWludCAoKnBpbikoc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoKTsKKworCS8qKgorCSAqIEB1bnBpbjoKKwkgKgorCSAqIFRoaXMg aXMgY2FsbGVkIGJ5IGRtYV9idWZfdW5waW4gYW5kIGxldHMgdGhlIGV4cG9ydGVyIGtub3cgdGhh dCB0aGUKKwkgKiBETUEtYnVmIGNhbiBiZSBtb3ZlZCBhZ2Fpbi4KKwkgKgorCSAqIFRoaXMgaXMg Y2FsbGVkIHdpdGggdGhlIGRtYWJ1Zi0+cmVzdiBvYmplY3QgbG9ja2VkLgorCSAqCisJICogVGhp cyBjYWxsYmFjayBpcyBvcHRpb25hbC4KKwkgKi8KKwl2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CisKIAkvKioKIAkgKiBAbWFwX2RtYV9idWY6CiAJICoK IAkgKiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVmX21hcF9hdHRhY2htZW50KCkgYW5kIGlzIHVz ZWQgdG8gbWFwIGEKIAkgKiBzaGFyZWQgJmRtYV9idWYgaW50byBkZXZpY2UgYWRkcmVzcyBzcGFj ZSwgYW5kIGl0IGlzIG1hbmRhdG9yeS4gSXQKLQkgKiBjYW4gb25seSBiZSBjYWxsZWQgaWYgQGF0 dGFjaCBoYXMgYmVlbiBjYWxsZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzCi0JICogZXNzZW50aWFsbHkg cGlucyB0aGUgRE1BIGJ1ZmZlciBpbnRvIHBsYWNlLCBhbmQgaXQgY2Fubm90IGJlIG1vdmVkCi0J ICogYW55IG1vcmUKKwkgKiBjYW4gb25seSBiZSBjYWxsZWQgaWYgQGF0dGFjaCBoYXMgYmVlbiBj YWxsZWQgc3VjY2Vzc2Z1bGx5LgogCSAqCiAJICogVGhpcyBjYWxsIG1heSBzbGVlcCwgZS5nLiB3 aGVuIHRoZSBiYWNraW5nIHN0b3JhZ2UgZmlyc3QgbmVlZHMgdG8gYmUKIAkgKiBhbGxvY2F0ZWQs IG9yIG1vdmVkIHRvIGEgbG9jYXRpb24gc3VpdGFibGUgZm9yIGFsbCBjdXJyZW50bHkgYXR0YWNo ZWQKQEAgLTE0MSw5ICsxNjcsNiBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewogCSAqCiAJICogVGhp cyBpcyBjYWxsZWQgYnkgZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KCkgYW5kIHNob3VsZCB1bm1h cCBhbmQKIAkgKiByZWxlYXNlIHRoZSAmc2dfdGFibGUgYWxsb2NhdGVkIGluIEBtYXBfZG1hX2J1 ZiwgYW5kIGl0IGlzIG1hbmRhdG9yeS4KLQkgKiBJdCBzaG91bGQgYWxzbyB1bnBpbiB0aGUgYmFj a2luZyBzdG9yYWdlIGlmIHRoaXMgaXMgdGhlIGxhc3QgbWFwcGluZwotCSAqIG9mIHRoZSBETUEg YnVmZmVyLCBpdCB0aGUgZXhwb3J0ZXIgc3VwcG9ydHMgYmFja2luZyBzdG9yYWdlCi0JICogbWln cmF0aW9uLgogCSAqLwogCXZvaWQgKCp1bm1hcF9kbWFfYnVmKShzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICosCiAJCQkgICAgICBzdHJ1Y3Qgc2dfdGFibGUgKiwKQEAgLTMzNiw2ICszNTksMzQg QEAgc3RydWN0IGRtYV9idWYgewogCX0gY2JfZXhjbCwgY2Jfc2hhcmVkOwogfTsKIAorLyoqCisg KiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIC0gaW1wb3J0ZXIgb3BlcmF0aW9ucyBmb3IgYW4g YXR0YWNobWVudAorICogQG1vdmVfbm90aWZ5OiBbb3B0aW9uYWxdIG5vdGlmaWNhdGlvbiB0aGF0 IHRoZSBETUEtYnVmIGlzIG1vdmluZworICoKKyAqIEF0dGFjaG1lbnQgb3BlcmF0aW9ucyBpbXBs ZW1lbnRlZCBieSB0aGUgaW1wb3J0ZXIuCisgKi8KK3N0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMg eworCS8qKgorCSAqIEBtb3ZlX25vdGlmeQorCSAqCisJICogSWYgdGhpcyBjYWxsYmFjayBpcyBw cm92aWRlZCB0aGUgZnJhbWV3b3JrIGNhbiBhdm9pZCBwaW5uaW5nIHRoZQorCSAqIGJhY2tpbmcg c3RvcmUgd2hpbGUgbWFwcGluZ3MgZXhpc3RzLgorCSAqCisJICogVGhpcyBjYWxsYmFjayBpcyBj YWxsZWQgd2l0aCB0aGUgbG9jayBvZiB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0CisJICogYXNzb2Np YXRlZCB3aXRoIHRoZSBkbWFfYnVmIGhlbGQgYW5kIHRoZSBtYXBwaW5nIGZ1bmN0aW9uIG11c3Qg YmUKKwkgKiBjYWxsZWQgd2l0aCB0aGlzIGxvY2sgaGVsZCBhcyB3ZWxsLiBUaGlzIG1ha2VzIHN1 cmUgdGhhdCBubyBtYXBwaW5nCisJICogaXMgY3JlYXRlZCBjb25jdXJyZW50bHkgd2l0aCBhbiBv bmdvaW5nIG1vdmUgb3BlcmF0aW9uLgorCSAqCisJICogTWFwcGluZ3Mgc3RheSB2YWxpZCBhbmQg YXJlIG5vdCBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGlzIGNhbGxiYWNrLgorCSAqIEJ1dCB0aGUg RE1BLWJ1ZiBjYW4gbm93IGJlIGluIGEgZGlmZmVyZW50IHBoeXNpY2FsIGxvY2F0aW9uLCBzbyBh bGwKKwkgKiBtYXBwaW5ncyBzaG91bGQgYmUgZGVzdHJveWVkIGFuZCByZS1jcmVhdGVkIGFzIHNv b24gYXMgcG9zc2libGUuCisJICoKKwkgKiBOZXcgbWFwcGluZ3MgY2FuIGJlIGNyZWF0ZWQgYWZ0 ZXIgdGhpcyBjYWxsYmFjayByZXR1cm5zLCBhbmQgd2lsbAorCSAqIHBvaW50IHRvIHRoZSBuZXcg bG9jYXRpb24gb2YgdGhlIERNQS1idWYuCisJICovCisJdm9pZCAoKm1vdmVfbm90aWZ5KShzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50IC0gaG9sZHMgZGV2aWNlLWJ1ZmZlciBhdHRhY2htZW50IGRhdGEKICAq IEBkbWFidWY6IGJ1ZmZlciBmb3IgdGhpcyBhdHRhY2htZW50LgpAQCAtMzQ0LDggKzM5NSw5IEBA IHN0cnVjdCBkbWFfYnVmIHsKICAqIEBzZ3Q6IGNhY2hlZCBtYXBwaW5nLgogICogQGRpcjogZGly ZWN0aW9uIG9mIGNhY2hlZCBtYXBwaW5nLgogICogQHByaXY6IGV4cG9ydGVyIHNwZWNpZmljIGF0 dGFjaG1lbnQgZGF0YS4KLSAqIEBkeW5hbWljX21hcHBpbmc6IHRydWUgaWYgZG1hX2J1Zl9tYXAv dW5tYXBfYXR0YWNobWVudCgpIGlzIGNhbGxlZCB3aXRoIHRoZQotICogZG1hX3Jlc3YgbG9jayBo ZWxkLgorICogQGltcG9ydGVyX29wczogaW1wb3J0ZXIgb3BlcmF0aW9ucyBmb3IgdGhpcyBhdHRh Y2htZW50LCBpZiBwcm92aWRlZAorICogZG1hX2J1Zl9tYXAvdW5tYXBfYXR0YWNobWVudCgpIG11 c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRtYV9yZXN2IGxvY2sgaGVsZC4KKyAqIEBpbXBvcnRlcl9w cml2OiBpbXBvcnRlciBzcGVjaWZpYyBhdHRhY2htZW50IGRhdGEuCiAgKgogICogVGhpcyBzdHJ1 Y3R1cmUgaG9sZHMgdGhlIGF0dGFjaG1lbnQgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZG1hX2J1 ZiBidWZmZXIKICAqIGFuZCBpdHMgdXNlciBkZXZpY2UocykuIFRoZSBsaXN0IGNvbnRhaW5zIG9u ZSBhdHRhY2htZW50IHN0cnVjdCBwZXIgZGV2aWNlCkBAIC0zNjIsNyArNDE0LDggQEAgc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCB7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCXN0cnVjdCBz Z190YWJsZSAqc2d0OwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsKLQlib29sIGR5bmFt aWNfbWFwcGluZzsKKwljb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzICppbXBvcnRlcl9v cHM7CisJdm9pZCAqaW1wb3J0ZXJfcHJpdjsKIAl2b2lkICpwcml2OwogfTsKIApAQCAtNDM4LDE2 ICs0OTEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGRtYV9idWZfaXNfZHluYW1pYyhzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmKQogc3RhdGljIGlubGluZSBib29sCiBkbWFfYnVmX2F0dGFjaG1lbnRf aXNfZHluYW1pYyhzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiB7Ci0JcmV0dXJu IGF0dGFjaC0+ZHluYW1pY19tYXBwaW5nOworCXJldHVybiAhIWF0dGFjaC0+aW1wb3J0ZXJfb3Bz OwogfQogCiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmLAogCQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICoKIGRtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYg KmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAotCQkgICAgICAgYm9vbCBkeW5hbWljX21hcHBp bmcpOworCQkgICAgICAgY29uc3Qgc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyAqaW1wb3J0ZXJf b3BzLAorCQkgICAgICAgdm9pZCAqaW1wb3J0ZXJfcHJpdik7CiB2b2lkIGRtYV9idWZfZGV0YWNo KHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICphdHRhY2gpOworaW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0 dGFjaCk7Cit2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0 YWNoKTsKIAogc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFf YnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7CiAKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg== 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.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,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 3B3CBC34021 for ; Mon, 17 Feb 2020 15:45:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ECF2A22B48 for ; Mon, 17 Feb 2020 15:45:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Tx/CYjxZ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729391AbgBQPpR (ORCPT ); Mon, 17 Feb 2020 10:45:17 -0500 Received: from mail-wr1-f68.google.com ([209.85.221.68]:36119 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729349AbgBQPpR (ORCPT ); Mon, 17 Feb 2020 10:45:17 -0500 Received: by mail-wr1-f68.google.com with SMTP id z3so20351514wru.3 for ; Mon, 17 Feb 2020 07:45:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=UJYLvYhU/BqgpOkWhQ0m0kEeKCv5RPci/PQtxcc6Sms=; b=Tx/CYjxZEk0/Xevp7mrQ/aP9gQWxxotISyfE7+iXMWlxL4mR1huTeWDicC+HbvMp9s 2lZq5FIMoXIZHCZBG4sbo9yv1FOmkXwLR+3YZNd1eFEZeK4R7rC3zcSIGNyJYUkBl++o EfxRgGhwAyVPvDen838UkNKRs8JLHMC2RHoUprlOpajNkkzu6iE0M133jKQ77ZKX3zTv ANSGQrlqWnaozEFu2eSq2jdOT4upTnU5+cGfNlVPDnWdaTZepolm3aV0rmTqj0tJfHxP MsN/mgmaSMXFBwhRHXXRrz8G9gLpR/W8xzYAZXTXiuNPjTTDhApfN9lQui8JDywexSn9 2YXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UJYLvYhU/BqgpOkWhQ0m0kEeKCv5RPci/PQtxcc6Sms=; b=s3w9oqoN6DbbyHtUosjPLClbX7o6d3inNPpVwaVFRhI86MrwjXz6buIWzyhdfB5pMv nJ2eN2Sk1k9krJMnLXZcqusTc0Noiu9EkIcKbEMIcoX8grC5RcB325Z8TkSwyqL3nn9b DvWnwK6sQCCGZUKlJt7nDvtcEtRn8sMgP72aSA5qfvNucl8/d8ZxJlhBJEl1uJMmVTUa SWLZwQy//+/QprqGmshjw2JflIQ7mUQXJjoVk16pE71SYWtBpDX/AVDTboP4jT2mvaz1 V1YUtviE1qYeuLApUOgjr+DHfjq3nYeXr67fXTrc/CrrpHAFtdSf0q90ll+C1R7a2iOo QhpQ== X-Gm-Message-State: APjAAAXnL0zHQcPJoUaeEiEendlET2qqKVaOD2KC1rmMJ0ZK7D1QBVpr WhOQ68jA7e5YD3AQlBowRxU= X-Google-Smtp-Source: APXvYqzWsqZUjs2VfoAK40fa2+bWQXMLfMfldGRsgRQDRhkQNwkjAkKFE6JVhwiXEpPZ1HGtVCvxYw== X-Received: by 2002:a5d:4b88:: with SMTP id b8mr23030241wrt.343.1581954313942; Mon, 17 Feb 2020 07:45:13 -0800 (PST) Received: from abel.fritz.box ([2a02:908:1252:fb60:180d:d2d6:6ff9:a6cb]) by smtp.gmail.com with ESMTPSA id r6sm1372658wrq.92.2020.02.17.07.45.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2020 07:45:13 -0800 (PST) From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" X-Google-Original-From: =?UTF-8?q?Christian=20K=C3=B6nig?= To: dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-media@vger.kernel.org, intel-gfx@lists.freedesktop.org, daniel@ffwll.ch Subject: [PATCH 1/5] dma-buf: add dynamic DMA-buf handling v14 Date: Mon, 17 Feb 2020 16:45:05 +0100 Message-Id: <20200217154509.2265-2-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200217154509.2265-1-christian.koenig@amd.com> References: <20200217154509.2265-1-christian.koenig@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org On the exporter side we add optional explicit pinning callbacks. Which are called when the importer doesn't implement dynamic handling, move notification or need the DMA-buf locked in place for its use case. On the importer side we add an optional move_notify callback. This callback is used by the exporter to inform the importers that their mappings should be destroyed as soon as possible. This allows the exporter to provide the mappings without the need to pin the backing store. v2: don't try to invalidate mappings when the callback is NULL, lock the reservation obj while using the attachments, add helper to set the callback v3: move flag for invalidation support into the DMA-buf, use new attach_info structure to set the callback v4: use importer_priv field instead of mangling exporter priv. v5: drop invalidation_supported flag v6: squash together with pin/unpin changes v7: pin/unpin takes an attachment now v8: nuke dma_buf_attachment_(map|unmap)_locked, everything is now handled backward compatible v9: always cache when export/importer don't agree on dynamic handling v10: minimal style cleanup v11: drop automatically re-entry avoidance v12: rename callback to move_notify v13: add might_lock in appropriate places v14: rebase on separated locking change Signed-off-by: Christian König --- drivers/dma-buf/dma-buf.c | 106 ++++++++++++++++++-- drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 6 +- include/linux/dma-buf.h | 78 ++++++++++++-- 3 files changed, 170 insertions(+), 20 deletions(-) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index d377b4ca66bf..ce293cee76ed 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -529,6 +529,10 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info) exp_info->ops->dynamic_mapping)) return ERR_PTR(-EINVAL); + if (WARN_ON(!exp_info->ops->dynamic_mapping && + (exp_info->ops->pin || exp_info->ops->unpin))) + return ERR_PTR(-EINVAL); + if (!try_module_get(exp_info->owner)) return ERR_PTR(-ENOENT); @@ -653,7 +657,8 @@ EXPORT_SYMBOL_GPL(dma_buf_put); * calls attach() of dma_buf_ops to allow device-specific attach functionality * @dmabuf: [in] buffer to attach device to. * @dev: [in] device to be attached. - * @dynamic_mapping: [in] calling convention for map/unmap + * @importer_ops [in] importer operations for the attachment + * @importer_priv [in] importer private pointer for the attachment * * Returns struct dma_buf_attachment pointer for this attachment. Attachments * must be cleaned up by calling dma_buf_detach(). @@ -669,7 +674,8 @@ EXPORT_SYMBOL_GPL(dma_buf_put); */ struct dma_buf_attachment * dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, - bool dynamic_mapping) + const struct dma_buf_attach_ops *importer_ops, + void *importer_priv) { struct dma_buf_attachment *attach; int ret; @@ -683,7 +689,8 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, attach->dev = dev; attach->dmabuf = dmabuf; - attach->dynamic_mapping = dynamic_mapping; + attach->importer_ops = importer_ops; + attach->importer_priv = importer_priv; if (dmabuf->ops->attach) { ret = dmabuf->ops->attach(dmabuf, attach); @@ -702,15 +709,19 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, dma_buf_is_dynamic(dmabuf)) { struct sg_table *sgt; - if (dma_buf_is_dynamic(attach->dmabuf)) + if (dma_buf_is_dynamic(attach->dmabuf)) { dma_resv_lock(attach->dmabuf->resv, NULL); + ret = dma_buf_pin(attach); + if (ret) + goto err_unlock; + } sgt = dmabuf->ops->map_dma_buf(attach, DMA_BIDIRECTIONAL); if (!sgt) sgt = ERR_PTR(-ENOMEM); if (IS_ERR(sgt)) { ret = PTR_ERR(sgt); - goto err_unlock; + goto err_unpin; } if (dma_buf_is_dynamic(attach->dmabuf)) dma_resv_unlock(attach->dmabuf->resv); @@ -724,6 +735,10 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, kfree(attach); return ERR_PTR(ret); +err_unpin: + if (dma_buf_is_dynamic(attach->dmabuf)) + dma_buf_unpin(attach); + err_unlock: if (dma_buf_is_dynamic(attach->dmabuf)) dma_resv_unlock(attach->dmabuf->resv); @@ -744,7 +759,7 @@ EXPORT_SYMBOL_GPL(dma_buf_dynamic_attach); struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, struct device *dev) { - return dma_buf_dynamic_attach(dmabuf, dev, false); + return dma_buf_dynamic_attach(dmabuf, dev, NULL, NULL); } EXPORT_SYMBOL_GPL(dma_buf_attach); @@ -767,8 +782,10 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach) dmabuf->ops->unmap_dma_buf(attach, attach->sgt, attach->dir); - if (dma_buf_is_dynamic(attach->dmabuf)) + if (dma_buf_is_dynamic(attach->dmabuf)) { + dma_buf_unpin(attach); dma_resv_unlock(attach->dmabuf->resv); + } } dma_resv_lock(dmabuf->resv, NULL); @@ -781,6 +798,44 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach) } EXPORT_SYMBOL_GPL(dma_buf_detach); +/** + * dma_buf_pin - Lock down the DMA-buf + * + * @attach: [in] attachment which should be pinned + * + * Returns: + * 0 on success, negative error code on failure. + */ +int dma_buf_pin(struct dma_buf_attachment *attach) +{ + struct dma_buf *dmabuf = attach->dmabuf; + int ret = 0; + + dma_resv_assert_held(dmabuf->resv); + + if (dmabuf->ops->pin) + ret = dmabuf->ops->pin(attach); + + return ret; +} +EXPORT_SYMBOL_GPL(dma_buf_pin); + +/** + * dma_buf_unpin - Remove lock from DMA-buf + * + * @attach: [in] attachment which should be unpinned + */ +void dma_buf_unpin(struct dma_buf_attachment *attach) +{ + struct dma_buf *dmabuf = attach->dmabuf; + + dma_resv_assert_held(dmabuf->resv); + + if (dmabuf->ops->unpin) + dmabuf->ops->unpin(attach); +} +EXPORT_SYMBOL_GPL(dma_buf_unpin); + /** * dma_buf_map_attachment - Returns the scatterlist table of the attachment; * mapped into _device_ address space. Is a wrapper for map_dma_buf() of the @@ -800,6 +855,7 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach, enum dma_data_direction direction) { struct sg_table *sg_table; + int r; might_sleep(); @@ -821,13 +877,23 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach, return attach->sgt; } - if (dma_buf_is_dynamic(attach->dmabuf)) + if (dma_buf_is_dynamic(attach->dmabuf)) { dma_resv_assert_held(attach->dmabuf->resv); + if (!attach->importer_ops->move_notify) { + r = dma_buf_pin(attach); + if (r) + return ERR_PTR(r); + } + } sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction); if (!sg_table) sg_table = ERR_PTR(-ENOMEM); + if (IS_ERR(sg_table) && dma_buf_is_dynamic(attach->dmabuf) && + !attach->importer_ops->move_notify) + dma_buf_unpin(attach); + if (!IS_ERR(sg_table) && attach->dmabuf->ops->cache_sgt_mapping) { attach->sgt = sg_table; attach->dir = direction; @@ -866,9 +932,33 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach, dma_resv_assert_held(attach->dmabuf->resv); attach->dmabuf->ops->unmap_dma_buf(attach, sg_table, direction); + + if (dma_buf_is_dynamic(attach->dmabuf) && + !attach->importer_ops->move_notify) + dma_buf_unpin(attach); } EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment); +/** + * dma_buf_move_notify - notify attachments that DMA-buf is moving + * + * @dmabuf: [in] buffer which is moving + * + * Informs all attachmenst that they need to destroy and recreated all their + * mappings. + */ +void dma_buf_move_notify(struct dma_buf *dmabuf) +{ + struct dma_buf_attachment *attach; + + dma_resv_assert_held(dmabuf->resv); + + list_for_each_entry(attach, &dmabuf->attachments, node) + if (attach->importer_ops && attach->importer_ops->move_notify) + attach->importer_ops->move_notify(attach); +} +EXPORT_SYMBOL_GPL(dma_buf_move_notify); + /** * DOC: cpu access * diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c index e2eec7b66334..b2ca78b6abce 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c @@ -414,6 +414,9 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf) return ERR_PTR(ret); } +static const struct dma_buf_attach_ops amdgpu_dma_buf_attach_ops = { +}; + /** * amdgpu_gem_prime_import - &drm_driver.gem_prime_import implementation * @dev: DRM device @@ -446,7 +449,8 @@ struct drm_gem_object *amdgpu_gem_prime_import(struct drm_device *dev, if (IS_ERR(obj)) return obj; - attach = dma_buf_dynamic_attach(dma_buf, dev->dev, true); + attach = dma_buf_dynamic_attach(dma_buf, dev->dev, + &amdgpu_dma_buf_attach_ops, NULL); if (IS_ERR(attach)) { drm_gem_object_put(obj); return ERR_CAST(attach); diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h index af73f835c51c..7456bb937635 100644 --- a/include/linux/dma-buf.h +++ b/include/linux/dma-buf.h @@ -93,14 +93,40 @@ struct dma_buf_ops { */ void (*detach)(struct dma_buf *, struct dma_buf_attachment *); + /** + * @pin: + * + * This is called by dma_buf_pin and lets the exporter know that the + * DMA-buf can't be moved any more. + * + * This is called with the dmabuf->resv object locked. + * + * This callback is optional. + * + * Returns: + * + * 0 on success, negative error code on failure. + */ + int (*pin)(struct dma_buf_attachment *attach); + + /** + * @unpin: + * + * This is called by dma_buf_unpin and lets the exporter know that the + * DMA-buf can be moved again. + * + * This is called with the dmabuf->resv object locked. + * + * This callback is optional. + */ + void (*unpin)(struct dma_buf_attachment *attach); + /** * @map_dma_buf: * * This is called by dma_buf_map_attachment() and is used to map a * shared &dma_buf into device address space, and it is mandatory. It - * can only be called if @attach has been called successfully. This - * essentially pins the DMA buffer into place, and it cannot be moved - * any more + * can only be called if @attach has been called successfully. * * This call may sleep, e.g. when the backing storage first needs to be * allocated, or moved to a location suitable for all currently attached @@ -141,9 +167,6 @@ struct dma_buf_ops { * * This is called by dma_buf_unmap_attachment() and should unmap and * release the &sg_table allocated in @map_dma_buf, and it is mandatory. - * It should also unpin the backing storage if this is the last mapping - * of the DMA buffer, it the exporter supports backing storage - * migration. */ void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, @@ -336,6 +359,34 @@ struct dma_buf { } cb_excl, cb_shared; }; +/** + * struct dma_buf_attach_ops - importer operations for an attachment + * @move_notify: [optional] notification that the DMA-buf is moving + * + * Attachment operations implemented by the importer. + */ +struct dma_buf_attach_ops { + /** + * @move_notify + * + * If this callback is provided the framework can avoid pinning the + * backing store while mappings exists. + * + * This callback is called with the lock of the reservation object + * associated with the dma_buf held and the mapping function must be + * called with this lock held as well. This makes sure that no mapping + * is created concurrently with an ongoing move operation. + * + * Mappings stay valid and are not directly affected by this callback. + * But the DMA-buf can now be in a different physical location, so all + * mappings should be destroyed and re-created as soon as possible. + * + * New mappings can be created after this callback returns, and will + * point to the new location of the DMA-buf. + */ + void (*move_notify)(struct dma_buf_attachment *attach); +}; + /** * struct dma_buf_attachment - holds device-buffer attachment data * @dmabuf: buffer for this attachment. @@ -344,8 +395,9 @@ struct dma_buf { * @sgt: cached mapping. * @dir: direction of cached mapping. * @priv: exporter specific attachment data. - * @dynamic_mapping: true if dma_buf_map/unmap_attachment() is called with the - * dma_resv lock held. + * @importer_ops: importer operations for this attachment, if provided + * dma_buf_map/unmap_attachment() must be called with the dma_resv lock held. + * @importer_priv: importer specific attachment data. * * This structure holds the attachment information between the dma_buf buffer * and its user device(s). The list contains one attachment struct per device @@ -362,7 +414,8 @@ struct dma_buf_attachment { struct list_head node; struct sg_table *sgt; enum dma_data_direction dir; - bool dynamic_mapping; + const struct dma_buf_attach_ops *importer_ops; + void *importer_priv; void *priv; }; @@ -438,16 +491,19 @@ static inline bool dma_buf_is_dynamic(struct dma_buf *dmabuf) static inline bool dma_buf_attachment_is_dynamic(struct dma_buf_attachment *attach) { - return attach->dynamic_mapping; + return !!attach->importer_ops; } struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, struct device *dev); struct dma_buf_attachment * dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, - bool dynamic_mapping); + const struct dma_buf_attach_ops *importer_ops, + void *importer_priv); void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach); +int dma_buf_pin(struct dma_buf_attachment *attach); +void dma_buf_unpin(struct dma_buf_attachment *attach); struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info); -- 2.17.1