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 1B8A3CAC5AA for ; Sat, 20 Sep 2025 20:39:09 +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=2tEpOgN7dAuurmmpY3UELNqVdCK5Ys5Gq12JF/jeuD0=; b=4RNsLeihCVnFz0 l/gkyWi4oLwWDFioE7QicuYbhf/rMaqEvcs9n8nWe/UmAts6H6PixmLD3HfWoCcPMZNmktFwtU21F Bo8kpazsmBG/5+TfyI+i4PS4HNkAxcvP75dvaUhurmG1yP60V0Nv+2Cmgln9mz3Bp+yzb9SbODL3c //jP0qM+r8n47QBb0MO1cHFaeTLbiqNooE/UY8FvlmT7Pc9yygNDlviBUggrVTsYb8SSBugCYr06j ZG8xycEWvvrGbsk1mDELoYT4PQFLUJuI62WbobK1FHW5RvML8i307k4TzEanwU+J731n4yEDAlLIB 5PCUOpO6Rw+I7SVKq/KA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v04MO-00000005tW8-3UQr; Sat, 20 Sep 2025 20:39:08 +0000 Received: from mail-io1-xd32.google.com ([2607:f8b0:4864:20::d32]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v04MK-00000005tOG-0MeV for kvm-riscv@lists.infradead.org; Sat, 20 Sep 2025 20:39:05 +0000 Received: by mail-io1-xd32.google.com with SMTP id ca18e2360f4ac-88432e1af6dso261491839f.2 for ; Sat, 20 Sep 2025 13:39:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1758400743; x=1759005543; 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=Wzj9QqNO4qwvIxbUOIweVBf21UVEh3k0y3f5MBDvAI0=; b=DuX0nyOtNZupRIyHR3WD6+5hh3GUOYE0PbuF4KT0qVCPsX4zF7p4AL+NP94mojwR08 kMXQjK5UJv2awthr5RAg9EtDyrHYZARp8cUEutsSqmDqkYdwfOiZC/T8+ABUlM79syiq T8hYg26+UyQy5IZOE3grwLHcaQfaJGgQHj0KvRXiTEIBq+S1pFMMwy1WCEpaTw38T4Zi 4k53XKcC51C4faG4HfZBmgWqluqh9G5fbQ0zVtmRqL1xjiO/qVB80pitLbabZAG6vaDE 66GMs/N7kxFVHXAa3EgFtaWHPSvXo28yTWJB+O7W9ex6d9w6RNgmCOf7r1Y98bz5GuoH rJFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758400743; x=1759005543; 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=Wzj9QqNO4qwvIxbUOIweVBf21UVEh3k0y3f5MBDvAI0=; b=GKHIldURiYaUNrYsNcSEPy3YJNwO6Flf1ywkVTFF0w4RdtM1ElKIT1dIUePKT4O8tN cz9tnL/hcOl8nJzdJB0UFSp066ZAsIY7R6NMGwYcp49lj6ia1+/MyVVgwt1Dm5JshKAs 2zh7sYO1Cne5n7Hv2go5+Q1/Xxff0keJNj4cWcEhZFp5mizONMgekz9+um/dn7DiD6jc 6Gp+wDehDLZ9U1y6I65yIJXhJxpfFFcfxN/nn7ijSLxM75V/V25MHuYoXwrMAZITKwlU UdGWB1tM2EN05+C6hcsFKmydvQdENZFGwHBGhmrRjC3Q71l86CwvlKnk/Zumj5nxSLh2 Rj1Q== X-Forwarded-Encrypted: i=1; AJvYcCX3X8MNb+zHg/awbVC62IjixWnd+GHPr7B6OK/X0JxkluJKxVuOMcxwyAYR8PrBTfqEAA8qLWAyaN8=@lists.infradead.org X-Gm-Message-State: AOJu0YzEv2uQeR22QJVYQ3VvYfDfyZZsR1c1/l5s7DKQSTUBvCS5imMK bWlzC1ffPEaXzoDsX0ysovpaxuBZcQwslydQdmMtQXOngfbhuASyWTWPJmvPXn8vPxE= X-Gm-Gg: ASbGncvDBh/B9gUwYdtzlI74QDlnFkEbPv0B3gH0PUTdKIzVL5ZnprOd/Eqt7NfrSzl hpKYXAiMj7keuzuOBxVDDogILEJEhaY/wq76XTBr7yyhprKWfqS3feQZFQ/Rqw0iOg3P149jHFc 9bhEHRBepT1fTHErG8SXMthKzdPLfGNA0pF1Ar7PFcEMMZFLexpxK1Qsuu1j+i/6G21TekdwNR8 zli2GN5U+EWjp9Rf9rAOI0sT5i0S7JrT0zZiIL9zDVey+u0Wn3+GXe2AQNvGqGvxZJagS8e/aRZ +BGmvMZxdomSBlft64VmczIF4UlmCbS3NcQg03J5cTRrmdAbKKuLyFU70/NXryiPsgE2xUSbrVa eGf9lMfXEeVHbPgiyfLuEGO19 X-Google-Smtp-Source: AGHT+IHNDhx657BdKsPq6ruqzboJV0R9VJJRl/BNcMcjsa3ZcQbg8UGXD6JPOkCAu++d/zncMTKjvw== X-Received: by 2002:a05:6e02:1947:b0:424:80f2:299 with SMTP id e9e14a558f8ab-424819955bbmr133413695ab.27.1758400743103; Sat, 20 Sep 2025 13:39:03 -0700 (PDT) Received: from localhost ([140.82.166.162]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-5586a4393c5sm229258173.10.2025.09.20.13.39.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 13:39:02 -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 08/18] iommu/riscv: Use MSI table to enable IMSIC access Date: Sat, 20 Sep 2025 15:38:58 -0500 Message-ID: <20250920203851.2205115-28-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_133904_138946_F223938C X-CRM114-Status: GOOD ( 25.01 ) 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 V2hlbiBzZXR0aW5nIGlycSBhZmZpbml0eSBleHRyYWN0IHRoZSBJTVNJQyBhZGRyZXNzIHRoZSBk ZXZpY2UKbmVlZHMgdG8gYWNjZXNzIGFuZCBhZGQgaXQgdG8gdGhlIE1TSSB0YWJsZS4gSWYgdGhl IGRldmljZSBubwpsb25nZXIgbmVlZHMgYWNjZXNzIHRvIGFuIElNU0lDIHRoZW4gcmVtb3ZlIGl0 IGZyb20gdGhlIHRhYmxlCnRvIHByb2hpYml0IGFjY2Vzcy4gVGhpcyBhbGxvd3MgaXNvbGF0aW5n IGRldmljZSBNU0lzIHRvIGEgc2V0Cm9mIGhhcnRzIHNvIHdlIGNhbiBub3cgYWRkIHRoZSBJUlFf RE9NQUlOX0ZMQUdfSVNPTEFURURfTVNJIElSUQpkb21haW4gZmxhZy4KClNpZ25lZC1vZmYtYnk6 IEFuZHJldyBKb25lcyA8YWpvbmVzQHZlbnRhbmFtaWNyby5jb20+Ci0tLQogZHJpdmVycy9pb21t dS9yaXNjdi9pb21tdS1pci5jIHwgMTQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LQogZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS5oICAgIHwgICAyICsKIDIgZmlsZXMgY2hhbmdl ZCwgMTQzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pb21tdS9yaXNjdi9pb21tdS1pci5jIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS1pci5j CmluZGV4IDI5MGQ5MWE2YzZjZC4uYjk3NzY4Y2FjNGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lv bW11L3Jpc2N2L2lvbW11LWlyLmMKKysrIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS1pci5j CkBAIC00LDYgKzQsNyBAQAogICoKICAqIENvcHlyaWdodCDCqSAyMDI1IFZlbnRhbmEgTWljcm8g U3lzdGVtcyBJbmMuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGVhbnVwLmg+CiAjaW5jbHVkZSA8 bGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5o PgogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgpAQCAtMTA2LDYgKzEwNywyMCBAQCBzdGF0aWMgc2l6 ZV90IHJpc2N2X2lvbW11X2lyX25yX21zaXB0ZXMoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAq ZG9tYWluKQogCXJldHVybiBtYXhfaWR4ICsgMTsKIH0KIAorc3RhdGljIHZvaWQgcmlzY3ZfaW9t bXVfaXJfc2V0X3B0ZShzdHJ1Y3QgcmlzY3ZfaW9tbXVfbXNpcHRlICpwdGUsIHU2NCBhZGRyKQor eworCXB0ZS0+cHRlID0gRklFTERfUFJFUChSSVNDVl9JT01NVV9NU0lQVEVfTSwgMykgfAorCQkg ICByaXNjdl9pb21tdV9waHlzX3RvX3BwbihhZGRyKSB8CisJCSAgIEZJRUxEX1BSRVAoUklTQ1Zf SU9NTVVfTVNJUFRFX1YsIDEpOworCXB0ZS0+bXJpZl9pbmZvID0gMDsKK30KKworc3RhdGljIHZv aWQgcmlzY3ZfaW9tbXVfaXJfY2xlYXJfcHRlKHN0cnVjdCByaXNjdl9pb21tdV9tc2lwdGUgKnB0 ZSkKK3sKKwlwdGUtPnB0ZSA9IDA7CisJcHRlLT5tcmlmX2luZm8gPSAwOworfQorCiBzdGF0aWMg dm9pZCByaXNjdl9pb21tdV9pcl9tc2l0YmxfaW52YWwoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFp biAqZG9tYWluLAogCQkJCQlzdHJ1Y3QgcmlzY3ZfaW9tbXVfbXNpcHRlICpwdGUpCiB7CkBAIC0x NDksMTkgKzE2NCw5OSBAQCBzdGF0aWMgdm9pZCByaXNjdl9pb21tdV9pcl9tc2l0YmxfaW52YWwo c3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluLAogCXJjdV9yZWFkX3VubG9jaygpOwog fQogCitzdGF0aWMgdm9pZCByaXNjdl9pb21tdV9pcl9tc2l0YmxfbWFwKHN0cnVjdCByaXNjdl9p b21tdV9kb21haW4gKmRvbWFpbiwgc2l6ZV90IGlkeCwKKwkJCQkgICAgICBwaHlzX2FkZHJfdCBh ZGRyKQoreworCXN0cnVjdCByaXNjdl9pb21tdV9tc2lwdGUgKnB0ZTsKKworCWlmICghZG9tYWlu LT5tc2lfcm9vdCkKKwkJcmV0dXJuOworCisJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmRv bWFpbi0+bXNpX3B0ZV9jb3VudHNbaWR4XSkpIHsKKwkJc2NvcGVkX2d1YXJkKHJhd19zcGlubG9j a19pcnFzYXZlLCAmZG9tYWluLT5tc2lfbG9jaykgeworCQkJaWYgKHJlZmNvdW50X3JlYWQoJmRv bWFpbi0+bXNpX3B0ZV9jb3VudHNbaWR4XSkgPT0gMCkgeworCQkJCXB0ZSA9ICZkb21haW4tPm1z aV9yb290W2lkeF07CisJCQkJcmlzY3ZfaW9tbXVfaXJfc2V0X3B0ZShwdGUsIGFkZHIpOworCQkJ CXJpc2N2X2lvbW11X2lyX21zaXRibF9pbnZhbChkb21haW4sIHB0ZSk7CisJCQkJcmVmY291bnRf c2V0KCZkb21haW4tPm1zaV9wdGVfY291bnRzW2lkeF0sIDEpOworCQkJfSBlbHNlIHsKKwkJCQly ZWZjb3VudF9pbmMoJmRvbWFpbi0+bXNpX3B0ZV9jb3VudHNbaWR4XSk7CisJCQl9CisJCX0KKwl9 Cit9CisKK3N0YXRpYyB2b2lkIHJpc2N2X2lvbW11X2lyX21zaXRibF91bm1hcChzdHJ1Y3Qgcmlz Y3ZfaW9tbXVfZG9tYWluICpkb21haW4sIHNpemVfdCBpZHgpCit7CisJc3RydWN0IHJpc2N2X2lv bW11X21zaXB0ZSAqcHRlOworCisJaWYgKCFkb21haW4tPm1zaV9yb290KQorCQlyZXR1cm47CisK KwlzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsICZkb21haW4tPm1zaV9sb2NrKSB7 CisJCWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmRvbWFpbi0+bXNpX3B0ZV9jb3VudHNbaWR4 XSkpIHsKKwkJCXB0ZSA9ICZkb21haW4tPm1zaV9yb290W2lkeF07CisJCQlyaXNjdl9pb21tdV9p cl9jbGVhcl9wdGUocHRlKTsKKwkJCXJpc2N2X2lvbW11X2lyX21zaXRibF9pbnZhbChkb21haW4s IHB0ZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzaXplX3QgcmlzY3ZfaW9tbXVfaXJfZ2V0X21z aXB0ZV9pZHhfZnJvbV90YXJnZXQoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluLAor CQkJCQkJCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgcGh5c19hZGRyX3QgKmFkZHIpCit7CisJc3Ry dWN0IG1zaV9tc2cgbXNnOworCisJQlVHX09OKGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyhkYXRh LCAmbXNnKSk7CisKKwkqYWRkciA9ICgocGh5c19hZGRyX3QpbXNnLmFkZHJlc3NfaGkgPDwgMzIp IHwgbXNnLmFkZHJlc3NfbG87CisKKwlyZXR1cm4gcmlzY3ZfaW9tbXVfaXJfY29tcHV0ZV9tc2lw dGVfaWR4KGRvbWFpbiwgKmFkZHIpOworfQorCitzdGF0aWMgaW50IHJpc2N2X2lvbW11X2lyX2ly cV9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLAorCQkJCQkgICBjb25zdCBzdHJ1 Y3QgY3B1bWFzayAqZGVzdCwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgcmlzY3ZfaW9tbXVfaW5m byAqaW5mbyA9IGRhdGEtPmRvbWFpbi0+aG9zdF9kYXRhOworCXN0cnVjdCByaXNjdl9pb21tdV9k b21haW4gKmRvbWFpbiA9IGluZm8tPmRvbWFpbjsKKwlwaHlzX2FkZHJfdCBvbGRfYWRkciwgbmV3 X2FkZHI7CisJc2l6ZV90IG9sZF9pZHgsIG5ld19pZHg7CisJaW50IHJldDsKKworCW9sZF9pZHgg PSByaXNjdl9pb21tdV9pcl9nZXRfbXNpcHRlX2lkeF9mcm9tX3RhcmdldChkb21haW4sIGRhdGEs ICZvbGRfYWRkcik7CisKKwlyZXQgPSBpcnFfY2hpcF9zZXRfYWZmaW5pdHlfcGFyZW50KGRhdGEs IGRlc3QsIGZvcmNlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW5ld19pZHgg PSByaXNjdl9pb21tdV9pcl9nZXRfbXNpcHRlX2lkeF9mcm9tX3RhcmdldChkb21haW4sIGRhdGEs ICZuZXdfYWRkcik7CisKKwlpZiAobmV3X2lkeCA9PSBvbGRfaWR4KQorCQlyZXR1cm4gcmV0Owor CisJcmlzY3ZfaW9tbXVfaXJfbXNpdGJsX3VubWFwKGRvbWFpbiwgb2xkX2lkeCk7CisJcmlzY3Zf aW9tbXVfaXJfbXNpdGJsX21hcChkb21haW4sIG5ld19pZHgsIG5ld19hZGRyKTsKKworCXJldHVy biByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcmlzY3ZfaW9tbXVfaXJfaXJxX2No aXAgPSB7CiAJLm5hbWUJCQk9ICJJT01NVS1JUiIsCiAJLmlycV9hY2sJCT0gaXJxX2NoaXBfYWNr X3BhcmVudCwKIAkuaXJxX21hc2sJCT0gaXJxX2NoaXBfbWFza19wYXJlbnQsCiAJLmlycV91bm1h c2sJCT0gaXJxX2NoaXBfdW5tYXNrX3BhcmVudCwKLQkuaXJxX3NldF9hZmZpbml0eQk9IGlycV9j aGlwX3NldF9hZmZpbml0eV9wYXJlbnQsCisJLmlycV9zZXRfYWZmaW5pdHkJPSByaXNjdl9pb21t dV9pcl9pcnFfc2V0X2FmZmluaXR5LAogfTsKIAogc3RhdGljIGludCByaXNjdl9pb21tdV9pcl9p cnFfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmlycWRvbWFpbiwKIAkJCQkJ CXVuc2lnbmVkIGludCBpcnFfYmFzZSwgdW5zaWduZWQgaW50IG5yX2lycXMsCiAJCQkJCQl2b2lk ICphcmcpCiB7CisJc3RydWN0IHJpc2N2X2lvbW11X2luZm8gKmluZm8gPSBpcnFkb21haW4tPmhv c3RfZGF0YTsKKwlzdHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluICpkb21haW4gPSBpbmZvLT5kb21h aW47CiAJc3RydWN0IGlycV9kYXRhICpkYXRhOworCXBoeXNfYWRkcl90IGFkZHI7CisJc2l6ZV90 IGlkeDsKIAlpbnQgaSwgcmV0OwogCiAJcmV0ID0gaXJxX2RvbWFpbl9hbGxvY19pcnFzX3BhcmVu dChpcnFkb21haW4sIGlycV9iYXNlLCBucl9pcnFzLCBhcmcpOwpAQCAtMTcxLDE0ICsyNjYsMzYg QEAgc3RhdGljIGludCByaXNjdl9pb21tdV9pcl9pcnFfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0 IGlycV9kb21haW4gKmlycWRvbWFpbiwKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7 CiAJCWRhdGEgPSBpcnFfZG9tYWluX2dldF9pcnFfZGF0YShpcnFkb21haW4sIGlycV9iYXNlICsg aSk7CiAJCWRhdGEtPmNoaXAgPSAmcmlzY3ZfaW9tbXVfaXJfaXJxX2NoaXA7CisJCWlkeCA9IHJp c2N2X2lvbW11X2lyX2dldF9tc2lwdGVfaWR4X2Zyb21fdGFyZ2V0KGRvbWFpbiwgZGF0YSwgJmFk ZHIpOworCQlyaXNjdl9pb21tdV9pcl9tc2l0YmxfbWFwKGRvbWFpbiwgaWR4LCBhZGRyKTsKIAl9 CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcmlzY3ZfaW9tbXVfaXJfaXJxX2RvbWFp bl9mcmVlX2lycXMoc3RydWN0IGlycV9kb21haW4gKmlycWRvbWFpbiwKKwkJCQkJCXVuc2lnbmVk IGludCBpcnFfYmFzZSwKKwkJCQkJCXVuc2lnbmVkIGludCBucl9pcnFzKQoreworCXN0cnVjdCBy aXNjdl9pb21tdV9pbmZvICppbmZvID0gaXJxZG9tYWluLT5ob3N0X2RhdGE7CisJc3RydWN0IHJp c2N2X2lvbW11X2RvbWFpbiAqZG9tYWluID0gaW5mby0+ZG9tYWluOworCXN0cnVjdCBpcnFfZGF0 YSAqZGF0YTsKKwlwaHlzX2FkZHJfdCBhZGRyOworCXNpemVfdCBpZHg7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJCWRhdGEgPSBpcnFfZG9tYWluX2dldF9p cnFfZGF0YShpcnFkb21haW4sIGlycV9iYXNlICsgaSk7CisJCWlkeCA9IHJpc2N2X2lvbW11X2ly X2dldF9tc2lwdGVfaWR4X2Zyb21fdGFyZ2V0KGRvbWFpbiwgZGF0YSwgJmFkZHIpOworCQlyaXNj dl9pb21tdV9pcl9tc2l0YmxfdW5tYXAoZG9tYWluLCBpZHgpOworCX0KKworCWlycV9kb21haW5f ZnJlZV9pcnFzX3BhcmVudChpcnFkb21haW4sIGlycV9iYXNlLCBucl9pcnFzKTsKK30KKwogc3Rh dGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyByaXNjdl9pb21tdV9pcl9pcnFfZG9tYWlu X29wcyA9IHsKIAkuYWxsb2MgPSByaXNjdl9pb21tdV9pcl9pcnFfZG9tYWluX2FsbG9jX2lycXMs Ci0JLmZyZWUgPSBpcnFfZG9tYWluX2ZyZWVfaXJxc19wYXJlbnQsCisJLmZyZWUgPSByaXNjdl9p b21tdV9pcl9pcnFfZG9tYWluX2ZyZWVfaXJxcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg bXNpX3BhcmVudF9vcHMgcmlzY3ZfaW9tbXVfaXJfbXNpX3BhcmVudF9vcHMgPSB7CkBAIC0yMjEs NiArMzM4LDE5IEBAIHN0cnVjdCBpcnFfZG9tYWluICpyaXNjdl9pb21tdV9pcl9pcnFfZG9tYWlu X2NyZWF0ZShzdHJ1Y3QgcmlzY3ZfaW9tbXVfZGV2aWNlICppCiAJCXJldHVybiBOVUxMOwogCX0K IAorCWlmIChpb21tdS0+Y2FwcyAmIFJJU0NWX0lPTU1VX0NBUEFCSUxJVElFU19NU0lfRkxBVCkg eworCQkvKgorCQkgKiBOT1RFOiBUaGUgUklTQy1WIElPTU1VIGRvZXNuJ3QgYWN0dWFsbHkgc3Vw cG9ydCBpc29sYXRlZCBNU0kgYmVjYXVzZQorCQkgKiB0aGVyZSBpcyBubyBNU0kgbWVzc2FnZSB2 YWxpZGF0aW9uIChzZWUgdGhlIGNvbW1lbnQgYWJvdmUKKwkJICogbXNpX2RldmljZV9oYXNfaXNv bGF0ZWRfbXNpKCkpLiBIb3dldmVyLCB3ZSBjbGFpbSBpc29sYXRlZCBNU0kgaGVyZQorCQkgKiBi ZWNhdXNlIGFwcGx5aW5nIHRoZSBJT01NVSBlbnN1cmVzIE1TSSBtZXNzYWdlcyBtYXkgb25seSBi ZSBkZWxpdmVyZWQKKwkJICogdG8gdGhlIG1hcHBlZCBNU0kgYWRkcmVzc2VzLiBUaGlzIGFsbG93 cyBNU0lzIHRvIGJlIGlzb2xhdGVkIHRvCisJCSAqIHBhcnRpY3VsYXIgaGFydHMvdmNwdXMgd2hl cmUgdGhlIHVudmFsaWRhdGVkIE1TSSBtZXNzYWdlcyBjYW4gYmUKKwkJICogdG9sZXJhdGVkLgor CQkgKi8KKwkJaXJxZG9tYWluLT5mbGFncyB8PSBJUlFfRE9NQUlOX0ZMQUdfSVNPTEFURURfTVNJ OworCX0KKwogCWlycWRvbWFpbi0+ZmxhZ3MgfD0gSVJRX0RPTUFJTl9GTEFHX01TSV9QQVJFTlQ7 CiAJaXJxZG9tYWluLT5tc2lfcGFyZW50X29wcyA9ICZyaXNjdl9pb21tdV9pcl9tc2lfcGFyZW50 X29wczsKIAlpcnFfZG9tYWluX3VwZGF0ZV9idXNfdG9rZW4oaXJxZG9tYWluLCBET01BSU5fQlVT X01TSV9SRU1BUCk7CkBAIC0yMzMsNiArMzYzLDcgQEAgc3RydWN0IGlycV9kb21haW4gKnJpc2N2 X2lvbW11X2lyX2lycV9kb21haW5fY3JlYXRlKHN0cnVjdCByaXNjdl9pb21tdV9kZXZpY2UgKmkK IHN0YXRpYyB2b2lkIHJpc2N2X2lvbW11X2lyX2ZyZWVfbXNpX3RhYmxlKHN0cnVjdCByaXNjdl9p b21tdV9kb21haW4gKmRvbWFpbikKIHsKIAlpb21tdV9mcmVlX3BhZ2VzKGRvbWFpbi0+bXNpX3Jv b3QpOworCWtmcmVlKGRvbWFpbi0+bXNpX3B0ZV9jb3VudHMpOwogfQogCiB2b2lkIHJpc2N2X2lv bW11X2lyX2lycV9kb21haW5fcmVtb3ZlKHN0cnVjdCByaXNjdl9pb21tdV9pbmZvICppbmZvKQpA QCAtMjc0LDYgKzQwNSwxNCBAQCBzdGF0aWMgaW50IHJpc2N2X2lyX3NldF9pbXNpY19nbG9iYWxf Y29uZmlnKHN0cnVjdCByaXNjdl9pb21tdV9kZXZpY2UgKmlvbW11LAogCQkJCQkJCSAgICAgbnJf cHRlcyAqIHNpemVvZigqZG9tYWluLT5tc2lfcm9vdCkpOwogCQlpZiAoIWRvbWFpbi0+bXNpX3Jv b3QpCiAJCQlyZXR1cm4gLUVOT01FTTsKKworCQlkb21haW4tPm1zaV9wdGVfY291bnRzID0ga2Nh bGxvYyhucl9wdGVzLCBzaXplb2YocmVmY291bnRfdCksIEdGUF9LRVJORUxfQUNDT1VOVCk7CisJ CWlmICghZG9tYWluLT5tc2lfcHRlX2NvdW50cykgeworCQkJaW9tbXVfZnJlZV9wYWdlcyhkb21h aW4tPm1zaV9yb290KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcmF3X3NwaW5fbG9j a19pbml0KCZkb21haW4tPm1zaV9sb2NrKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuaCBiL2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUu aAppbmRleCAxZmUzNWYxMjEwZmIuLmFlYjU2NDJmMDAzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9p b21tdS9yaXNjdi9pb21tdS5oCisrKyBiL2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuaApAQCAt MzQsNiArMzQsOCBAQCBzdHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluIHsKIAl1bnNpZ25lZCBpbnQg cGdkX21vZGU7CiAJdW5zaWduZWQgbG9uZyAqcGdkX3Jvb3Q7CiAJc3RydWN0IHJpc2N2X2lvbW11 X21zaXB0ZSAqbXNpX3Jvb3Q7CisJcmVmY291bnRfdCAqbXNpX3B0ZV9jb3VudHM7CisJcmF3X3Nw aW5sb2NrX3QgbXNpX2xvY2s7CiAJdTY0IG1zaV9hZGRyX21hc2s7CiAJdTY0IG1zaV9hZGRyX3Bh dHRlcm47CiAJdTMyIGdyb3VwX2luZGV4X2JpdHM7Ci0tIAoyLjQ5LjAKCgotLSAKa3ZtLXJpc2N2 IG1haWxpbmcgbGlzdAprdm0tcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2t2bS1yaXNjdgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-il1-f171.google.com (mail-il1-f171.google.com [209.85.166.171]) (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 0C91D2DCC03 for ; Sat, 20 Sep 2025 20:39:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758400746; cv=none; b=lZMAw0xdA/MxPDI6lls3hHk1csA7jhjhymEveQV5G5G9JHXQPu/V7OxYiJYk0alWpb4se/0yRekhIwMiELp+4GX4600tocM+6ppGc1CyRSAElMVbHcD/wjA4OO4TSD3dKJfJwS2ktEaYzYX9N5IYjf57O33AUVrcFc4j6O5UU3Y= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758400746; c=relaxed/simple; bh=Nrp9X20J93M2Z0cPHiM1SPqHoYdgjYD1Evoh9zUJUxw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=k1oF6XNLcioKsINnZmSaVZywriUYJ4tVHjOi3DMZ4I2witcqiUzT7kv6KlNGe6l36GP9LnoXQUOwg/vHWL2WyBFI7x88i4f6i8RmPRU0T86LwdcxZMQES/ngFI6PKjgF1s50WyMjxEbfZlDbVmPpHfN5MvWu/tjyodjVkDeMAaw= 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=N//ME1TM; arc=none smtp.client-ip=209.85.166.171 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="N//ME1TM" Received: by mail-il1-f171.google.com with SMTP id e9e14a558f8ab-4256f0fac67so5297175ab.2 for ; Sat, 20 Sep 2025 13:39:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1758400743; x=1759005543; 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=Wzj9QqNO4qwvIxbUOIweVBf21UVEh3k0y3f5MBDvAI0=; b=N//ME1TM6IIhya9ry8l/rxTthli5ctAv6Oxigp3M1Gx6UnKppTa665N6x45I+c16gc nK+3dxYk/C5zoIYQ0ggqedbK+itAuyXik4tmG0q/2MnTMj4QSNjDXqeU84wUA3AMSI+m Sq9w8sOK+3jOyWuwkzcjrn1LRidAG16CScNTK3EfAhDZvfSEhg8rtgGc1Rp1yQLTTamc AOCR2d4DgOFke8G9aF9meT7Siu6FyetvJTcE1EkvCyzapgWNrGvrETqDJlsKpJLSMboa aRc3v4wJW+CrMKvsLwsXR0pg06DpNJyR1cH/Xo//qUvElUIyr5Sq1l2j7Gvg4z6htZ/g lC9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758400743; x=1759005543; 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=Wzj9QqNO4qwvIxbUOIweVBf21UVEh3k0y3f5MBDvAI0=; b=luw+80Wza5wWmSwHJ3/M+NH11VRxAZ1OGnSG4ghVnhIKadDsFdZMxrcOI45gM4KgzY EcOPGPtR3WtG1THrIWbiKuMpFFtylrI+er1IvZzoNGLdNtXxklOphKy9KxIiLw32rizb wapMrwUY3pt/eLumwXNbMZi8IUQxNlD3glYIfD7Ugdk8KguSBvEmBf3OLhQraRWUj/zW pjyUS9AWdqsYWqPnoTBKeJJtNoMYacUFlO5L4/jDqjOTJDo53//YF84mYF8ZlkvdTjK0 /I7tt6u14euLEbdhs2OCArHR+EmU7nuQ70rfFc5MWdq31d4o2bjRWqoWKaMSPzadPgRd tSjQ== X-Forwarded-Encrypted: i=1; AJvYcCUc/EJvzzATioW/9dMyJ8rCfLfVT/huL0Ije9w+sxSapLOJJcWJCAMaC+ZyEvOLc6UEaFk=@vger.kernel.org X-Gm-Message-State: AOJu0YzdxnlHO4FZbjt6X08j5npyHqBaKO/pVC1l34Pbe44HuJ9aDWfz GA37M4ndx6Lmqo2+hWBOgyMbtHaXrp0GLB3oAGWEPOM+iAGTq3pGWzYJ2RyztPijAWw= X-Gm-Gg: ASbGncsYwcXxGfmXG/DZt6VLjpxB/8l/X7/O0UcNrFomsZ16nIWqbizrrF169LxTfvc gQ8lpRhQT0Yx408WtYhjJf9qoV6dzrrywiNLpz5yXqZUNm3VK0jjsby1vME3mFQIlZHV0OinRJ7 iW77iQacwIv3GsE2hXP88RdE4HrZvZnnjx738rJ6tDeFPqMpU2KrxekUrKtPeqqS5rgDiIlCW49 PjRSxJUq0HeqzbCh0i7FpGeh7GTMJMAkzxYKHIkgNgTyN64PCq1a+EPzUWKskzfi9cHLI2GzGcj 2vy69zL2ZD6zUF9QhOq5QXu9XOpqoFN9TvnCKyD/DdCLIeLA0X8CvK6jPcvGW5Izs1jAjHMPcbS BrF15kYB30lPZxBP6cH/RaSUT X-Google-Smtp-Source: AGHT+IHNDhx657BdKsPq6ruqzboJV0R9VJJRl/BNcMcjsa3ZcQbg8UGXD6JPOkCAu++d/zncMTKjvw== X-Received: by 2002:a05:6e02:1947:b0:424:80f2:299 with SMTP id e9e14a558f8ab-424819955bbmr133413695ab.27.1758400743103; Sat, 20 Sep 2025 13:39:03 -0700 (PDT) Received: from localhost ([140.82.166.162]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-5586a4393c5sm229258173.10.2025.09.20.13.39.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 13:39:02 -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 08/18] iommu/riscv: Use MSI table to enable IMSIC access Date: Sat, 20 Sep 2025 15:38:58 -0500 Message-ID: <20250920203851.2205115-28-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 When setting irq affinity extract the IMSIC address the device needs to access and add it to the MSI table. If the device no longer needs access to an IMSIC then remove it from the table to prohibit access. This allows isolating device MSIs to a set of harts so we can now add the IRQ_DOMAIN_FLAG_ISOLATED_MSI IRQ domain flag. Signed-off-by: Andrew Jones --- drivers/iommu/riscv/iommu-ir.c | 143 ++++++++++++++++++++++++++++++++- drivers/iommu/riscv/iommu.h | 2 + 2 files changed, 143 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/riscv/iommu-ir.c b/drivers/iommu/riscv/iommu-ir.c index 290d91a6c6cd..b97768cac4be 100644 --- a/drivers/iommu/riscv/iommu-ir.c +++ b/drivers/iommu/riscv/iommu-ir.c @@ -4,6 +4,7 @@ * * Copyright © 2025 Ventana Micro Systems Inc. */ +#include #include #include #include @@ -106,6 +107,20 @@ static size_t riscv_iommu_ir_nr_msiptes(struct riscv_iommu_domain *domain) return max_idx + 1; } +static void riscv_iommu_ir_set_pte(struct riscv_iommu_msipte *pte, u64 addr) +{ + pte->pte = FIELD_PREP(RISCV_IOMMU_MSIPTE_M, 3) | + riscv_iommu_phys_to_ppn(addr) | + FIELD_PREP(RISCV_IOMMU_MSIPTE_V, 1); + pte->mrif_info = 0; +} + +static void riscv_iommu_ir_clear_pte(struct riscv_iommu_msipte *pte) +{ + pte->pte = 0; + pte->mrif_info = 0; +} + static void riscv_iommu_ir_msitbl_inval(struct riscv_iommu_domain *domain, struct riscv_iommu_msipte *pte) { @@ -149,19 +164,99 @@ static void riscv_iommu_ir_msitbl_inval(struct riscv_iommu_domain *domain, rcu_read_unlock(); } +static void riscv_iommu_ir_msitbl_map(struct riscv_iommu_domain *domain, size_t idx, + phys_addr_t addr) +{ + struct riscv_iommu_msipte *pte; + + if (!domain->msi_root) + return; + + if (!refcount_inc_not_zero(&domain->msi_pte_counts[idx])) { + scoped_guard(raw_spinlock_irqsave, &domain->msi_lock) { + if (refcount_read(&domain->msi_pte_counts[idx]) == 0) { + pte = &domain->msi_root[idx]; + riscv_iommu_ir_set_pte(pte, addr); + riscv_iommu_ir_msitbl_inval(domain, pte); + refcount_set(&domain->msi_pte_counts[idx], 1); + } else { + refcount_inc(&domain->msi_pte_counts[idx]); + } + } + } +} + +static void riscv_iommu_ir_msitbl_unmap(struct riscv_iommu_domain *domain, size_t idx) +{ + struct riscv_iommu_msipte *pte; + + if (!domain->msi_root) + return; + + scoped_guard(raw_spinlock_irqsave, &domain->msi_lock) { + if (refcount_dec_and_test(&domain->msi_pte_counts[idx])) { + pte = &domain->msi_root[idx]; + riscv_iommu_ir_clear_pte(pte); + riscv_iommu_ir_msitbl_inval(domain, pte); + } + } +} + +static size_t riscv_iommu_ir_get_msipte_idx_from_target(struct riscv_iommu_domain *domain, + struct irq_data *data, phys_addr_t *addr) +{ + struct msi_msg msg; + + BUG_ON(irq_chip_compose_msi_msg(data, &msg)); + + *addr = ((phys_addr_t)msg.address_hi << 32) | msg.address_lo; + + return riscv_iommu_ir_compute_msipte_idx(domain, *addr); +} + +static int riscv_iommu_ir_irq_set_affinity(struct irq_data *data, + const struct cpumask *dest, bool force) +{ + struct riscv_iommu_info *info = data->domain->host_data; + struct riscv_iommu_domain *domain = info->domain; + phys_addr_t old_addr, new_addr; + size_t old_idx, new_idx; + int ret; + + old_idx = riscv_iommu_ir_get_msipte_idx_from_target(domain, data, &old_addr); + + ret = irq_chip_set_affinity_parent(data, dest, force); + if (ret < 0) + return ret; + + new_idx = riscv_iommu_ir_get_msipte_idx_from_target(domain, data, &new_addr); + + if (new_idx == old_idx) + return ret; + + riscv_iommu_ir_msitbl_unmap(domain, old_idx); + riscv_iommu_ir_msitbl_map(domain, new_idx, new_addr); + + return ret; +} + static struct irq_chip riscv_iommu_ir_irq_chip = { .name = "IOMMU-IR", .irq_ack = irq_chip_ack_parent, .irq_mask = irq_chip_mask_parent, .irq_unmask = irq_chip_unmask_parent, - .irq_set_affinity = irq_chip_set_affinity_parent, + .irq_set_affinity = riscv_iommu_ir_irq_set_affinity, }; static int riscv_iommu_ir_irq_domain_alloc_irqs(struct irq_domain *irqdomain, unsigned int irq_base, unsigned int nr_irqs, void *arg) { + struct riscv_iommu_info *info = irqdomain->host_data; + struct riscv_iommu_domain *domain = info->domain; struct irq_data *data; + phys_addr_t addr; + size_t idx; int i, ret; ret = irq_domain_alloc_irqs_parent(irqdomain, irq_base, nr_irqs, arg); @@ -171,14 +266,36 @@ static int riscv_iommu_ir_irq_domain_alloc_irqs(struct irq_domain *irqdomain, for (i = 0; i < nr_irqs; i++) { data = irq_domain_get_irq_data(irqdomain, irq_base + i); data->chip = &riscv_iommu_ir_irq_chip; + idx = riscv_iommu_ir_get_msipte_idx_from_target(domain, data, &addr); + riscv_iommu_ir_msitbl_map(domain, idx, addr); } return 0; } +static void riscv_iommu_ir_irq_domain_free_irqs(struct irq_domain *irqdomain, + unsigned int irq_base, + unsigned int nr_irqs) +{ + struct riscv_iommu_info *info = irqdomain->host_data; + struct riscv_iommu_domain *domain = info->domain; + struct irq_data *data; + phys_addr_t addr; + size_t idx; + int i; + + for (i = 0; i < nr_irqs; i++) { + data = irq_domain_get_irq_data(irqdomain, irq_base + i); + idx = riscv_iommu_ir_get_msipte_idx_from_target(domain, data, &addr); + riscv_iommu_ir_msitbl_unmap(domain, idx); + } + + irq_domain_free_irqs_parent(irqdomain, irq_base, nr_irqs); +} + static const struct irq_domain_ops riscv_iommu_ir_irq_domain_ops = { .alloc = riscv_iommu_ir_irq_domain_alloc_irqs, - .free = irq_domain_free_irqs_parent, + .free = riscv_iommu_ir_irq_domain_free_irqs, }; static const struct msi_parent_ops riscv_iommu_ir_msi_parent_ops = { @@ -221,6 +338,19 @@ struct irq_domain *riscv_iommu_ir_irq_domain_create(struct riscv_iommu_device *i return NULL; } + if (iommu->caps & RISCV_IOMMU_CAPABILITIES_MSI_FLAT) { + /* + * NOTE: The RISC-V IOMMU doesn't actually support isolated MSI because + * there is no MSI message validation (see the comment above + * msi_device_has_isolated_msi()). However, we claim isolated MSI here + * because applying the IOMMU ensures MSI messages may only be delivered + * to the mapped MSI addresses. This allows MSIs to be isolated to + * particular harts/vcpus where the unvalidated MSI messages can be + * tolerated. + */ + irqdomain->flags |= IRQ_DOMAIN_FLAG_ISOLATED_MSI; + } + irqdomain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT; irqdomain->msi_parent_ops = &riscv_iommu_ir_msi_parent_ops; irq_domain_update_bus_token(irqdomain, DOMAIN_BUS_MSI_REMAP); @@ -233,6 +363,7 @@ struct irq_domain *riscv_iommu_ir_irq_domain_create(struct riscv_iommu_device *i static void riscv_iommu_ir_free_msi_table(struct riscv_iommu_domain *domain) { iommu_free_pages(domain->msi_root); + kfree(domain->msi_pte_counts); } void riscv_iommu_ir_irq_domain_remove(struct riscv_iommu_info *info) @@ -274,6 +405,14 @@ static int riscv_ir_set_imsic_global_config(struct riscv_iommu_device *iommu, nr_ptes * sizeof(*domain->msi_root)); if (!domain->msi_root) return -ENOMEM; + + domain->msi_pte_counts = kcalloc(nr_ptes, sizeof(refcount_t), GFP_KERNEL_ACCOUNT); + if (!domain->msi_pte_counts) { + iommu_free_pages(domain->msi_root); + return -ENOMEM; + } + + raw_spin_lock_init(&domain->msi_lock); } return 0; diff --git a/drivers/iommu/riscv/iommu.h b/drivers/iommu/riscv/iommu.h index 1fe35f1210fb..aeb5642f003c 100644 --- a/drivers/iommu/riscv/iommu.h +++ b/drivers/iommu/riscv/iommu.h @@ -34,6 +34,8 @@ struct riscv_iommu_domain { unsigned int pgd_mode; unsigned long *pgd_root; struct riscv_iommu_msipte *msi_root; + refcount_t *msi_pte_counts; + raw_spinlock_t msi_lock; u64 msi_addr_mask; u64 msi_addr_pattern; u32 group_index_bits; -- 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 C08A0CAC5AC for ; Sat, 20 Sep 2025 20:39:17 +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=KXEVWNzYbqBdJlAa2//cnXW87pKCSVDOb85G9XUyIZw=; b=GUKKX9Rn2wSrk7 95uleM1Jjht8baEHGTyTatTmmYCxb5GHQrUoyVwHmqGUu2LXv02PybCPcMgCAhCc4m+fiC0580QKE Bcnccu5z0z+vbkPhxGS9BuyfcLAo/iyfL6WnXcQSTdgc+G98sg2VwrPR6Y1Z/t69+2AiP7yCiN4Ek +bQ44E4OkS+wHsi2+UtxWsP0CqS7AZtdSkrVDekbcu/CRtD0Xes3YBmo/P9l98Eb0nKpqkrjI4/WA wz1BxoeajzHpzL+aLo7JyTJW26dburZ04oFvkszStmEvThFFpBsx5JLJ79zUoXmWl+Ru795F5kF/x 5T2eLMUyOFnjC+e2SgUQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v04MO-00000005tVj-2DP1; Sat, 20 Sep 2025 20:39:08 +0000 Received: from mail-il1-x132.google.com ([2607:f8b0:4864:20::132]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v04MJ-00000005tOE-3Z6t for linux-riscv@lists.infradead.org; Sat, 20 Sep 2025 20:39:05 +0000 Received: by mail-il1-x132.google.com with SMTP id e9e14a558f8ab-42403719c73so34187085ab.0 for ; Sat, 20 Sep 2025 13:39:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1758400743; x=1759005543; 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=Wzj9QqNO4qwvIxbUOIweVBf21UVEh3k0y3f5MBDvAI0=; b=DuX0nyOtNZupRIyHR3WD6+5hh3GUOYE0PbuF4KT0qVCPsX4zF7p4AL+NP94mojwR08 kMXQjK5UJv2awthr5RAg9EtDyrHYZARp8cUEutsSqmDqkYdwfOiZC/T8+ABUlM79syiq T8hYg26+UyQy5IZOE3grwLHcaQfaJGgQHj0KvRXiTEIBq+S1pFMMwy1WCEpaTw38T4Zi 4k53XKcC51C4faG4HfZBmgWqluqh9G5fbQ0zVtmRqL1xjiO/qVB80pitLbabZAG6vaDE 66GMs/N7kxFVHXAa3EgFtaWHPSvXo28yTWJB+O7W9ex6d9w6RNgmCOf7r1Y98bz5GuoH rJFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758400743; x=1759005543; 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=Wzj9QqNO4qwvIxbUOIweVBf21UVEh3k0y3f5MBDvAI0=; b=btL4S1BNxvVmVtet2zQwWXLYCBWP038DI2x4qdESmjtnC1jGqcAIrgTmrrWOPDmmAN bzShsWJSZskh2ZhClf1jbROhaBYp1vkMmrkcCjzK2u/wE8sIzCH9JHqPjAY2AlSUUMWP J7vXXL1OH/TU6521+xxVbxXdUosApK62Q0GlSOhBMk5qJ6ggLUHFvQQi4l5vtDObsubS bNFMFoDAGozKnU5afAGTeOIcTG09W7kSHPEtZNAmWk6zbkNNwTyeDtEAnoFWCy98VUDZ NnFrWc/VM/SzqODRIxa/YhQpFCQpOGQCGGBEh3TLh5aJ5MmgJaU4fhtUtdwZRLlxFDs2 8t7Q== X-Forwarded-Encrypted: i=1; AJvYcCV270qxD2soaMHUEjxZBSUgXjrSmKFvlIHlTXVSke1wppOylwVDw3qOC4HuX4x7d45SS80cavi0sgvNwg==@lists.infradead.org X-Gm-Message-State: AOJu0Yy6HVowR5caDV/WS6KqiwwKUGVeEFLFSaqDLq52tBUFhZIJ5qME f/p94TPkR+yeKsvzhFTfuEfg2XnCaKzlI/8++wODs/+3zZD7xu/nIrR5WDeI310YzevATq6ring khKZ1xPc= X-Gm-Gg: ASbGncuDVrZlNwDM4Ms8GKIRgK/I6Q+gUlZE53p/juK3yrclG1I5u8wt/375hmessRq Num7MYJzx9PCUVNdALLN9JIKa+uMuKEyiQtuZYrSv5DE/QA1yjtD9feF1/mrQeED/4DZlN/4u5b oIfWyYcMX1263ni5IHfN4l9AlV/MSglKpHfusiYs2X5g2ioNTbQ8FoTP3+Kb8DhAVqnz1g4AagW /Kby/2AzkNbNl1oDI2Uzj3zy+0OzLR+2QFXGmvC5bfK7h1ftQ2mVGELk3px9FMHVdLdRVvtBSLN xxeONPN4IwHc9PzFpXo/ENBMSS52GPZyc2Lc+dJBTR0zDbcU8m+M6LPBqL5mB8COB8RV8AArAVe 4moAGnf8Jk4IH1bZ18Oavnyok X-Google-Smtp-Source: AGHT+IHNDhx657BdKsPq6ruqzboJV0R9VJJRl/BNcMcjsa3ZcQbg8UGXD6JPOkCAu++d/zncMTKjvw== X-Received: by 2002:a05:6e02:1947:b0:424:80f2:299 with SMTP id e9e14a558f8ab-424819955bbmr133413695ab.27.1758400743103; Sat, 20 Sep 2025 13:39:03 -0700 (PDT) Received: from localhost ([140.82.166.162]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-5586a4393c5sm229258173.10.2025.09.20.13.39.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 13:39:02 -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 08/18] iommu/riscv: Use MSI table to enable IMSIC access Date: Sat, 20 Sep 2025 15:38:58 -0500 Message-ID: <20250920203851.2205115-28-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_133903_905479_48232CAD X-CRM114-Status: GOOD ( 25.01 ) 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 V2hlbiBzZXR0aW5nIGlycSBhZmZpbml0eSBleHRyYWN0IHRoZSBJTVNJQyBhZGRyZXNzIHRoZSBk ZXZpY2UKbmVlZHMgdG8gYWNjZXNzIGFuZCBhZGQgaXQgdG8gdGhlIE1TSSB0YWJsZS4gSWYgdGhl IGRldmljZSBubwpsb25nZXIgbmVlZHMgYWNjZXNzIHRvIGFuIElNU0lDIHRoZW4gcmVtb3ZlIGl0 IGZyb20gdGhlIHRhYmxlCnRvIHByb2hpYml0IGFjY2Vzcy4gVGhpcyBhbGxvd3MgaXNvbGF0aW5n IGRldmljZSBNU0lzIHRvIGEgc2V0Cm9mIGhhcnRzIHNvIHdlIGNhbiBub3cgYWRkIHRoZSBJUlFf RE9NQUlOX0ZMQUdfSVNPTEFURURfTVNJIElSUQpkb21haW4gZmxhZy4KClNpZ25lZC1vZmYtYnk6 IEFuZHJldyBKb25lcyA8YWpvbmVzQHZlbnRhbmFtaWNyby5jb20+Ci0tLQogZHJpdmVycy9pb21t dS9yaXNjdi9pb21tdS1pci5jIHwgMTQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LQogZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS5oICAgIHwgICAyICsKIDIgZmlsZXMgY2hhbmdl ZCwgMTQzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pb21tdS9yaXNjdi9pb21tdS1pci5jIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS1pci5j CmluZGV4IDI5MGQ5MWE2YzZjZC4uYjk3NzY4Y2FjNGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lv bW11L3Jpc2N2L2lvbW11LWlyLmMKKysrIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS1pci5j CkBAIC00LDYgKzQsNyBAQAogICoKICAqIENvcHlyaWdodCDCqSAyMDI1IFZlbnRhbmEgTWljcm8g U3lzdGVtcyBJbmMuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGVhbnVwLmg+CiAjaW5jbHVkZSA8 bGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5o PgogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgpAQCAtMTA2LDYgKzEwNywyMCBAQCBzdGF0aWMgc2l6 ZV90IHJpc2N2X2lvbW11X2lyX25yX21zaXB0ZXMoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAq ZG9tYWluKQogCXJldHVybiBtYXhfaWR4ICsgMTsKIH0KIAorc3RhdGljIHZvaWQgcmlzY3ZfaW9t bXVfaXJfc2V0X3B0ZShzdHJ1Y3QgcmlzY3ZfaW9tbXVfbXNpcHRlICpwdGUsIHU2NCBhZGRyKQor eworCXB0ZS0+cHRlID0gRklFTERfUFJFUChSSVNDVl9JT01NVV9NU0lQVEVfTSwgMykgfAorCQkg ICByaXNjdl9pb21tdV9waHlzX3RvX3BwbihhZGRyKSB8CisJCSAgIEZJRUxEX1BSRVAoUklTQ1Zf SU9NTVVfTVNJUFRFX1YsIDEpOworCXB0ZS0+bXJpZl9pbmZvID0gMDsKK30KKworc3RhdGljIHZv aWQgcmlzY3ZfaW9tbXVfaXJfY2xlYXJfcHRlKHN0cnVjdCByaXNjdl9pb21tdV9tc2lwdGUgKnB0 ZSkKK3sKKwlwdGUtPnB0ZSA9IDA7CisJcHRlLT5tcmlmX2luZm8gPSAwOworfQorCiBzdGF0aWMg dm9pZCByaXNjdl9pb21tdV9pcl9tc2l0YmxfaW52YWwoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFp biAqZG9tYWluLAogCQkJCQlzdHJ1Y3QgcmlzY3ZfaW9tbXVfbXNpcHRlICpwdGUpCiB7CkBAIC0x NDksMTkgKzE2NCw5OSBAQCBzdGF0aWMgdm9pZCByaXNjdl9pb21tdV9pcl9tc2l0YmxfaW52YWwo c3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluLAogCXJjdV9yZWFkX3VubG9jaygpOwog fQogCitzdGF0aWMgdm9pZCByaXNjdl9pb21tdV9pcl9tc2l0YmxfbWFwKHN0cnVjdCByaXNjdl9p b21tdV9kb21haW4gKmRvbWFpbiwgc2l6ZV90IGlkeCwKKwkJCQkgICAgICBwaHlzX2FkZHJfdCBh ZGRyKQoreworCXN0cnVjdCByaXNjdl9pb21tdV9tc2lwdGUgKnB0ZTsKKworCWlmICghZG9tYWlu LT5tc2lfcm9vdCkKKwkJcmV0dXJuOworCisJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmRv bWFpbi0+bXNpX3B0ZV9jb3VudHNbaWR4XSkpIHsKKwkJc2NvcGVkX2d1YXJkKHJhd19zcGlubG9j a19pcnFzYXZlLCAmZG9tYWluLT5tc2lfbG9jaykgeworCQkJaWYgKHJlZmNvdW50X3JlYWQoJmRv bWFpbi0+bXNpX3B0ZV9jb3VudHNbaWR4XSkgPT0gMCkgeworCQkJCXB0ZSA9ICZkb21haW4tPm1z aV9yb290W2lkeF07CisJCQkJcmlzY3ZfaW9tbXVfaXJfc2V0X3B0ZShwdGUsIGFkZHIpOworCQkJ CXJpc2N2X2lvbW11X2lyX21zaXRibF9pbnZhbChkb21haW4sIHB0ZSk7CisJCQkJcmVmY291bnRf c2V0KCZkb21haW4tPm1zaV9wdGVfY291bnRzW2lkeF0sIDEpOworCQkJfSBlbHNlIHsKKwkJCQly ZWZjb3VudF9pbmMoJmRvbWFpbi0+bXNpX3B0ZV9jb3VudHNbaWR4XSk7CisJCQl9CisJCX0KKwl9 Cit9CisKK3N0YXRpYyB2b2lkIHJpc2N2X2lvbW11X2lyX21zaXRibF91bm1hcChzdHJ1Y3Qgcmlz Y3ZfaW9tbXVfZG9tYWluICpkb21haW4sIHNpemVfdCBpZHgpCit7CisJc3RydWN0IHJpc2N2X2lv bW11X21zaXB0ZSAqcHRlOworCisJaWYgKCFkb21haW4tPm1zaV9yb290KQorCQlyZXR1cm47CisK KwlzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsICZkb21haW4tPm1zaV9sb2NrKSB7 CisJCWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmRvbWFpbi0+bXNpX3B0ZV9jb3VudHNbaWR4 XSkpIHsKKwkJCXB0ZSA9ICZkb21haW4tPm1zaV9yb290W2lkeF07CisJCQlyaXNjdl9pb21tdV9p cl9jbGVhcl9wdGUocHRlKTsKKwkJCXJpc2N2X2lvbW11X2lyX21zaXRibF9pbnZhbChkb21haW4s IHB0ZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzaXplX3QgcmlzY3ZfaW9tbXVfaXJfZ2V0X21z aXB0ZV9pZHhfZnJvbV90YXJnZXQoc3RydWN0IHJpc2N2X2lvbW11X2RvbWFpbiAqZG9tYWluLAor CQkJCQkJCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgcGh5c19hZGRyX3QgKmFkZHIpCit7CisJc3Ry dWN0IG1zaV9tc2cgbXNnOworCisJQlVHX09OKGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyhkYXRh LCAmbXNnKSk7CisKKwkqYWRkciA9ICgocGh5c19hZGRyX3QpbXNnLmFkZHJlc3NfaGkgPDwgMzIp IHwgbXNnLmFkZHJlc3NfbG87CisKKwlyZXR1cm4gcmlzY3ZfaW9tbXVfaXJfY29tcHV0ZV9tc2lw dGVfaWR4KGRvbWFpbiwgKmFkZHIpOworfQorCitzdGF0aWMgaW50IHJpc2N2X2lvbW11X2lyX2ly cV9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLAorCQkJCQkgICBjb25zdCBzdHJ1 Y3QgY3B1bWFzayAqZGVzdCwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgcmlzY3ZfaW9tbXVfaW5m byAqaW5mbyA9IGRhdGEtPmRvbWFpbi0+aG9zdF9kYXRhOworCXN0cnVjdCByaXNjdl9pb21tdV9k b21haW4gKmRvbWFpbiA9IGluZm8tPmRvbWFpbjsKKwlwaHlzX2FkZHJfdCBvbGRfYWRkciwgbmV3 X2FkZHI7CisJc2l6ZV90IG9sZF9pZHgsIG5ld19pZHg7CisJaW50IHJldDsKKworCW9sZF9pZHgg PSByaXNjdl9pb21tdV9pcl9nZXRfbXNpcHRlX2lkeF9mcm9tX3RhcmdldChkb21haW4sIGRhdGEs ICZvbGRfYWRkcik7CisKKwlyZXQgPSBpcnFfY2hpcF9zZXRfYWZmaW5pdHlfcGFyZW50KGRhdGEs IGRlc3QsIGZvcmNlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW5ld19pZHgg PSByaXNjdl9pb21tdV9pcl9nZXRfbXNpcHRlX2lkeF9mcm9tX3RhcmdldChkb21haW4sIGRhdGEs ICZuZXdfYWRkcik7CisKKwlpZiAobmV3X2lkeCA9PSBvbGRfaWR4KQorCQlyZXR1cm4gcmV0Owor CisJcmlzY3ZfaW9tbXVfaXJfbXNpdGJsX3VubWFwKGRvbWFpbiwgb2xkX2lkeCk7CisJcmlzY3Zf aW9tbXVfaXJfbXNpdGJsX21hcChkb21haW4sIG5ld19pZHgsIG5ld19hZGRyKTsKKworCXJldHVy biByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcmlzY3ZfaW9tbXVfaXJfaXJxX2No aXAgPSB7CiAJLm5hbWUJCQk9ICJJT01NVS1JUiIsCiAJLmlycV9hY2sJCT0gaXJxX2NoaXBfYWNr X3BhcmVudCwKIAkuaXJxX21hc2sJCT0gaXJxX2NoaXBfbWFza19wYXJlbnQsCiAJLmlycV91bm1h c2sJCT0gaXJxX2NoaXBfdW5tYXNrX3BhcmVudCwKLQkuaXJxX3NldF9hZmZpbml0eQk9IGlycV9j aGlwX3NldF9hZmZpbml0eV9wYXJlbnQsCisJLmlycV9zZXRfYWZmaW5pdHkJPSByaXNjdl9pb21t dV9pcl9pcnFfc2V0X2FmZmluaXR5LAogfTsKIAogc3RhdGljIGludCByaXNjdl9pb21tdV9pcl9p cnFfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmlycWRvbWFpbiwKIAkJCQkJ CXVuc2lnbmVkIGludCBpcnFfYmFzZSwgdW5zaWduZWQgaW50IG5yX2lycXMsCiAJCQkJCQl2b2lk ICphcmcpCiB7CisJc3RydWN0IHJpc2N2X2lvbW11X2luZm8gKmluZm8gPSBpcnFkb21haW4tPmhv c3RfZGF0YTsKKwlzdHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluICpkb21haW4gPSBpbmZvLT5kb21h aW47CiAJc3RydWN0IGlycV9kYXRhICpkYXRhOworCXBoeXNfYWRkcl90IGFkZHI7CisJc2l6ZV90 IGlkeDsKIAlpbnQgaSwgcmV0OwogCiAJcmV0ID0gaXJxX2RvbWFpbl9hbGxvY19pcnFzX3BhcmVu dChpcnFkb21haW4sIGlycV9iYXNlLCBucl9pcnFzLCBhcmcpOwpAQCAtMTcxLDE0ICsyNjYsMzYg QEAgc3RhdGljIGludCByaXNjdl9pb21tdV9pcl9pcnFfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0 IGlycV9kb21haW4gKmlycWRvbWFpbiwKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7 CiAJCWRhdGEgPSBpcnFfZG9tYWluX2dldF9pcnFfZGF0YShpcnFkb21haW4sIGlycV9iYXNlICsg aSk7CiAJCWRhdGEtPmNoaXAgPSAmcmlzY3ZfaW9tbXVfaXJfaXJxX2NoaXA7CisJCWlkeCA9IHJp c2N2X2lvbW11X2lyX2dldF9tc2lwdGVfaWR4X2Zyb21fdGFyZ2V0KGRvbWFpbiwgZGF0YSwgJmFk ZHIpOworCQlyaXNjdl9pb21tdV9pcl9tc2l0YmxfbWFwKGRvbWFpbiwgaWR4LCBhZGRyKTsKIAl9 CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcmlzY3ZfaW9tbXVfaXJfaXJxX2RvbWFp bl9mcmVlX2lycXMoc3RydWN0IGlycV9kb21haW4gKmlycWRvbWFpbiwKKwkJCQkJCXVuc2lnbmVk IGludCBpcnFfYmFzZSwKKwkJCQkJCXVuc2lnbmVkIGludCBucl9pcnFzKQoreworCXN0cnVjdCBy aXNjdl9pb21tdV9pbmZvICppbmZvID0gaXJxZG9tYWluLT5ob3N0X2RhdGE7CisJc3RydWN0IHJp c2N2X2lvbW11X2RvbWFpbiAqZG9tYWluID0gaW5mby0+ZG9tYWluOworCXN0cnVjdCBpcnFfZGF0 YSAqZGF0YTsKKwlwaHlzX2FkZHJfdCBhZGRyOworCXNpemVfdCBpZHg7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJCWRhdGEgPSBpcnFfZG9tYWluX2dldF9p cnFfZGF0YShpcnFkb21haW4sIGlycV9iYXNlICsgaSk7CisJCWlkeCA9IHJpc2N2X2lvbW11X2ly X2dldF9tc2lwdGVfaWR4X2Zyb21fdGFyZ2V0KGRvbWFpbiwgZGF0YSwgJmFkZHIpOworCQlyaXNj dl9pb21tdV9pcl9tc2l0YmxfdW5tYXAoZG9tYWluLCBpZHgpOworCX0KKworCWlycV9kb21haW5f ZnJlZV9pcnFzX3BhcmVudChpcnFkb21haW4sIGlycV9iYXNlLCBucl9pcnFzKTsKK30KKwogc3Rh dGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyByaXNjdl9pb21tdV9pcl9pcnFfZG9tYWlu X29wcyA9IHsKIAkuYWxsb2MgPSByaXNjdl9pb21tdV9pcl9pcnFfZG9tYWluX2FsbG9jX2lycXMs Ci0JLmZyZWUgPSBpcnFfZG9tYWluX2ZyZWVfaXJxc19wYXJlbnQsCisJLmZyZWUgPSByaXNjdl9p b21tdV9pcl9pcnFfZG9tYWluX2ZyZWVfaXJxcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg bXNpX3BhcmVudF9vcHMgcmlzY3ZfaW9tbXVfaXJfbXNpX3BhcmVudF9vcHMgPSB7CkBAIC0yMjEs NiArMzM4LDE5IEBAIHN0cnVjdCBpcnFfZG9tYWluICpyaXNjdl9pb21tdV9pcl9pcnFfZG9tYWlu X2NyZWF0ZShzdHJ1Y3QgcmlzY3ZfaW9tbXVfZGV2aWNlICppCiAJCXJldHVybiBOVUxMOwogCX0K IAorCWlmIChpb21tdS0+Y2FwcyAmIFJJU0NWX0lPTU1VX0NBUEFCSUxJVElFU19NU0lfRkxBVCkg eworCQkvKgorCQkgKiBOT1RFOiBUaGUgUklTQy1WIElPTU1VIGRvZXNuJ3QgYWN0dWFsbHkgc3Vw cG9ydCBpc29sYXRlZCBNU0kgYmVjYXVzZQorCQkgKiB0aGVyZSBpcyBubyBNU0kgbWVzc2FnZSB2 YWxpZGF0aW9uIChzZWUgdGhlIGNvbW1lbnQgYWJvdmUKKwkJICogbXNpX2RldmljZV9oYXNfaXNv bGF0ZWRfbXNpKCkpLiBIb3dldmVyLCB3ZSBjbGFpbSBpc29sYXRlZCBNU0kgaGVyZQorCQkgKiBi ZWNhdXNlIGFwcGx5aW5nIHRoZSBJT01NVSBlbnN1cmVzIE1TSSBtZXNzYWdlcyBtYXkgb25seSBi ZSBkZWxpdmVyZWQKKwkJICogdG8gdGhlIG1hcHBlZCBNU0kgYWRkcmVzc2VzLiBUaGlzIGFsbG93 cyBNU0lzIHRvIGJlIGlzb2xhdGVkIHRvCisJCSAqIHBhcnRpY3VsYXIgaGFydHMvdmNwdXMgd2hl cmUgdGhlIHVudmFsaWRhdGVkIE1TSSBtZXNzYWdlcyBjYW4gYmUKKwkJICogdG9sZXJhdGVkLgor CQkgKi8KKwkJaXJxZG9tYWluLT5mbGFncyB8PSBJUlFfRE9NQUlOX0ZMQUdfSVNPTEFURURfTVNJ OworCX0KKwogCWlycWRvbWFpbi0+ZmxhZ3MgfD0gSVJRX0RPTUFJTl9GTEFHX01TSV9QQVJFTlQ7 CiAJaXJxZG9tYWluLT5tc2lfcGFyZW50X29wcyA9ICZyaXNjdl9pb21tdV9pcl9tc2lfcGFyZW50 X29wczsKIAlpcnFfZG9tYWluX3VwZGF0ZV9idXNfdG9rZW4oaXJxZG9tYWluLCBET01BSU5fQlVT X01TSV9SRU1BUCk7CkBAIC0yMzMsNiArMzYzLDcgQEAgc3RydWN0IGlycV9kb21haW4gKnJpc2N2 X2lvbW11X2lyX2lycV9kb21haW5fY3JlYXRlKHN0cnVjdCByaXNjdl9pb21tdV9kZXZpY2UgKmkK IHN0YXRpYyB2b2lkIHJpc2N2X2lvbW11X2lyX2ZyZWVfbXNpX3RhYmxlKHN0cnVjdCByaXNjdl9p b21tdV9kb21haW4gKmRvbWFpbikKIHsKIAlpb21tdV9mcmVlX3BhZ2VzKGRvbWFpbi0+bXNpX3Jv b3QpOworCWtmcmVlKGRvbWFpbi0+bXNpX3B0ZV9jb3VudHMpOwogfQogCiB2b2lkIHJpc2N2X2lv bW11X2lyX2lycV9kb21haW5fcmVtb3ZlKHN0cnVjdCByaXNjdl9pb21tdV9pbmZvICppbmZvKQpA QCAtMjc0LDYgKzQwNSwxNCBAQCBzdGF0aWMgaW50IHJpc2N2X2lyX3NldF9pbXNpY19nbG9iYWxf Y29uZmlnKHN0cnVjdCByaXNjdl9pb21tdV9kZXZpY2UgKmlvbW11LAogCQkJCQkJCSAgICAgbnJf cHRlcyAqIHNpemVvZigqZG9tYWluLT5tc2lfcm9vdCkpOwogCQlpZiAoIWRvbWFpbi0+bXNpX3Jv b3QpCiAJCQlyZXR1cm4gLUVOT01FTTsKKworCQlkb21haW4tPm1zaV9wdGVfY291bnRzID0ga2Nh bGxvYyhucl9wdGVzLCBzaXplb2YocmVmY291bnRfdCksIEdGUF9LRVJORUxfQUNDT1VOVCk7CisJ CWlmICghZG9tYWluLT5tc2lfcHRlX2NvdW50cykgeworCQkJaW9tbXVfZnJlZV9wYWdlcyhkb21h aW4tPm1zaV9yb290KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcmF3X3NwaW5fbG9j a19pbml0KCZkb21haW4tPm1zaV9sb2NrKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuaCBiL2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUu aAppbmRleCAxZmUzNWYxMjEwZmIuLmFlYjU2NDJmMDAzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9p b21tdS9yaXNjdi9pb21tdS5oCisrKyBiL2RyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuaApAQCAt MzQsNiArMzQsOCBAQCBzdHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluIHsKIAl1bnNpZ25lZCBpbnQg cGdkX21vZGU7CiAJdW5zaWduZWQgbG9uZyAqcGdkX3Jvb3Q7CiAJc3RydWN0IHJpc2N2X2lvbW11 X21zaXB0ZSAqbXNpX3Jvb3Q7CisJcmVmY291bnRfdCAqbXNpX3B0ZV9jb3VudHM7CisJcmF3X3Nw aW5sb2NrX3QgbXNpX2xvY2s7CiAJdTY0IG1zaV9hZGRyX21hc2s7CiAJdTY0IG1zaV9hZGRyX3Bh dHRlcm47CiAJdTMyIGdyb3VwX2luZGV4X2JpdHM7Ci0tIAoyLjQ5LjAKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxp c3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==