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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 62416CAC5A7 for ; Sat, 20 Sep 2025 20:39:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AHI1OyTvRZaQguAzK80wkeJgJMnlHOBKiCb/268pMiY=; b=wpd/PcMNFnywPB qMPmXn0g4rA0nqe3Fwrm+ATkxV3/sL3cID98ihDgXLczDrWgxq/JAWhrk0ld7tURlN+ncRhicL+Ha i+ULF1ZHM22iINQLU/eVDp0KLj8ztLUdqpY6NKskR2NLJxIl9rwa8bUkazy3ymaSgYdfW2NvwuTwW VG6Eg6FbCyt7kRVsyuOGlHet0dmuqXzeb8BXpHRhWkifVdet1WUJCLS55NJ+ANoZDiijqPuxdjBkn 9D0a+5J9LbHmQiSjV8sePEDkF4jhPs0/aP+fcY4TVedfz0zdL9Uo0UE6n6NyU6KOhaAgswwxTnNZi dKRwhvp+Va9dRJtHqqMA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v04ML-00000005tQV-0TFG; Sat, 20 Sep 2025 20:39:05 +0000 Received: from mail-io1-xd2e.google.com ([2607:f8b0:4864:20::d2e]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v04MG-00000005tJr-2TFI for kvm-riscv@lists.infradead.org; Sat, 20 Sep 2025 20:39:02 +0000 Received: by mail-io1-xd2e.google.com with SMTP id ca18e2360f4ac-88703c873d5so111914439f.3 for ; Sat, 20 Sep 2025 13:39:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1758400740; x=1759005540; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Vxzb9rRxjqRKf5XO1kwZTSmIsN5S40FhHTnMmuG0nDs=; b=IQNcSFdFNND5hEvI6CKRuyyc7Wl2i/P+bJ5pJI9oc5KFT5bx1xY4y7W++2TSCLdqmp Epw3HnydTkLnK1RydzOY7ziwo3JlHDSCFaABjnmB6TtERtSubn9D4khCAYoOnZkh5KVi jr3tkHT4VY2zijJO8NcdFiO91xhlmZoSGgLLGxHITayC/mz7eNRi2ZdueZEkx5dIzIjV YJW/r5o+Zbjwj/5EhL27u+L10wrbCwoDWKhs5OoOD87K2BqC7u7Uc5HYwTzorf31iu+v frY3kfzfjWIT/2jVgTHXyH7kxmT4XsubtSosc4zIz7K/G5Mot6Kiz5aobaAZapCrAfK+ de+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758400740; x=1759005540; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vxzb9rRxjqRKf5XO1kwZTSmIsN5S40FhHTnMmuG0nDs=; b=TFDMpZ//u46b+8RD/YhLWtDR9EDrSUOoawvW/O7bzJ+VGbW+oguiEclOzKBRs+QPmM YZo39y4Nhg/g6e8VGOTqzIZyLmsPmfIbVazroJUd7NlAsvsVg/p2TnekDA9W1gdmRnij WOzj/w/Z7o7n4kW5sUAyzOuVL9kSUPtTP34vyEO/fPD1tCOjPEBPqpBxmXSaZEHR7sWI Bum+97U/QncKrSJhz2gbwc6sJ4dKCrvlkHeJUhKWIZVzezVQD8IUMhlXjQuX080sCzH+ OfmKobyZq4TQwYI837jV/I088X06WWIDooEAvd2WqwoG4ecdqLI2bepo/laX/W08fdEQ t2DA== X-Forwarded-Encrypted: i=1; AJvYcCU6NEnEOApDDC78Ohsu8SA8gLWbitonkUphHw9c/mYdf0MLCsQCtDHS9imEghIVkvsT+wWTPRyvP1Q=@lists.infradead.org X-Gm-Message-State: AOJu0YxFF/0+MkeZ5bwVRdRkWEXdxc9svQv7p11+HnjmLvvK0YmGygVd Q3hbUX7Cv31nwxRUnlhn0+bVSdcz+sVSyyh+cI6TVYquch3+xcBsrSwjcKZNd27nO4I= X-Gm-Gg: ASbGncuQM2vWKjZR2CHt/JHIYKZVcYDpXZ9uuKUkbRIaP04ub7e2OoXYTNsk1XUB3Fa PEQVeeodxbBPgGfKTqBd+qZmk7jHt2aW+uatB0YRH6l3S5/zM3WYLtGgRB40qKJ5t6uRysZVFhF Y+25WtNN5ZUH76/OHinI1zujZrEGGcOtfnuYHbberWowh5uo2YlNcyP/Rkk0nAaP3+pueIbtLTR 666rmAwLtTikv161uhp0haHP9CbEoyKTmIbtWgRgwQ9eklmaOx38rVEAGFN+LTanO2NoksFl25u WJwlZ/bK0wgYpLC5yryrWGjGg08w2AqFly+EFMEHoeJsz7HcVMqHUDxI1O3kDgxpLjqZoANLLMh v3234+KBXLvaHxm+/++BKj5Ka X-Google-Smtp-Source: AGHT+IGN7JA6HMHp4R5UIXrjGTEkZ7bM+GXI227vKH+W+fzVXTLep0v3OqRrD7H9gufAai1BV1o2GQ== X-Received: by 2002:a5e:d50b:0:b0:893:2ff0:162c with SMTP id ca18e2360f4ac-8ade197b5efmr1011838239f.9.1758400739613; Sat, 20 Sep 2025 13:38:59 -0700 (PDT) Received: from localhost ([140.82.166.162]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-8a46ad38052sm296133939f.5.2025.09.20.13.38.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 13:38:59 -0700 (PDT) From: Andrew Jones To: iommu@lists.linux.dev, kvm-riscv@lists.infradead.org, kvm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: jgg@nvidia.com, zong.li@sifive.com, tjeznach@rivosinc.com, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, anup@brainfault.org, atish.patra@linux.dev, tglx@linutronix.de, alex.williamson@redhat.com, paul.walmsley@sifive.com, palmer@dabbelt.com, alex@ghiti.fr Subject: [RFC PATCH v2 05/18] iommu/riscv: Prepare to use MSI table Date: Sat, 20 Sep 2025 15:38:55 -0500 Message-ID: <20250920203851.2205115-25-ajones@ventanamicro.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250920203851.2205115-20-ajones@ventanamicro.com> References: <20250920203851.2205115-20-ajones@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250920_133900_645516_ECBE6EB2 X-CRM114-Status: GOOD ( 25.28 ) X-BeenThere: kvm-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kvm-riscv" Errors-To: kvm-riscv-bounces+kvm-riscv=archiver.kernel.org@lists.infradead.org Q2FwdHVyZSB0aGUgSU1TSUMgbGF5b3V0IGZyb20gaXRzIGNvbmZpZyBhbmQgcmVzZXJ2ZSBhbGwg dGhlIGFkZHJlc3Nlcy4KVGhlbiB1c2UgdGhlIElNU0lDIGxheW91dCBpbmZvIHRvIGNhbGN1bGF0 ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgUFRFcwp0aGUgTVNJIHRhYmxlIG5lZWRzIHRvIHN1cHBv cnQgYW5kIGFsbG9jYXRlIHRoZSBNU0kgdGFibGUgd2hlbiBhdHRhY2hpbmcKYSBwYWdpbmcgZG9t YWluIGZvciB0aGUgZmlyc3QgdGltZS4gRmluYWxseSwgYXQgdGhlIHNhbWUgdGltZSwgbWFwIHRo ZQpJTVNJQyBhZGRyZXNzZXMgaW4gdGhlIHN0YWdlMSBETUEgdGFibGUgd2hlbiB0aGUgc3RhZ2Ux IERNQSB0YWJsZSBpcyBub3QKQkFSRS4gVGhpcyBlbnN1cmVzIGl0IGRvZXNuJ3QgZmF1bHQgYXMg aXQgd2lsbCB0cmFuc2xhdGUgdGhlIGFkZHJlc3NlcwpiZWZvcmUgdGhlIE1TSSB0YWJsZSBkb2Vz LgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IEpvbmVzIDxham9uZXNAdmVudGFuYW1pY3JvLmNvbT4K LS0tCiBkcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LWlyLmMgfCAxODYgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMgICAgfCAgIDYg KysKIGRyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuaCAgICB8ICAgNCArCiAzIGZpbGVzIGNoYW5n ZWQsIDE5NiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9yaXNjdi9p b21tdS1pci5jIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS1pci5jCmluZGV4IDA4Y2YxNTli NTg3ZC4uYmVkMTA0YzUzMzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11 LWlyLmMKKysrIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS1pci5jCkBAIC00LDExICs0LDEw OCBAQAogICoKICAqIENvcHlyaWdodCDCqSAyMDI1IFZlbnRhbmEgTWljcm8gU3lzdGVtcyBJbmMu CiAgKi8KKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL3Jpc2N2LWltc2ljLmg+CiAjaW5jbHVkZSA8 bGludXgvaXJxZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CisjaW5jbHVkZSA8bGlu dXgvc2l6ZXMuaD4KIAorI2luY2x1ZGUgIi4uL2lvbW11LXBhZ2VzLmgiCiAjaW5jbHVkZSAiaW9t bXUuaCIKIAorc3RhdGljIHNpemVfdCByaXNjdl9pb21tdV9pcl9ncm91cF9zaXplKHN0cnVjdCBy aXNjdl9pb21tdV9kb21haW4gKmRvbWFpbikKK3sKKwlwaHlzX2FkZHJfdCBtYXNrID0gZG9tYWlu LT5tc2lfYWRkcl9tYXNrOworCisJaWYgKGRvbWFpbi0+Z3JvdXBfaW5kZXhfYml0cykgeworCQlw aHlzX2FkZHJfdCBncm91cF9tYXNrID0gQklUKGRvbWFpbi0+Z3JvdXBfaW5kZXhfYml0cykgLSAx OworCQlwaHlzX2FkZHJfdCBncm91cF9zaGlmdCA9IGRvbWFpbi0+Z3JvdXBfaW5kZXhfc2hpZnQg LSAxMjsKKworCQltYXNrICY9IH4oZ3JvdXBfbWFzayA8PCBncm91cF9zaGlmdCk7CisJfQorCisJ cmV0dXJuIChtYXNrICsgMSkgPDwgMTI7Cit9CisKK3N0YXRpYyBpbnQgcmlzY3ZfaW9tbXVfaXJf bWFwX3VubWFwX2ltc2ljcyhzdHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluICpkb21haW4sIGJvb2wg bWFwLAorCQkJCQkgICBnZnBfdCBnZnAsIHNpemVfdCAqdW5tYXBwZWQpCit7CisJcGh5c19hZGRy X3QgYmFzZSA9IGRvbWFpbi0+bXNpX2FkZHJfcGF0dGVybiA8PCAxMiwgYWRkcjsKKwlzaXplX3Qg c3RyaWRlID0gZG9tYWluLT5pbXNpY19zdHJpZGUsIG1hcF9zaXplID0gU1pfNEssIHNpemU7CisJ c2l6ZV90IGksIGo7CisKKwlzaXplID0gcmlzY3ZfaW9tbXVfaXJfZ3JvdXBfc2l6ZShkb21haW4p OworCisJaWYgKHN0cmlkZSA9PSBTWl80SykKKwkJc3RyaWRlID0gbWFwX3NpemUgPSBzaXplOwor CisJZm9yIChpID0gMDsgaSA8IEJJVChkb21haW4tPmdyb3VwX2luZGV4X2JpdHMpOyBpKyspIHsK KwkJZm9yIChqID0gMDsgaiA8IHNpemU7IGogKz0gc3RyaWRlKSB7CisJCQlhZGRyID0gKGJhc2Ug KyBqKSB8IChpIDw8IGRvbWFpbi0+Z3JvdXBfaW5kZXhfc2hpZnQpOworCQkJaWYgKG1hcCkgewor CQkJCWludCByZXQgPSBpb21tdV9tYXAoJmRvbWFpbi0+ZG9tYWluLCBhZGRyLCBhZGRyLCBtYXBf c2l6ZSwKKwkJCQkJCSAgICBJT01NVV9XUklURSB8IElPTU1VX05PRVhFQyB8IElPTU1VX01NSU8s IGdmcCk7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0gZWxzZSB7CisJCQkJ KnVubWFwcGVkICs9IGlvbW11X3VubWFwKCZkb21haW4tPmRvbWFpbiwgYWRkciwgbWFwX3NpemUp OworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3QgcmlzY3Zf aW9tbXVfaXJfdW5tYXBfaW1zaWNzKHN0cnVjdCByaXNjdl9pb21tdV9kb21haW4gKmRvbWFpbikK K3sKKwlzaXplX3QgdW5tYXBwZWQgPSAwOworCisJcmlzY3ZfaW9tbXVfaXJfbWFwX3VubWFwX2lt c2ljcyhkb21haW4sIGZhbHNlLCAwLCAmdW5tYXBwZWQpOworCisJcmV0dXJuIHVubWFwcGVkOwor fQorCitzdGF0aWMgaW50IHJpc2N2X2lvbW11X2lyX21hcF9pbXNpY3Moc3RydWN0IHJpc2N2X2lv bW11X2RvbWFpbiAqZG9tYWluLCBnZnBfdCBnZnApCit7CisJaW50IHJldDsKKworCXJldCA9IHJp c2N2X2lvbW11X2lyX21hcF91bm1hcF9pbXNpY3MoZG9tYWluLCB0cnVlLCBnZnAsIE5VTEwpOwor CWlmIChyZXQpCisJCXJpc2N2X2lvbW11X2lyX3VubWFwX2ltc2ljcyhkb21haW4pOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHNpemVfdCByaXNjdl9pb21tdV9pcl9jb21wdXRlX21zaXB0 ZV9pZHgoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCQkJcGh5c19hZGRy X3QgbXNpX3BhKQoreworCXBoeXNfYWRkcl90IG1hc2sgPSBkb21haW4tPm1zaV9hZGRyX21hc2s7 CisJcGh5c19hZGRyX3QgYWRkciA9IG1zaV9wYSA+PiAxMjsKKwlzaXplX3QgaWR4OworCisJaWYg KGRvbWFpbi0+Z3JvdXBfaW5kZXhfYml0cykgeworCQlwaHlzX2FkZHJfdCBncm91cF9tYXNrID0g QklUKGRvbWFpbi0+Z3JvdXBfaW5kZXhfYml0cykgLSAxOworCQlwaHlzX2FkZHJfdCBncm91cF9z aGlmdCA9IGRvbWFpbi0+Z3JvdXBfaW5kZXhfc2hpZnQgLSAxMjsKKwkJcGh5c19hZGRyX3QgZ3Jv dXAgPSAoYWRkciA+PiBncm91cF9zaGlmdCkgJiBncm91cF9tYXNrOworCisJCW1hc2sgJj0gfihn cm91cF9tYXNrIDw8IGdyb3VwX3NoaWZ0KTsKKwkJaWR4ID0gYWRkciAmIG1hc2s7CisJCWlkeCB8 PSBncm91cCA8PCBmbHM2NChtYXNrKTsKKwl9IGVsc2UgeworCQlpZHggPSBhZGRyICYgbWFzazsK Kwl9CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgc2l6ZV90IHJpc2N2X2lvbW11X2lyX25y X21zaXB0ZXMoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluKQoreworCXBoeXNfYWRk cl90IGJhc2UgPSBkb21haW4tPm1zaV9hZGRyX3BhdHRlcm4gPDwgMTI7CisJcGh5c19hZGRyX3Qg bWF4X2FkZHIgPSBiYXNlIHwgKGRvbWFpbi0+bXNpX2FkZHJfbWFzayA8PCAxMik7CisJc2l6ZV90 IG1heF9pZHggPSByaXNjdl9pb21tdV9pcl9jb21wdXRlX21zaXB0ZV9pZHgoZG9tYWluLCBtYXhf YWRkcik7CisKKwlyZXR1cm4gbWF4X2lkeCArIDE7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXJxX2No aXAgcmlzY3ZfaW9tbXVfaXJfaXJxX2NoaXAgPSB7CiAJLm5hbWUJCQk9ICJJT01NVS1JUiIsCiAJ LmlycV9hY2sJCT0gaXJxX2NoaXBfYWNrX3BhcmVudCwKQEAgLTkwLDI1ICsxODcsMTE0IEBAIHN0 cnVjdCBpcnFfZG9tYWluICpyaXNjdl9pb21tdV9pcl9pcnFfZG9tYWluX2NyZWF0ZShzdHJ1Y3Qg cmlzY3ZfaW9tbXVfZGV2aWNlICppCiAJcmV0dXJuIGlycWRvbWFpbjsKIH0KIAorc3RhdGljIHZv aWQgcmlzY3ZfaW9tbXVfaXJfZnJlZV9tc2lfdGFibGUoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFp biAqZG9tYWluKQoreworCWlvbW11X2ZyZWVfcGFnZXMoZG9tYWluLT5tc2lfcm9vdCk7Cit9CisK IHZvaWQgcmlzY3ZfaW9tbXVfaXJfaXJxX2RvbWFpbl9yZW1vdmUoc3RydWN0IHJpc2N2X2lvbW11 X2luZm8gKmluZm8pCiB7CisJc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluID0gaW5m by0+ZG9tYWluOwogCXN0cnVjdCBmd25vZGVfaGFuZGxlICpmbjsKIAogCWlmICghaW5mby0+aXJx ZG9tYWluKQogCQlyZXR1cm47CiAKKwlyaXNjdl9pb21tdV9pcl9mcmVlX21zaV90YWJsZShkb21h aW4pOworCiAJZm4gPSBpbmZvLT5pcnFkb21haW4tPmZ3bm9kZTsKIAlpcnFfZG9tYWluX3JlbW92 ZShpbmZvLT5pcnFkb21haW4pOwogCWluZm8tPmlycWRvbWFpbiA9IE5VTEw7CiAJaXJxX2RvbWFp bl9mcmVlX2Z3bm9kZShmbik7CiB9CiAKK3N0YXRpYyBpbnQgcmlzY3ZfaXJfc2V0X2ltc2ljX2ds b2JhbF9jb25maWcoc3RydWN0IHJpc2N2X2lvbW11X2RldmljZSAqaW9tbXUsCisJCQkJCSAgICBz dHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluICpkb21haW4pCit7CisJY29uc3Qgc3RydWN0IGltc2lj X2dsb2JhbF9jb25maWcgKmltc2ljX2dsb2JhbDsKKwl1NjQgbWFzayA9IDA7CisKKwlpbXNpY19n bG9iYWwgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpOworCisJbWFzayB8PSAoQklUKGltc2lj X2dsb2JhbC0+Z3JvdXBfaW5kZXhfYml0cykgLSAxKSA8PCAoaW1zaWNfZ2xvYmFsLT5ncm91cF9p bmRleF9zaGlmdCAtIDEyKTsKKwltYXNrIHw9IEJJVChpbXNpY19nbG9iYWwtPmhhcnRfaW5kZXhf Yml0cyArIGltc2ljX2dsb2JhbC0+Z3Vlc3RfaW5kZXhfYml0cykgLSAxOworCWRvbWFpbi0+bXNp X2FkZHJfbWFzayA9IG1hc2s7CisJZG9tYWluLT5tc2lfYWRkcl9wYXR0ZXJuID0gaW1zaWNfZ2xv YmFsLT5iYXNlX2FkZHIgPj4gMTI7CisJZG9tYWluLT5ncm91cF9pbmRleF9iaXRzID0gaW1zaWNf Z2xvYmFsLT5ncm91cF9pbmRleF9iaXRzOworCWRvbWFpbi0+Z3JvdXBfaW5kZXhfc2hpZnQgPSBp bXNpY19nbG9iYWwtPmdyb3VwX2luZGV4X3NoaWZ0OworCWRvbWFpbi0+aW1zaWNfc3RyaWRlID0g QklUKGltc2ljX2dsb2JhbC0+Z3Vlc3RfaW5kZXhfYml0cyArIDEyKTsKKworCWlmIChpb21tdS0+ Y2FwcyAmIFJJU0NWX0lPTU1VX0NBUEFCSUxJVElFU19NU0lfRkxBVCkgeworCQlzaXplX3QgbnJf cHRlcyA9IHJpc2N2X2lvbW11X2lyX25yX21zaXB0ZXMoZG9tYWluKTsKKworCQlkb21haW4tPm1z aV9yb290ID0gaW9tbXVfYWxsb2NfcGFnZXNfbm9kZV9zeihkb21haW4tPm51bWFfbm9kZSwgR0ZQ X0tFUk5FTF9BQ0NPVU5ULAorCQkJCQkJCSAgICAgbnJfcHRlcyAqIHNpemVvZigqZG9tYWluLT5t c2lfcm9vdCkpOworCQlpZiAoIWRvbWFpbi0+bXNpX3Jvb3QpCisJCQlyZXR1cm4gLUVOT01FTTsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHJpc2N2X2lvbW11X2lyX2F0dGFjaF9wYWdpbmdf ZG9tYWluKHN0cnVjdCByaXNjdl9pb21tdV9kb21haW4gKmRvbWFpbiwKIAkJCQkJc3RydWN0IGRl dmljZSAqZGV2KQogeworCXN0cnVjdCByaXNjdl9pb21tdV9kZXZpY2UgKmlvbW11ID0gZGV2X3Rv X2lvbW11KGRldik7CisJc3RydWN0IHJpc2N2X2lvbW11X2luZm8gKmluZm8gPSBkZXZfaW9tbXVf cHJpdl9nZXQoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKCFpbmZvLT5pcnFkb21haW4pCisJCXJl dHVybiAwOworCisJLyoKKwkgKiBEbyB0aGUgZG9tYWluJ3Mgb25lLXRpbWUgc2V0dXAgb2YgdGhl IG1zaSBjb25maWd1cmF0aW9uIHRoZQorCSAqIGZpcnN0IHRpbWUgdGhlIGRvbWFpbiBpcyBhdHRh Y2hlZCBhbmQgdGhlIG1zaXMgYXJlIGVuYWJsZWQuCisJICovCisJaWYgKGRvbWFpbi0+bXNpX2Fk ZHJfbWFzayA9PSAwKSB7CisJCXJldCA9IHJpc2N2X2lyX3NldF9pbXNpY19nbG9iYWxfY29uZmln KGlvbW11LCBkb21haW4pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKgorCQkg KiBUaGUgUklTQy1WIElPTU1VIE1TSSB0YWJsZSBpcyBjaGVja2VkIGFmdGVyIHRoZSBzdGFnZTEg RE1BCisJCSAqIHBhZ2UgdGFibGVzLiBJZiB3ZSBkb24ndCBjcmVhdGUgaWRlbnRpdHkgbWFwcGlu Z3MgaW4gdGhlCisJCSAqIHN0YWdlMSB0YWJsZSB0aGVuIHdlJ2xsIGZhdWx0IGFuZCB3b24ndCBl dmVuIGdldCBhIGNoYW5jZQorCQkgKiB0byBjaGVjayB0aGUgTVNJIHRhYmxlLgorCQkgKi8KKwkJ aWYgKGRvbWFpbi0+cGdkX21vZGUpIHsKKwkJCXJldCA9IHJpc2N2X2lvbW11X2lyX21hcF9pbXNp Y3MoZG9tYWluLCBHRlBfS0VSTkVMX0FDQ09VTlQpOworCQkJaWYgKHJldCkgeworCQkJCXJpc2N2 X2lvbW11X2lyX2ZyZWVfbXNpX3RhYmxlKGRvbWFpbik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0K KwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCiB2b2lkIHJpc2N2X2lvbW11X2lyX2ZyZWVfcGFn aW5nX2RvbWFpbihzdHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluICpkb21haW4pCiB7CisJcmlzY3Zf aW9tbXVfaXJfZnJlZV9tc2lfdGFibGUoZG9tYWluKTsKK30KKwordm9pZCByaXNjdl9pb21tdV9p cl9nZXRfcmVzdl9yZWdpb25zKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAq aGVhZCkKK3sKKwljb25zdCBzdHJ1Y3QgaW1zaWNfZ2xvYmFsX2NvbmZpZyAqaW1zaWNfZ2xvYmFs OworCXN0cnVjdCBpb21tdV9yZXN2X3JlZ2lvbiAqcmVnOworCXBoeXNfYWRkcl90IGFkZHI7CisJ c2l6ZV90IHNpemUsIGk7CisKKwlpbXNpY19nbG9iYWwgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZp ZygpOworCWlmICghaW1zaWNfZ2xvYmFsIHx8ICFpbXNpY19nbG9iYWwtPm5yX2lkcykKKwkJcmV0 dXJuOworCisJc2l6ZSA9IEJJVChpbXNpY19nbG9iYWwtPmhhcnRfaW5kZXhfYml0cyArIGltc2lj X2dsb2JhbC0+Z3Vlc3RfaW5kZXhfYml0cyArIDEyKTsKKworCWZvciAoaSA9IDA7IGkgPCBCSVQo aW1zaWNfZ2xvYmFsLT5ncm91cF9pbmRleF9iaXRzKTsgaSsrKSB7CisJCWFkZHIgPSBpbXNpY19n bG9iYWwtPmJhc2VfYWRkciB8IChpIDw8IGltc2ljX2dsb2JhbC0+Z3JvdXBfaW5kZXhfc2hpZnQp OworCQlyZWcgPSBpb21tdV9hbGxvY19yZXN2X3JlZ2lvbihhZGRyLCBzaXplLCAwLCBJT01NVV9S RVNWX01TSSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZWcpCisJCQlsaXN0X2FkZF90YWlsKCZyZWct Pmxpc3QsIGhlYWQpOworCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9t bXUuYyBiL2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuYwppbmRleCBkYjJhY2Q5ZGM2NGIuLjBi YTY1MDRkNGYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS5jCisrKyBi L2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuYwpAQCAtMTQyMyw2ICsxNDIzLDExIEBAIHN0YXRp YyBzdHJ1Y3QgaW9tbXVfZG9tYWluICpyaXNjdl9pb21tdV9hbGxvY19wYWdpbmdfZG9tYWluKHN0 cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4gJmRvbWFpbi0+ZG9tYWluOwogfQogCitzdGF0aWMg dm9pZCByaXNjdl9pb21tdV9nZXRfcmVzdl9yZWdpb25zKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyaXNjdl9pb21tdV9pcl9nZXRfcmVzdl9yZWdpb25z KGRldiwgaGVhZCk7Cit9CisKIHN0YXRpYyBpbnQgcmlzY3ZfaW9tbXVfYXR0YWNoX2Jsb2NraW5n X2RvbWFpbihzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdV9kb21haW4sCiAJCQkJCSAgICAgIHN0 cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTE1NjEsNiArMTU2Niw3IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgaW9tbXVfb3BzIHJpc2N2X2lvbW11X29wcyA9IHsKIAkuYmxvY2tlZF9kb21haW4gPSAm cmlzY3ZfaW9tbXVfYmxvY2tpbmdfZG9tYWluLAogCS5yZWxlYXNlX2RvbWFpbiA9ICZyaXNjdl9p b21tdV9ibG9ja2luZ19kb21haW4sCiAJLmRvbWFpbl9hbGxvY19wYWdpbmcgPSByaXNjdl9pb21t dV9hbGxvY19wYWdpbmdfZG9tYWluLAorCS5nZXRfcmVzdl9yZWdpb25zID0gcmlzY3ZfaW9tbXVf Z2V0X3Jlc3ZfcmVnaW9ucywKIAkuZGV2aWNlX2dyb3VwID0gcmlzY3ZfaW9tbXVfZGV2aWNlX2dy b3VwLAogCS5wcm9iZV9kZXZpY2UgPSByaXNjdl9pb21tdV9wcm9iZV9kZXZpY2UsCiAJLnJlbGVh c2VfZGV2aWNlCT0gcmlzY3ZfaW9tbXVfcmVsZWFzZV9kZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmggYi9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmgKaW5k ZXggNjQwZDgyNWYxMWI5Li5kYzIwMjBiODFiYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUv cmlzY3YvaW9tbXUuaAorKysgYi9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmgKQEAgLTMwLDYg KzMwLDkgQEAgc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiB7CiAJc3RydWN0IHJpc2N2X2lvbW11 X21zaXB0ZSAqbXNpX3Jvb3Q7CiAJdTY0IG1zaV9hZGRyX21hc2s7CiAJdTY0IG1zaV9hZGRyX3Bh dHRlcm47CisJdTMyIGdyb3VwX2luZGV4X2JpdHM7CisJdTMyIGdyb3VwX2luZGV4X3NoaWZ0Owor CXNpemVfdCBpbXNpY19zdHJpZGU7CiB9OwogCiAvKiBQcml2YXRlIElPTU1VIGRhdGEgZm9yIG1h bmFnZWQgZGV2aWNlcywgZGV2X2lvbW11X3ByaXZfKiAqLwpAQCAtOTcsNiArMTAwLDcgQEAgdm9p ZCByaXNjdl9pb21tdV9pcl9pcnFfZG9tYWluX3JlbW92ZShzdHJ1Y3QgcmlzY3ZfaW9tbXVfaW5m byAqaW5mbyk7CiBpbnQgcmlzY3ZfaW9tbXVfaXJfYXR0YWNoX3BhZ2luZ19kb21haW4oc3RydWN0 IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluLAogCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpOwog dm9pZCByaXNjdl9pb21tdV9pcl9mcmVlX3BhZ2luZ19kb21haW4oc3RydWN0IHJpc2N2X2lvbW11 X2RvbWFpbiAqZG9tYWluKTsKK3ZvaWQgcmlzY3ZfaW9tbXVfaXJfZ2V0X3Jlc3ZfcmVnaW9ucyhz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogCiAjZGVmaW5lIHJp c2N2X2lvbW11X3JlYWRsKGlvbW11LCBhZGRyKSBcCiAJcmVhZGxfcmVsYXhlZCgoaW9tbXUpLT5y ZWcgKyAoYWRkcikpCi0tIAoyLjQ5LjAKCgotLSAKa3ZtLXJpc2N2IG1haWxpbmcgbGlzdAprdm0t cmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2t2bS1yaXNjdgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-il1-f180.google.com (mail-il1-f180.google.com [209.85.166.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD3692D9EFF for ; Sat, 20 Sep 2025 20:39:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.180 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758400742; cv=none; b=IHYgBZJDEeUUY9HjZMDyiQ6rgSuHBN00qisHkobDt4ublBIRb0vOYqIkMir5tnw10UXmdG0mW9NsUqn/xx0pKdZqhZzoxYJ9Yw5/IR2JAvlvlNWtGya7QKG+8pIPtaa7eoVMu2Cf9efG6QScePlyAoGjDxfGrF1Vj/vmRDv89oM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758400742; c=relaxed/simple; bh=RjwhJA8A/oUnsQw6R1F22fcUWOTwb7V2Ws3LoFKq0Ow=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FWLjlIhLZWxKVlpdt4NZ5L52FnrGr5wjSNOvGgS6IUpp5jIqaDQamUJClOFkxosTugxKKi39QgUL46AQqJmXE2Uk3fPR3fNaAAHFhVL4xm9rtWDU1nR7bK+APpRdq2RB0KytEjCrD5dW30ZNG+zEGXazG2ook1R7UXcZoP5gJZ4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ventanamicro.com; spf=pass smtp.mailfrom=ventanamicro.com; dkim=pass (2048-bit key) header.d=ventanamicro.com header.i=@ventanamicro.com header.b=DXua6msX; arc=none smtp.client-ip=209.85.166.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ventanamicro.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ventanamicro.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ventanamicro.com header.i=@ventanamicro.com header.b="DXua6msX" Received: by mail-il1-f180.google.com with SMTP id e9e14a558f8ab-4247d991161so13735405ab.3 for ; Sat, 20 Sep 2025 13:39:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1758400740; x=1759005540; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Vxzb9rRxjqRKf5XO1kwZTSmIsN5S40FhHTnMmuG0nDs=; b=DXua6msXowCGpY1bF7qGX+gT68wKPHR4tyBMOiEL61LNCbw+l9UrpgGByrTbzjiyOu XH+cjdZpgG2UDoGGY+FixxtLKLLLVhJeNJVE76i/OxZ8/ZrW47SmoDowRzRcNDBF2Bs9 nfvtZ8gD9XK08huO2uC2WFjtrKLMrXSTk00qlPvtv4zehq1a0rH/UNOgfwm7SJMJS9Mw Jqi2DxrIZUh7yHpYTyv1sNEEKtP1l/jjq/DfW/ZHyGitmQ2CJb2rCFadraVGq8mbHnFR MrSpltdx8/ZBrogSYSuj79tcF2hJeO58KzPkRmNKkp/meW+kqMx/rRP4oZHdoEg5/KfL Kqjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758400740; x=1759005540; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vxzb9rRxjqRKf5XO1kwZTSmIsN5S40FhHTnMmuG0nDs=; b=llrY20MQAXhtu39hodFKpIP6GkQcoHG96i2ypA7fpaBOuA7a88lEzt4r0RUHf/mXsp 4JRphh42aulAHP4cYZqkfKSMQMR94ipsGgL7i2Nd42CPU+RWs3/fizzbh35wo59CJZv9 SJPTwLBcVwiAyAUfMrxWt/5zbrasjASJVyoycpI5c+cC0A+kxAAwL+WxaukNv3XY6D95 1JNWviQtnTUYNpUR3lR96zycG0Z462ECqFFPIPx+we8KxlLBwhocEUIZn03NVRUj3RWp id3vEtLtEqczdfBjWjeswApvGyfuNNUy5TH2CLLM01lVKCV4N+MAQ/9B4R3pgWn7RdCo /BhA== X-Forwarded-Encrypted: i=1; AJvYcCWyTLHShilH7I8PkIg7HuLNudIBvxF+jHy2Ckfg0xC3eAxz/TUF8spQsdhUeLMRc2Tlgtg=@vger.kernel.org X-Gm-Message-State: AOJu0YwRD/Q1MSE08GRL5JVehcMX6L7osUs2KmuXjtjeH2zLlzzP630l HFD4j4NbL7ccgbarGyVIQLnktuNNuSCMOe/CJVDwRPqjLr3ZZvP8FLpiLyxkmnZ8+Ys= X-Gm-Gg: ASbGncurDOXiVvRYNRIQK7YswZi1j9Clkf/1Mj07ODULW0xvWolbIWDjjgnSGUWWGII rXWdYUu+Mmtqzx1SKo3lGlAt75t3tYRxU0h19I7ut0h+J/8eqH0vSehD6KrVzSs7qhigehOuzxN n+BQ4DTFab+PSMuDzKU27K8GKmZPORMYnDixz0i4U7vkMaCW6v7IaHQJ4AM0LCzNBoSAz6f5LXH NZMitnLYHiPADkL9Xr4K0BtQlvqRH7Jl2jlM2P1Fcwg9MHKN92NbnNtADMc2uaAzXu4ASup1YSW SnCl2XM56378M7VIHpNxQgB7BhYROSRYzc3iil8PLzWwYLOUaPaREOq7VBIiK3kyNPoR0k5LlMk Y6oLdfjnMYOKP2Ufto6ICwC8O X-Google-Smtp-Source: AGHT+IGN7JA6HMHp4R5UIXrjGTEkZ7bM+GXI227vKH+W+fzVXTLep0v3OqRrD7H9gufAai1BV1o2GQ== X-Received: by 2002:a5e:d50b:0:b0:893:2ff0:162c with SMTP id ca18e2360f4ac-8ade197b5efmr1011838239f.9.1758400739613; Sat, 20 Sep 2025 13:38:59 -0700 (PDT) Received: from localhost ([140.82.166.162]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-8a46ad38052sm296133939f.5.2025.09.20.13.38.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 13:38:59 -0700 (PDT) From: Andrew Jones To: iommu@lists.linux.dev, kvm-riscv@lists.infradead.org, kvm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: jgg@nvidia.com, zong.li@sifive.com, tjeznach@rivosinc.com, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, anup@brainfault.org, atish.patra@linux.dev, tglx@linutronix.de, alex.williamson@redhat.com, paul.walmsley@sifive.com, palmer@dabbelt.com, alex@ghiti.fr Subject: [RFC PATCH v2 05/18] iommu/riscv: Prepare to use MSI table Date: Sat, 20 Sep 2025 15:38:55 -0500 Message-ID: <20250920203851.2205115-25-ajones@ventanamicro.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250920203851.2205115-20-ajones@ventanamicro.com> References: <20250920203851.2205115-20-ajones@ventanamicro.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Capture the IMSIC layout from its config and reserve all the addresses. Then use the IMSIC layout info to calculate the maximum number of PTEs the MSI table needs to support and allocate the MSI table when attaching a paging domain for the first time. Finally, at the same time, map the IMSIC addresses in the stage1 DMA table when the stage1 DMA table is not BARE. This ensures it doesn't fault as it will translate the addresses before the MSI table does. Signed-off-by: Andrew Jones --- drivers/iommu/riscv/iommu-ir.c | 186 +++++++++++++++++++++++++++++++++ drivers/iommu/riscv/iommu.c | 6 ++ drivers/iommu/riscv/iommu.h | 4 + 3 files changed, 196 insertions(+) diff --git a/drivers/iommu/riscv/iommu-ir.c b/drivers/iommu/riscv/iommu-ir.c index 08cf159b587d..bed104c5333c 100644 --- a/drivers/iommu/riscv/iommu-ir.c +++ b/drivers/iommu/riscv/iommu-ir.c @@ -4,11 +4,108 @@ * * Copyright © 2025 Ventana Micro Systems Inc. */ +#include #include #include +#include +#include "../iommu-pages.h" #include "iommu.h" +static size_t riscv_iommu_ir_group_size(struct riscv_iommu_domain *domain) +{ + phys_addr_t mask = domain->msi_addr_mask; + + if (domain->group_index_bits) { + phys_addr_t group_mask = BIT(domain->group_index_bits) - 1; + phys_addr_t group_shift = domain->group_index_shift - 12; + + mask &= ~(group_mask << group_shift); + } + + return (mask + 1) << 12; +} + +static int riscv_iommu_ir_map_unmap_imsics(struct riscv_iommu_domain *domain, bool map, + gfp_t gfp, size_t *unmapped) +{ + phys_addr_t base = domain->msi_addr_pattern << 12, addr; + size_t stride = domain->imsic_stride, map_size = SZ_4K, size; + size_t i, j; + + size = riscv_iommu_ir_group_size(domain); + + if (stride == SZ_4K) + stride = map_size = size; + + for (i = 0; i < BIT(domain->group_index_bits); i++) { + for (j = 0; j < size; j += stride) { + addr = (base + j) | (i << domain->group_index_shift); + if (map) { + int ret = iommu_map(&domain->domain, addr, addr, map_size, + IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO, gfp); + if (ret) + return ret; + } else { + *unmapped += iommu_unmap(&domain->domain, addr, map_size); + } + } + } + + return 0; +} + +static size_t riscv_iommu_ir_unmap_imsics(struct riscv_iommu_domain *domain) +{ + size_t unmapped = 0; + + riscv_iommu_ir_map_unmap_imsics(domain, false, 0, &unmapped); + + return unmapped; +} + +static int riscv_iommu_ir_map_imsics(struct riscv_iommu_domain *domain, gfp_t gfp) +{ + int ret; + + ret = riscv_iommu_ir_map_unmap_imsics(domain, true, gfp, NULL); + if (ret) + riscv_iommu_ir_unmap_imsics(domain); + + return ret; +} + +static size_t riscv_iommu_ir_compute_msipte_idx(struct riscv_iommu_domain *domain, + phys_addr_t msi_pa) +{ + phys_addr_t mask = domain->msi_addr_mask; + phys_addr_t addr = msi_pa >> 12; + size_t idx; + + if (domain->group_index_bits) { + phys_addr_t group_mask = BIT(domain->group_index_bits) - 1; + phys_addr_t group_shift = domain->group_index_shift - 12; + phys_addr_t group = (addr >> group_shift) & group_mask; + + mask &= ~(group_mask << group_shift); + idx = addr & mask; + idx |= group << fls64(mask); + } else { + idx = addr & mask; + } + + return idx; +} + +static size_t riscv_iommu_ir_nr_msiptes(struct riscv_iommu_domain *domain) +{ + phys_addr_t base = domain->msi_addr_pattern << 12; + phys_addr_t max_addr = base | (domain->msi_addr_mask << 12); + size_t max_idx = riscv_iommu_ir_compute_msipte_idx(domain, max_addr); + + return max_idx + 1; +} + static struct irq_chip riscv_iommu_ir_irq_chip = { .name = "IOMMU-IR", .irq_ack = irq_chip_ack_parent, @@ -90,25 +187,114 @@ struct irq_domain *riscv_iommu_ir_irq_domain_create(struct riscv_iommu_device *i return irqdomain; } +static void riscv_iommu_ir_free_msi_table(struct riscv_iommu_domain *domain) +{ + iommu_free_pages(domain->msi_root); +} + void riscv_iommu_ir_irq_domain_remove(struct riscv_iommu_info *info) { + struct riscv_iommu_domain *domain = info->domain; struct fwnode_handle *fn; if (!info->irqdomain) return; + riscv_iommu_ir_free_msi_table(domain); + fn = info->irqdomain->fwnode; irq_domain_remove(info->irqdomain); info->irqdomain = NULL; irq_domain_free_fwnode(fn); } +static int riscv_ir_set_imsic_global_config(struct riscv_iommu_device *iommu, + struct riscv_iommu_domain *domain) +{ + const struct imsic_global_config *imsic_global; + u64 mask = 0; + + imsic_global = imsic_get_global_config(); + + mask |= (BIT(imsic_global->group_index_bits) - 1) << (imsic_global->group_index_shift - 12); + mask |= BIT(imsic_global->hart_index_bits + imsic_global->guest_index_bits) - 1; + domain->msi_addr_mask = mask; + domain->msi_addr_pattern = imsic_global->base_addr >> 12; + domain->group_index_bits = imsic_global->group_index_bits; + domain->group_index_shift = imsic_global->group_index_shift; + domain->imsic_stride = BIT(imsic_global->guest_index_bits + 12); + + if (iommu->caps & RISCV_IOMMU_CAPABILITIES_MSI_FLAT) { + size_t nr_ptes = riscv_iommu_ir_nr_msiptes(domain); + + domain->msi_root = iommu_alloc_pages_node_sz(domain->numa_node, GFP_KERNEL_ACCOUNT, + nr_ptes * sizeof(*domain->msi_root)); + if (!domain->msi_root) + return -ENOMEM; + } + + return 0; +} + int riscv_iommu_ir_attach_paging_domain(struct riscv_iommu_domain *domain, struct device *dev) { + struct riscv_iommu_device *iommu = dev_to_iommu(dev); + struct riscv_iommu_info *info = dev_iommu_priv_get(dev); + int ret; + + if (!info->irqdomain) + return 0; + + /* + * Do the domain's one-time setup of the msi configuration the + * first time the domain is attached and the msis are enabled. + */ + if (domain->msi_addr_mask == 0) { + ret = riscv_ir_set_imsic_global_config(iommu, domain); + if (ret) + return ret; + + /* + * The RISC-V IOMMU MSI table is checked after the stage1 DMA + * page tables. If we don't create identity mappings in the + * stage1 table then we'll fault and won't even get a chance + * to check the MSI table. + */ + if (domain->pgd_mode) { + ret = riscv_iommu_ir_map_imsics(domain, GFP_KERNEL_ACCOUNT); + if (ret) { + riscv_iommu_ir_free_msi_table(domain); + return ret; + } + } + } + return 0; } void riscv_iommu_ir_free_paging_domain(struct riscv_iommu_domain *domain) { + riscv_iommu_ir_free_msi_table(domain); +} + +void riscv_iommu_ir_get_resv_regions(struct device *dev, struct list_head *head) +{ + const struct imsic_global_config *imsic_global; + struct iommu_resv_region *reg; + phys_addr_t addr; + size_t size, i; + + imsic_global = imsic_get_global_config(); + if (!imsic_global || !imsic_global->nr_ids) + return; + + size = BIT(imsic_global->hart_index_bits + imsic_global->guest_index_bits + 12); + + for (i = 0; i < BIT(imsic_global->group_index_bits); i++) { + addr = imsic_global->base_addr | (i << imsic_global->group_index_shift); + reg = iommu_alloc_resv_region(addr, size, 0, IOMMU_RESV_MSI, GFP_KERNEL); + if (reg) + list_add_tail(®->list, head); + } } diff --git a/drivers/iommu/riscv/iommu.c b/drivers/iommu/riscv/iommu.c index db2acd9dc64b..0ba6504d4f33 100644 --- a/drivers/iommu/riscv/iommu.c +++ b/drivers/iommu/riscv/iommu.c @@ -1423,6 +1423,11 @@ static struct iommu_domain *riscv_iommu_alloc_paging_domain(struct device *dev) return &domain->domain; } +static void riscv_iommu_get_resv_regions(struct device *dev, struct list_head *head) +{ + riscv_iommu_ir_get_resv_regions(dev, head); +} + static int riscv_iommu_attach_blocking_domain(struct iommu_domain *iommu_domain, struct device *dev) { @@ -1561,6 +1566,7 @@ static const struct iommu_ops riscv_iommu_ops = { .blocked_domain = &riscv_iommu_blocking_domain, .release_domain = &riscv_iommu_blocking_domain, .domain_alloc_paging = riscv_iommu_alloc_paging_domain, + .get_resv_regions = riscv_iommu_get_resv_regions, .device_group = riscv_iommu_device_group, .probe_device = riscv_iommu_probe_device, .release_device = riscv_iommu_release_device, diff --git a/drivers/iommu/riscv/iommu.h b/drivers/iommu/riscv/iommu.h index 640d825f11b9..dc2020b81bbc 100644 --- a/drivers/iommu/riscv/iommu.h +++ b/drivers/iommu/riscv/iommu.h @@ -30,6 +30,9 @@ struct riscv_iommu_domain { struct riscv_iommu_msipte *msi_root; u64 msi_addr_mask; u64 msi_addr_pattern; + u32 group_index_bits; + u32 group_index_shift; + size_t imsic_stride; }; /* Private IOMMU data for managed devices, dev_iommu_priv_* */ @@ -97,6 +100,7 @@ void riscv_iommu_ir_irq_domain_remove(struct riscv_iommu_info *info); int riscv_iommu_ir_attach_paging_domain(struct riscv_iommu_domain *domain, struct device *dev); void riscv_iommu_ir_free_paging_domain(struct riscv_iommu_domain *domain); +void riscv_iommu_ir_get_resv_regions(struct device *dev, struct list_head *head); #define riscv_iommu_readl(iommu, addr) \ readl_relaxed((iommu)->reg + (addr)) -- 2.49.0 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D316ECAC5AA for ; Sat, 20 Sep 2025 20:39:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=jGzErHWvRmjEKbiN/6nxFj4hlbqcnIgnnrc421CsSQM=; b=Fm95GkYadtv1ir Aft6nYfh43tIFvWI7gcNdB6c7f/67Jt7Yd+DozW1i3kjEmpl4D5egl9jcUDrHmZ7fyRBjcCzU3QCk 3v5SdcyTuSzeEVT1z0YPPDYlP93R/u93oiDVxGYv95f+jCL+MgEdJuEaWM1tDnSxfr/UiYphCxL8c ExWNl+3YBCEl0ImzRdHT+2qKggbfj4OAbn1KL4ueu0GqfpUKdNyZehyHftIPmcFmm6yqfHFWnFvPx RmRS7QkO0wOBgUUL2c0hEjLJB4LIE5RlNUvO6c5SxNiFa3CccUF6selzF/09puen+IE3wIKG/0K4p fimmZ/4Zy7Xize+ROlnQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v04MK-00000005tQ9-3IP6; Sat, 20 Sep 2025 20:39:04 +0000 Received: from mail-il1-x12a.google.com ([2607:f8b0:4864:20::12a]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v04MG-00000005tJs-2TQB for linux-riscv@lists.infradead.org; Sat, 20 Sep 2025 20:39:01 +0000 Received: by mail-il1-x12a.google.com with SMTP id e9e14a558f8ab-4248746aabfso9044625ab.2 for ; Sat, 20 Sep 2025 13:39:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1758400740; x=1759005540; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Vxzb9rRxjqRKf5XO1kwZTSmIsN5S40FhHTnMmuG0nDs=; b=IQNcSFdFNND5hEvI6CKRuyyc7Wl2i/P+bJ5pJI9oc5KFT5bx1xY4y7W++2TSCLdqmp Epw3HnydTkLnK1RydzOY7ziwo3JlHDSCFaABjnmB6TtERtSubn9D4khCAYoOnZkh5KVi jr3tkHT4VY2zijJO8NcdFiO91xhlmZoSGgLLGxHITayC/mz7eNRi2ZdueZEkx5dIzIjV YJW/r5o+Zbjwj/5EhL27u+L10wrbCwoDWKhs5OoOD87K2BqC7u7Uc5HYwTzorf31iu+v frY3kfzfjWIT/2jVgTHXyH7kxmT4XsubtSosc4zIz7K/G5Mot6Kiz5aobaAZapCrAfK+ de+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758400740; x=1759005540; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vxzb9rRxjqRKf5XO1kwZTSmIsN5S40FhHTnMmuG0nDs=; b=JA/l7oJ64IbCbscouWEkrrw5yQv5Qc4MeMEAoinkc05mNpn+sOM/G2wpdCDF1K2dqh hkMjbLuniJu7r43otb7ANdmXBwUB0SejotdW8DrILNtnFc16OXEFuX5wwlsmPJOArK/J q6ZyQNJJK+HFjc9xbievEKZ0wz6Y8MrQ4jT3eRM9rC4RmRNLFaDZquGq2O2o/b1FrSa3 eNcnLQxhx8tKq1iShL4FTywOtJ5rYk8Hw331mFKJeWcW5MQbQHNLePnQlcpsf+N99G4x i/iaiRLuwqWRNebGrSAKwKGXZ+svPEngH4mmL2uxPvckdDK537D0WdZOLNvDB7iPEsXD XUJg== X-Forwarded-Encrypted: i=1; AJvYcCXxh6KsVSEZC4MfGq5KOONzMhgG1I02JCEhjf/laQfOAGhjLtGpJtYkW7T/+3Nfx7s4e0Ow2VM62EslwA==@lists.infradead.org X-Gm-Message-State: AOJu0YzsBHglG/IoaJm+kvA/dyJNGZdU8Juhk7wYDYkqNXnd+SQDRBRW 6voI/ftdnoTwCxbUuA9dv2prbhKLr0J5zTv8gt2Dv6+y7hcvVLA92Y19O4urGh42lAk= X-Gm-Gg: ASbGncv0BsS5VxIFxpKi4LGV74PJffqjTUlQBk5sivor0q+jFWisCd/ETdet0Rq2/Zt bLk3eZE6HFmKK24RDI7lmKD8+FIajNdCd7Spfomq1C+8cdKJDkUYWwwxvELf3LBhcnsqduEKdme 7sftMQg7B/KSTmHpup0E2CeMxo/u37CCwMu056pd9/CEWWLDAwfaH1JW+cEjt1YQ8J/P47OsFR8 mBaQzHQo5NpQMd8Rcn4Hdwa70R3sb9MhgHb7oYasFYmTuiDvroq8cm1Ji02A+pIWLrM2dPc5iam 3+LdOkEggCQ0USbVVLkBBLZP33fWFM7339bLb4c2k8ERZAqcK7bdQbggLNMla9hLdNLZgNuZHxx OKrdjHZLKfgI/1uBqoAO2P8yr X-Google-Smtp-Source: AGHT+IGN7JA6HMHp4R5UIXrjGTEkZ7bM+GXI227vKH+W+fzVXTLep0v3OqRrD7H9gufAai1BV1o2GQ== X-Received: by 2002:a5e:d50b:0:b0:893:2ff0:162c with SMTP id ca18e2360f4ac-8ade197b5efmr1011838239f.9.1758400739613; Sat, 20 Sep 2025 13:38:59 -0700 (PDT) Received: from localhost ([140.82.166.162]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-8a46ad38052sm296133939f.5.2025.09.20.13.38.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 13:38:59 -0700 (PDT) From: Andrew Jones To: iommu@lists.linux.dev, kvm-riscv@lists.infradead.org, kvm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: jgg@nvidia.com, zong.li@sifive.com, tjeznach@rivosinc.com, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, anup@brainfault.org, atish.patra@linux.dev, tglx@linutronix.de, alex.williamson@redhat.com, paul.walmsley@sifive.com, palmer@dabbelt.com, alex@ghiti.fr Subject: [RFC PATCH v2 05/18] iommu/riscv: Prepare to use MSI table Date: Sat, 20 Sep 2025 15:38:55 -0500 Message-ID: <20250920203851.2205115-25-ajones@ventanamicro.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250920203851.2205115-20-ajones@ventanamicro.com> References: <20250920203851.2205115-20-ajones@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250920_133900_646905_086715B2 X-CRM114-Status: GOOD ( 25.28 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Q2FwdHVyZSB0aGUgSU1TSUMgbGF5b3V0IGZyb20gaXRzIGNvbmZpZyBhbmQgcmVzZXJ2ZSBhbGwg dGhlIGFkZHJlc3Nlcy4KVGhlbiB1c2UgdGhlIElNU0lDIGxheW91dCBpbmZvIHRvIGNhbGN1bGF0 ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgUFRFcwp0aGUgTVNJIHRhYmxlIG5lZWRzIHRvIHN1cHBv cnQgYW5kIGFsbG9jYXRlIHRoZSBNU0kgdGFibGUgd2hlbiBhdHRhY2hpbmcKYSBwYWdpbmcgZG9t YWluIGZvciB0aGUgZmlyc3QgdGltZS4gRmluYWxseSwgYXQgdGhlIHNhbWUgdGltZSwgbWFwIHRo ZQpJTVNJQyBhZGRyZXNzZXMgaW4gdGhlIHN0YWdlMSBETUEgdGFibGUgd2hlbiB0aGUgc3RhZ2Ux IERNQSB0YWJsZSBpcyBub3QKQkFSRS4gVGhpcyBlbnN1cmVzIGl0IGRvZXNuJ3QgZmF1bHQgYXMg aXQgd2lsbCB0cmFuc2xhdGUgdGhlIGFkZHJlc3NlcwpiZWZvcmUgdGhlIE1TSSB0YWJsZSBkb2Vz LgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IEpvbmVzIDxham9uZXNAdmVudGFuYW1pY3JvLmNvbT4K LS0tCiBkcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LWlyLmMgfCAxODYgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMgICAgfCAgIDYg KysKIGRyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuaCAgICB8ICAgNCArCiAzIGZpbGVzIGNoYW5n ZWQsIDE5NiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9yaXNjdi9p b21tdS1pci5jIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS1pci5jCmluZGV4IDA4Y2YxNTli NTg3ZC4uYmVkMTA0YzUzMzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11 LWlyLmMKKysrIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS1pci5jCkBAIC00LDExICs0LDEw OCBAQAogICoKICAqIENvcHlyaWdodCDCqSAyMDI1IFZlbnRhbmEgTWljcm8gU3lzdGVtcyBJbmMu CiAgKi8KKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL3Jpc2N2LWltc2ljLmg+CiAjaW5jbHVkZSA8 bGludXgvaXJxZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CisjaW5jbHVkZSA8bGlu dXgvc2l6ZXMuaD4KIAorI2luY2x1ZGUgIi4uL2lvbW11LXBhZ2VzLmgiCiAjaW5jbHVkZSAiaW9t bXUuaCIKIAorc3RhdGljIHNpemVfdCByaXNjdl9pb21tdV9pcl9ncm91cF9zaXplKHN0cnVjdCBy aXNjdl9pb21tdV9kb21haW4gKmRvbWFpbikKK3sKKwlwaHlzX2FkZHJfdCBtYXNrID0gZG9tYWlu LT5tc2lfYWRkcl9tYXNrOworCisJaWYgKGRvbWFpbi0+Z3JvdXBfaW5kZXhfYml0cykgeworCQlw aHlzX2FkZHJfdCBncm91cF9tYXNrID0gQklUKGRvbWFpbi0+Z3JvdXBfaW5kZXhfYml0cykgLSAx OworCQlwaHlzX2FkZHJfdCBncm91cF9zaGlmdCA9IGRvbWFpbi0+Z3JvdXBfaW5kZXhfc2hpZnQg LSAxMjsKKworCQltYXNrICY9IH4oZ3JvdXBfbWFzayA8PCBncm91cF9zaGlmdCk7CisJfQorCisJ cmV0dXJuIChtYXNrICsgMSkgPDwgMTI7Cit9CisKK3N0YXRpYyBpbnQgcmlzY3ZfaW9tbXVfaXJf bWFwX3VubWFwX2ltc2ljcyhzdHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluICpkb21haW4sIGJvb2wg bWFwLAorCQkJCQkgICBnZnBfdCBnZnAsIHNpemVfdCAqdW5tYXBwZWQpCit7CisJcGh5c19hZGRy X3QgYmFzZSA9IGRvbWFpbi0+bXNpX2FkZHJfcGF0dGVybiA8PCAxMiwgYWRkcjsKKwlzaXplX3Qg c3RyaWRlID0gZG9tYWluLT5pbXNpY19zdHJpZGUsIG1hcF9zaXplID0gU1pfNEssIHNpemU7CisJ c2l6ZV90IGksIGo7CisKKwlzaXplID0gcmlzY3ZfaW9tbXVfaXJfZ3JvdXBfc2l6ZShkb21haW4p OworCisJaWYgKHN0cmlkZSA9PSBTWl80SykKKwkJc3RyaWRlID0gbWFwX3NpemUgPSBzaXplOwor CisJZm9yIChpID0gMDsgaSA8IEJJVChkb21haW4tPmdyb3VwX2luZGV4X2JpdHMpOyBpKyspIHsK KwkJZm9yIChqID0gMDsgaiA8IHNpemU7IGogKz0gc3RyaWRlKSB7CisJCQlhZGRyID0gKGJhc2Ug KyBqKSB8IChpIDw8IGRvbWFpbi0+Z3JvdXBfaW5kZXhfc2hpZnQpOworCQkJaWYgKG1hcCkgewor CQkJCWludCByZXQgPSBpb21tdV9tYXAoJmRvbWFpbi0+ZG9tYWluLCBhZGRyLCBhZGRyLCBtYXBf c2l6ZSwKKwkJCQkJCSAgICBJT01NVV9XUklURSB8IElPTU1VX05PRVhFQyB8IElPTU1VX01NSU8s IGdmcCk7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0gZWxzZSB7CisJCQkJ KnVubWFwcGVkICs9IGlvbW11X3VubWFwKCZkb21haW4tPmRvbWFpbiwgYWRkciwgbWFwX3NpemUp OworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3QgcmlzY3Zf aW9tbXVfaXJfdW5tYXBfaW1zaWNzKHN0cnVjdCByaXNjdl9pb21tdV9kb21haW4gKmRvbWFpbikK K3sKKwlzaXplX3QgdW5tYXBwZWQgPSAwOworCisJcmlzY3ZfaW9tbXVfaXJfbWFwX3VubWFwX2lt c2ljcyhkb21haW4sIGZhbHNlLCAwLCAmdW5tYXBwZWQpOworCisJcmV0dXJuIHVubWFwcGVkOwor fQorCitzdGF0aWMgaW50IHJpc2N2X2lvbW11X2lyX21hcF9pbXNpY3Moc3RydWN0IHJpc2N2X2lv bW11X2RvbWFpbiAqZG9tYWluLCBnZnBfdCBnZnApCit7CisJaW50IHJldDsKKworCXJldCA9IHJp c2N2X2lvbW11X2lyX21hcF91bm1hcF9pbXNpY3MoZG9tYWluLCB0cnVlLCBnZnAsIE5VTEwpOwor CWlmIChyZXQpCisJCXJpc2N2X2lvbW11X2lyX3VubWFwX2ltc2ljcyhkb21haW4pOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHNpemVfdCByaXNjdl9pb21tdV9pcl9jb21wdXRlX21zaXB0 ZV9pZHgoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCQkJcGh5c19hZGRy X3QgbXNpX3BhKQoreworCXBoeXNfYWRkcl90IG1hc2sgPSBkb21haW4tPm1zaV9hZGRyX21hc2s7 CisJcGh5c19hZGRyX3QgYWRkciA9IG1zaV9wYSA+PiAxMjsKKwlzaXplX3QgaWR4OworCisJaWYg KGRvbWFpbi0+Z3JvdXBfaW5kZXhfYml0cykgeworCQlwaHlzX2FkZHJfdCBncm91cF9tYXNrID0g QklUKGRvbWFpbi0+Z3JvdXBfaW5kZXhfYml0cykgLSAxOworCQlwaHlzX2FkZHJfdCBncm91cF9z aGlmdCA9IGRvbWFpbi0+Z3JvdXBfaW5kZXhfc2hpZnQgLSAxMjsKKwkJcGh5c19hZGRyX3QgZ3Jv dXAgPSAoYWRkciA+PiBncm91cF9zaGlmdCkgJiBncm91cF9tYXNrOworCisJCW1hc2sgJj0gfihn cm91cF9tYXNrIDw8IGdyb3VwX3NoaWZ0KTsKKwkJaWR4ID0gYWRkciAmIG1hc2s7CisJCWlkeCB8 PSBncm91cCA8PCBmbHM2NChtYXNrKTsKKwl9IGVsc2UgeworCQlpZHggPSBhZGRyICYgbWFzazsK Kwl9CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgc2l6ZV90IHJpc2N2X2lvbW11X2lyX25y X21zaXB0ZXMoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluKQoreworCXBoeXNfYWRk cl90IGJhc2UgPSBkb21haW4tPm1zaV9hZGRyX3BhdHRlcm4gPDwgMTI7CisJcGh5c19hZGRyX3Qg bWF4X2FkZHIgPSBiYXNlIHwgKGRvbWFpbi0+bXNpX2FkZHJfbWFzayA8PCAxMik7CisJc2l6ZV90 IG1heF9pZHggPSByaXNjdl9pb21tdV9pcl9jb21wdXRlX21zaXB0ZV9pZHgoZG9tYWluLCBtYXhf YWRkcik7CisKKwlyZXR1cm4gbWF4X2lkeCArIDE7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXJxX2No aXAgcmlzY3ZfaW9tbXVfaXJfaXJxX2NoaXAgPSB7CiAJLm5hbWUJCQk9ICJJT01NVS1JUiIsCiAJ LmlycV9hY2sJCT0gaXJxX2NoaXBfYWNrX3BhcmVudCwKQEAgLTkwLDI1ICsxODcsMTE0IEBAIHN0 cnVjdCBpcnFfZG9tYWluICpyaXNjdl9pb21tdV9pcl9pcnFfZG9tYWluX2NyZWF0ZShzdHJ1Y3Qg cmlzY3ZfaW9tbXVfZGV2aWNlICppCiAJcmV0dXJuIGlycWRvbWFpbjsKIH0KIAorc3RhdGljIHZv aWQgcmlzY3ZfaW9tbXVfaXJfZnJlZV9tc2lfdGFibGUoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFp biAqZG9tYWluKQoreworCWlvbW11X2ZyZWVfcGFnZXMoZG9tYWluLT5tc2lfcm9vdCk7Cit9CisK IHZvaWQgcmlzY3ZfaW9tbXVfaXJfaXJxX2RvbWFpbl9yZW1vdmUoc3RydWN0IHJpc2N2X2lvbW11 X2luZm8gKmluZm8pCiB7CisJc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluID0gaW5m by0+ZG9tYWluOwogCXN0cnVjdCBmd25vZGVfaGFuZGxlICpmbjsKIAogCWlmICghaW5mby0+aXJx ZG9tYWluKQogCQlyZXR1cm47CiAKKwlyaXNjdl9pb21tdV9pcl9mcmVlX21zaV90YWJsZShkb21h aW4pOworCiAJZm4gPSBpbmZvLT5pcnFkb21haW4tPmZ3bm9kZTsKIAlpcnFfZG9tYWluX3JlbW92 ZShpbmZvLT5pcnFkb21haW4pOwogCWluZm8tPmlycWRvbWFpbiA9IE5VTEw7CiAJaXJxX2RvbWFp bl9mcmVlX2Z3bm9kZShmbik7CiB9CiAKK3N0YXRpYyBpbnQgcmlzY3ZfaXJfc2V0X2ltc2ljX2ds b2JhbF9jb25maWcoc3RydWN0IHJpc2N2X2lvbW11X2RldmljZSAqaW9tbXUsCisJCQkJCSAgICBz dHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluICpkb21haW4pCit7CisJY29uc3Qgc3RydWN0IGltc2lj X2dsb2JhbF9jb25maWcgKmltc2ljX2dsb2JhbDsKKwl1NjQgbWFzayA9IDA7CisKKwlpbXNpY19n bG9iYWwgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpOworCisJbWFzayB8PSAoQklUKGltc2lj X2dsb2JhbC0+Z3JvdXBfaW5kZXhfYml0cykgLSAxKSA8PCAoaW1zaWNfZ2xvYmFsLT5ncm91cF9p bmRleF9zaGlmdCAtIDEyKTsKKwltYXNrIHw9IEJJVChpbXNpY19nbG9iYWwtPmhhcnRfaW5kZXhf Yml0cyArIGltc2ljX2dsb2JhbC0+Z3Vlc3RfaW5kZXhfYml0cykgLSAxOworCWRvbWFpbi0+bXNp X2FkZHJfbWFzayA9IG1hc2s7CisJZG9tYWluLT5tc2lfYWRkcl9wYXR0ZXJuID0gaW1zaWNfZ2xv YmFsLT5iYXNlX2FkZHIgPj4gMTI7CisJZG9tYWluLT5ncm91cF9pbmRleF9iaXRzID0gaW1zaWNf Z2xvYmFsLT5ncm91cF9pbmRleF9iaXRzOworCWRvbWFpbi0+Z3JvdXBfaW5kZXhfc2hpZnQgPSBp bXNpY19nbG9iYWwtPmdyb3VwX2luZGV4X3NoaWZ0OworCWRvbWFpbi0+aW1zaWNfc3RyaWRlID0g QklUKGltc2ljX2dsb2JhbC0+Z3Vlc3RfaW5kZXhfYml0cyArIDEyKTsKKworCWlmIChpb21tdS0+ Y2FwcyAmIFJJU0NWX0lPTU1VX0NBUEFCSUxJVElFU19NU0lfRkxBVCkgeworCQlzaXplX3QgbnJf cHRlcyA9IHJpc2N2X2lvbW11X2lyX25yX21zaXB0ZXMoZG9tYWluKTsKKworCQlkb21haW4tPm1z aV9yb290ID0gaW9tbXVfYWxsb2NfcGFnZXNfbm9kZV9zeihkb21haW4tPm51bWFfbm9kZSwgR0ZQ X0tFUk5FTF9BQ0NPVU5ULAorCQkJCQkJCSAgICAgbnJfcHRlcyAqIHNpemVvZigqZG9tYWluLT5t c2lfcm9vdCkpOworCQlpZiAoIWRvbWFpbi0+bXNpX3Jvb3QpCisJCQlyZXR1cm4gLUVOT01FTTsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHJpc2N2X2lvbW11X2lyX2F0dGFjaF9wYWdpbmdf ZG9tYWluKHN0cnVjdCByaXNjdl9pb21tdV9kb21haW4gKmRvbWFpbiwKIAkJCQkJc3RydWN0IGRl dmljZSAqZGV2KQogeworCXN0cnVjdCByaXNjdl9pb21tdV9kZXZpY2UgKmlvbW11ID0gZGV2X3Rv X2lvbW11KGRldik7CisJc3RydWN0IHJpc2N2X2lvbW11X2luZm8gKmluZm8gPSBkZXZfaW9tbXVf cHJpdl9nZXQoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKCFpbmZvLT5pcnFkb21haW4pCisJCXJl dHVybiAwOworCisJLyoKKwkgKiBEbyB0aGUgZG9tYWluJ3Mgb25lLXRpbWUgc2V0dXAgb2YgdGhl IG1zaSBjb25maWd1cmF0aW9uIHRoZQorCSAqIGZpcnN0IHRpbWUgdGhlIGRvbWFpbiBpcyBhdHRh Y2hlZCBhbmQgdGhlIG1zaXMgYXJlIGVuYWJsZWQuCisJICovCisJaWYgKGRvbWFpbi0+bXNpX2Fk ZHJfbWFzayA9PSAwKSB7CisJCXJldCA9IHJpc2N2X2lyX3NldF9pbXNpY19nbG9iYWxfY29uZmln KGlvbW11LCBkb21haW4pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKgorCQkg KiBUaGUgUklTQy1WIElPTU1VIE1TSSB0YWJsZSBpcyBjaGVja2VkIGFmdGVyIHRoZSBzdGFnZTEg RE1BCisJCSAqIHBhZ2UgdGFibGVzLiBJZiB3ZSBkb24ndCBjcmVhdGUgaWRlbnRpdHkgbWFwcGlu Z3MgaW4gdGhlCisJCSAqIHN0YWdlMSB0YWJsZSB0aGVuIHdlJ2xsIGZhdWx0IGFuZCB3b24ndCBl dmVuIGdldCBhIGNoYW5jZQorCQkgKiB0byBjaGVjayB0aGUgTVNJIHRhYmxlLgorCQkgKi8KKwkJ aWYgKGRvbWFpbi0+cGdkX21vZGUpIHsKKwkJCXJldCA9IHJpc2N2X2lvbW11X2lyX21hcF9pbXNp Y3MoZG9tYWluLCBHRlBfS0VSTkVMX0FDQ09VTlQpOworCQkJaWYgKHJldCkgeworCQkJCXJpc2N2 X2lvbW11X2lyX2ZyZWVfbXNpX3RhYmxlKGRvbWFpbik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0K KwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCiB2b2lkIHJpc2N2X2lvbW11X2lyX2ZyZWVfcGFn aW5nX2RvbWFpbihzdHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluICpkb21haW4pCiB7CisJcmlzY3Zf aW9tbXVfaXJfZnJlZV9tc2lfdGFibGUoZG9tYWluKTsKK30KKwordm9pZCByaXNjdl9pb21tdV9p cl9nZXRfcmVzdl9yZWdpb25zKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAq aGVhZCkKK3sKKwljb25zdCBzdHJ1Y3QgaW1zaWNfZ2xvYmFsX2NvbmZpZyAqaW1zaWNfZ2xvYmFs OworCXN0cnVjdCBpb21tdV9yZXN2X3JlZ2lvbiAqcmVnOworCXBoeXNfYWRkcl90IGFkZHI7CisJ c2l6ZV90IHNpemUsIGk7CisKKwlpbXNpY19nbG9iYWwgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZp ZygpOworCWlmICghaW1zaWNfZ2xvYmFsIHx8ICFpbXNpY19nbG9iYWwtPm5yX2lkcykKKwkJcmV0 dXJuOworCisJc2l6ZSA9IEJJVChpbXNpY19nbG9iYWwtPmhhcnRfaW5kZXhfYml0cyArIGltc2lj X2dsb2JhbC0+Z3Vlc3RfaW5kZXhfYml0cyArIDEyKTsKKworCWZvciAoaSA9IDA7IGkgPCBCSVQo aW1zaWNfZ2xvYmFsLT5ncm91cF9pbmRleF9iaXRzKTsgaSsrKSB7CisJCWFkZHIgPSBpbXNpY19n bG9iYWwtPmJhc2VfYWRkciB8IChpIDw8IGltc2ljX2dsb2JhbC0+Z3JvdXBfaW5kZXhfc2hpZnQp OworCQlyZWcgPSBpb21tdV9hbGxvY19yZXN2X3JlZ2lvbihhZGRyLCBzaXplLCAwLCBJT01NVV9S RVNWX01TSSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZWcpCisJCQlsaXN0X2FkZF90YWlsKCZyZWct Pmxpc3QsIGhlYWQpOworCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9t bXUuYyBiL2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuYwppbmRleCBkYjJhY2Q5ZGM2NGIuLjBi YTY1MDRkNGYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS5jCisrKyBi L2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuYwpAQCAtMTQyMyw2ICsxNDIzLDExIEBAIHN0YXRp YyBzdHJ1Y3QgaW9tbXVfZG9tYWluICpyaXNjdl9pb21tdV9hbGxvY19wYWdpbmdfZG9tYWluKHN0 cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4gJmRvbWFpbi0+ZG9tYWluOwogfQogCitzdGF0aWMg dm9pZCByaXNjdl9pb21tdV9nZXRfcmVzdl9yZWdpb25zKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyaXNjdl9pb21tdV9pcl9nZXRfcmVzdl9yZWdpb25z KGRldiwgaGVhZCk7Cit9CisKIHN0YXRpYyBpbnQgcmlzY3ZfaW9tbXVfYXR0YWNoX2Jsb2NraW5n X2RvbWFpbihzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdV9kb21haW4sCiAJCQkJCSAgICAgIHN0 cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTE1NjEsNiArMTU2Niw3IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgaW9tbXVfb3BzIHJpc2N2X2lvbW11X29wcyA9IHsKIAkuYmxvY2tlZF9kb21haW4gPSAm cmlzY3ZfaW9tbXVfYmxvY2tpbmdfZG9tYWluLAogCS5yZWxlYXNlX2RvbWFpbiA9ICZyaXNjdl9p b21tdV9ibG9ja2luZ19kb21haW4sCiAJLmRvbWFpbl9hbGxvY19wYWdpbmcgPSByaXNjdl9pb21t dV9hbGxvY19wYWdpbmdfZG9tYWluLAorCS5nZXRfcmVzdl9yZWdpb25zID0gcmlzY3ZfaW9tbXVf Z2V0X3Jlc3ZfcmVnaW9ucywKIAkuZGV2aWNlX2dyb3VwID0gcmlzY3ZfaW9tbXVfZGV2aWNlX2dy b3VwLAogCS5wcm9iZV9kZXZpY2UgPSByaXNjdl9pb21tdV9wcm9iZV9kZXZpY2UsCiAJLnJlbGVh c2VfZGV2aWNlCT0gcmlzY3ZfaW9tbXVfcmVsZWFzZV9kZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmggYi9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmgKaW5k ZXggNjQwZDgyNWYxMWI5Li5kYzIwMjBiODFiYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUv cmlzY3YvaW9tbXUuaAorKysgYi9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmgKQEAgLTMwLDYg KzMwLDkgQEAgc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiB7CiAJc3RydWN0IHJpc2N2X2lvbW11 X21zaXB0ZSAqbXNpX3Jvb3Q7CiAJdTY0IG1zaV9hZGRyX21hc2s7CiAJdTY0IG1zaV9hZGRyX3Bh dHRlcm47CisJdTMyIGdyb3VwX2luZGV4X2JpdHM7CisJdTMyIGdyb3VwX2luZGV4X3NoaWZ0Owor CXNpemVfdCBpbXNpY19zdHJpZGU7CiB9OwogCiAvKiBQcml2YXRlIElPTU1VIGRhdGEgZm9yIG1h bmFnZWQgZGV2aWNlcywgZGV2X2lvbW11X3ByaXZfKiAqLwpAQCAtOTcsNiArMTAwLDcgQEAgdm9p ZCByaXNjdl9pb21tdV9pcl9pcnFfZG9tYWluX3JlbW92ZShzdHJ1Y3QgcmlzY3ZfaW9tbXVfaW5m byAqaW5mbyk7CiBpbnQgcmlzY3ZfaW9tbXVfaXJfYXR0YWNoX3BhZ2luZ19kb21haW4oc3RydWN0 IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluLAogCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpOwog dm9pZCByaXNjdl9pb21tdV9pcl9mcmVlX3BhZ2luZ19kb21haW4oc3RydWN0IHJpc2N2X2lvbW11 X2RvbWFpbiAqZG9tYWluKTsKK3ZvaWQgcmlzY3ZfaW9tbXVfaXJfZ2V0X3Jlc3ZfcmVnaW9ucyhz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogCiAjZGVmaW5lIHJp c2N2X2lvbW11X3JlYWRsKGlvbW11LCBhZGRyKSBcCiAJcmVhZGxfcmVsYXhlZCgoaW9tbXUpLT5y ZWcgKyAoYWRkcikpCi0tIAoyLjQ5LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LXJpc2N2Cg==