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 15B57C54F30 for ; Fri, 23 May 2025 08:06:58 +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=eJaNuqasK/FxY0salnlhVcgpCj4JyXgp/D4X/FCI7e8=; b=XQQWN1NwAGcdEW mN3c14gji12w5jUJwXxNtmyVEzBALVHZGr2KDOWQgZqLM3g7qc4rHM1dV2CmwdvvJ+OWXtzuAgTiH 791PuwiAMXuw8AV9NTYe+Dcfz9ON4n2xmOpD+ENmaZb9NMITBS6TlLUFut5ipwF8sWGexRqTjl8QX 3QoMCI6fHOxUXf3b2B19rvl954d2tbSSZJYQs+A3OFjtMs/JO4Ux/Gmm/aKSgoSBnchGokQs2IpS5 NpMbDdpoj07WlYduYJRs3Bm4Yg3XMF3OqDNMBiWpP74vJqmQxk/Dak4diQQaEW1Yv21p9Xyt72uN3 cF81s+x4nC2i9ysyvM7Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uINQf-00000003GGS-3YDZ; Fri, 23 May 2025 08:06:57 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uINFP-00000003EhL-0g9L for kvm-riscv@bombadil.infradead.org; Fri, 23 May 2025 07:55:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Sender:Reply-To:Content-ID:Content-Description; bh=nxzqQKMOJ7+1lap2SHx+5+EMFITY8vpqy2IDV73v588=; b=NnxlqIFsGno1bMsJ/zT8erd2Z+ okqepjArq6rE1Di2sjbAzGwjz/nNgk3DwU8g7e4hSuz0EMoft+qmqWZ6TZzpxfI6ZDTF1CDWUFqBD Pmvov2bZ8AFCX0QaFMwQNI6nU9ml5zE8e+1PnF4it03ke38dEgVP/Du2KJbxSv9tHSXUGohXv5qeV n76JNXAlVL4cZFY+SPjVu573anC9an6JPKMZ5tR4SupQB5x/InP5cPDFvHqyRArcp36KlhTE58Imm aG3UvqLDZLp+jBgrrxipVdsA38A48nkg0hE+gT8p2m30E2lIFQnddHynyT1NI2gZw98/TT0GP32T0 Wldd+ksQ==; Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by desiato.infradead.org with esmtps (Exim 4.98.1 #2 (Red Hat Linux)) id 1uINFK-00000001Cw4-1au3 for kvm-riscv@lists.infradead.org; Fri, 23 May 2025 07:55:18 +0000 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-231e21d3b63so90117585ad.3 for ; Fri, 23 May 2025 00:55:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1747986911; x=1748591711; 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=nxzqQKMOJ7+1lap2SHx+5+EMFITY8vpqy2IDV73v588=; b=DodaqniMW8XX+JXVvrQS5Img4Xc42c93U+b6rFJ6HnTbA96KRYcuVfnwQNtHqmq95D 5cKhIjkqUqjstexutpySww5WisWgYWg4HRdNIhIddoyjsW0reQXuOuWFF6M3lWQmUs4L O6Hnlw0D4XZOd6AgCJUZkonqfOTduHK9twqI4Vpy0TL6lzMb8TlqGA7Rm/AcefwD3Vq9 jyOMq0gamxDHgvYm2ZfVGpJLBMtEMP9NMlefyZktT0vXhqSMC0yEfW9FKxjyhugPr/Oz h57bgbLQBhzfdXLldU+2fP4rmZQisQpS35N9PuBA7dfSDR/lUjBjqA1acsbfOI9ssqMy mRDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747986911; x=1748591711; 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=nxzqQKMOJ7+1lap2SHx+5+EMFITY8vpqy2IDV73v588=; b=iN0OBZxkPSQytWWdhye3RRjr7QeGIcf78WcmnN8xz5dUeCVdC6za/ddFavxj169djJ tCPVKo0YZIIoV9JHFjbn/7czACe+ggYxuj+1JOBQO+Gf6Q9MgBz7GpwfsYc57WMI+o+v pV3eitKdnxYPZj+7OE7K/EvZYoLDROIzNz6HTkoo/Nz25dCRSm1ZAGBZriRFp7rmRVj+ cbHWFVOqhV5hSIyDlnIaQNdQH0Uds48iavELvicAaW37g/fAo7A3z7Bdr+qnPAxkGZ+Q Vsi3Il93z1yuEKjU2gldWTVOt1CZ1UDbFERt/udQenFbTQs2zQlSJiNelMaRFuwFqzaI Ay3w== X-Forwarded-Encrypted: i=1; AJvYcCWO9G6N4S/SBCqrwc6pxDjmlZ+YTVJwXyuxcZr//xB8zY53VWrTjJhe1eaub3jD5oJgVf2X0w1xPnA=@lists.infradead.org X-Gm-Message-State: AOJu0YwF88X3ubUfVI0MgtNI+RemIX0IvueV/KgAY+nek9bUKEP08eGw k+dwfvS49bfC84FC/+dWzyH8pe1MieQrsxEQxen1ag8o9twXiG8tu+sIAivzeYtEGtU9Ag6axk3 c56XvyY4= X-Gm-Gg: ASbGncvetQGKsDjMR/RyvvUDye5bXFmEaArpLB9T0tWnbBX2IgM4r5A8VAjS7j079av C8Jgm2gIXXP1gOLFz0tdwJz2aBT2EAWJ/1Av8i3/HVW1sjf9HvjqIEtrrHoeyvbbak2NYyN8LeK 0k57qFSaVtU19FVbIm98ok2Mga39l/RjAZ4MrBQJkKw9gk7BDDG/rXzb8J0rOktqfknmRD+yHvO 2pWtRJF34XZ6VF0qqB4nXT9JVrMDRmoPfVzlquxgcpFYpDPCD4gjkxVKtw9Tktl5TojfRvmpUhi 8FGlap95WBJPjW14iuy8BLgs/YN615ww2YhdMSoEHGy+KxbnsYaTMtYv79YdZsQ= X-Google-Smtp-Source: AGHT+IFsCaQmmtn/D65KR060IPvzSK50zSGXf48LGomWrpC+b3XUenXh9CU65SIwoVkuKdwTJQU3NA== X-Received: by 2002:a17:903:2284:b0:22e:663f:c4b with SMTP id d9443c01a7336-231de36bb60mr361017045ad.26.1747986911225; Fri, 23 May 2025 00:55:11 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30f36513bb7sm6767204a91.46.2025.05.23.00.55.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 May 2025 00:55:10 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: kvm@vger.kernel.org, kvm-riscv@lists.infradead.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Andrew Jones , Ved Shanbhogue Subject: [PATCH 3/3] riscv: Add ISA double trap extension testing Date: Fri, 23 May 2025 09:53:10 +0200 Message-ID: <20250523075341.1355755-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250523075341.1355755-1-cleger@rivosinc.com> References: <20250523075341.1355755-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250523_085514_552347_CF94FD60 X-CRM114-Status: GOOD ( 25.96 ) 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 VGhpcyB0ZXN0IGFsbG93cyB0byB0ZXN0IHRoZSBkb3VibGUgdHJhcCBpbXBsZW1lbnRhdGlvbiBv ZiBoYXJkd2FyZSBhcwp3ZWxsIGFzIHRoZSBTQkkgRldGVCBhbmQgU1NFIHN1cHBvcnQgZm9yIGRv dWJsZSB0cmFwLiBUaGUgdGVzdHMgd2lsbCB0cnkKdG8gdHJpZ2dlciBkb3VibGUgdHJhcCB1c2lu ZyB2YXJpb3VzIHNlcXVlbmNlcyBhbmQgd2lsbCB0ZXN0IHRvIHJlY2VpdmUKdGhlIFNTRSBkb3Vi bGUgdHJhcCBldmVudCBpZiBzdXBwb3J0ZWQuCgpJdCBpcyBwcm92aWRlZCBhcyBhIHNlcGFyYXRl IHRlc3QgZnJvbSB0aGUgU0JJIG9uZSBmb3IgdHdvIHJlYXNvbnM6Ci0gSXQgaXNuJ3Qgc3BlY2lm aWNhbGx5IHRlc3RpbmcgU0JJICJwZXIgc2UiLgotIEl0IGVuZHMgdXAgYnkgdHJ5aW5nIHRvIGNy YXNoIGludG8gaW4gTS1tb2RlLgoKQ3VycmVudGx5LCB0aGUgdGVzdCB1c2VzIGEgcGFnZSBmYXVs dCB0byByYWlzZSBhIHRyYXAgcHJvZ3JhbWF0aWNhbGx5LgpTb21lIGNvbmNlcm4gd2FzIHJhaXNl ZCBieSBhIGdpdGh1YiB1c2VyIG9uIHRoZSBvcmlnaW5hbCBicmFuY2ggWzFdCnNheWluZyB0aGF0 IHRoZSBzcGVjIGRvZXNuJ3QgbWFuZGF0ZSBhbnkgdHJhcCB0byBiZSBkZWxlZ2F0YWJsZSBhbmQg dGhhdAp3ZSB3b3VsZCBuZWVkIGEgd2F5IHRvIGRldGVjdCB3aGljaCBvbmVzIGFyZSBkZWxlZ2F0 YWJsZS4gSSB0aGluayB3ZSBjYW4Kc2FmZWx5IGFzc3VtZSB0aGF0IFBBR0UgRkFVTFQgaXMgZGVs YWdhdGFibGUgYW5kIGlmIGEgaGFyZHdhcmUgdGhhdCBkb2VzCm5vdCBoYXZlIHN1cHBvcnQgY29t ZXMgdXAgdGhlbiBpdCB3aWxsIHByb2JhYmx5IGJlIHRoZSB2ZW5kb3IKcmVzcG9uc2liaWxpdHkg dG8gcHJvdmlkZSBhIHdheSB0byBkbyBzby4KCkxpbms6IGh0dHBzOi8vZ2l0aHViLmNvbS9jbGVt ZW50bGVnZXIva3ZtLXVuaXQtdGVzdHMvaXNzdWVzLzEgWzFdClNpZ25lZC1vZmYtYnk6IENsw6lt ZW50IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNvbT4KLS0tCiByaXNjdi9NYWtlZmlsZSAgICAg IHwgICAxICsKIGxpYi9yaXNjdi9hc20vY3NyLmggfCAgIDEgKwogcmlzY3YvaXNhLWRibHRycC5j ICB8IDE4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogcmlz Y3YvdW5pdHRlc3RzLmNmZyB8ICAgNSArKwogNCBmaWxlcyBjaGFuZ2VkLCAxOTYgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHJpc2N2L2lzYS1kYmx0cnAuYwoKZGlmZiAtLWdpdCBh L3Jpc2N2L01ha2VmaWxlIGIvcmlzY3YvTWFrZWZpbGUKaW5kZXggMTFlNjhlYWUuLmQ3MWM5ZDJl IDEwMDY0NAotLS0gYS9yaXNjdi9NYWtlZmlsZQorKysgYi9yaXNjdi9NYWtlZmlsZQpAQCAtMTQs NiArMTQsNyBAQCB0ZXN0cyA9CiB0ZXN0cyArPSAkKFRFU1RfRElSKS9zYmkuJChleGUpCiB0ZXN0 cyArPSAkKFRFU1RfRElSKS9zZWxmdGVzdC4kKGV4ZSkKIHRlc3RzICs9ICQoVEVTVF9ESVIpL3Np ZXZlLiQoZXhlKQordGVzdHMgKz0gJChURVNUX0RJUikvaXNhLWRibHRycC4kKGV4ZSkKIAogYWxs OiAkKHRlc3RzKQogCmRpZmYgLS1naXQgYS9saWIvcmlzY3YvYXNtL2Nzci5oIGIvbGliL3Jpc2N2 L2FzbS9jc3IuaAppbmRleCAzZTRiNWZjYS4uNmE4ZTA1NzggMTAwNjQ0Ci0tLSBhL2xpYi9yaXNj di9hc20vY3NyLmgKKysrIGIvbGliL3Jpc2N2L2FzbS9jc3IuaApAQCAtMTgsNiArMTgsNyBAQAog CiAjZGVmaW5lIFNSX1NJRQkJCV9BQygweDAwMDAwMDAyLCBVTCkKICNkZWZpbmUgU1JfU1BQCQkJ X0FDKDB4MDAwMDAxMDAsIFVMKQorI2RlZmluZSBTUl9TRFQJCQlfQUMoMHgwMTAwMDAwMCwgVUwp IC8qIFN1cGVydmlzb3IgRG91YmxlIFRyYXAgKi8KIAogLyogRXhjZXB0aW9uIGNhdXNlIGhpZ2gg Yml0IC0gaXMgYW4gaW50ZXJydXB0IGlmIHNldCAqLwogI2RlZmluZSBDQVVTRV9JUlFfRkxBRwkJ KF9BQygxLCBVTCkgPDwgKF9fcmlzY3ZfeGxlbiAtIDEpKQpkaWZmIC0tZ2l0IGEvcmlzY3YvaXNh LWRibHRycC5jIGIvcmlzY3YvaXNhLWRibHRycC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi4xNzRhZWUyYQotLS0gL2Rldi9udWxsCisrKyBiL3Jpc2N2L2lzYS1kYmx0cnAu YwpAQCAtMCwwICsxLDE4OSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seQorLyoKKyAqIFNCSSB2ZXJpZmljYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjUs IFJpdm9zIEluYy4sIENsw6ltZW50IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNvbT4KKyAqLwor I2luY2x1ZGUgPGFsbG9jLmg+CisjaW5jbHVkZSA8YWxsb2NfcGFnZS5oPgorI2luY2x1ZGUgPGxp YmNmbGF0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxhc20vY3NyLmg+Cisj aW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVk ZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9zYmkuaD4KKworI2luY2x1ZGUgPHNiaS10 ZXN0cy5oPgorCitzdGF0aWMgYm9vbCBkb3VibGVfdHJhcDsKK3N0YXRpYyBib29sIHNldF9zZHQg PSB0cnVlOworCisjZGVmaW5lIEdFTl9UUkFQKCkJCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQkJXAor CXZvaWQgKnB0ciA9IE5VTEw7CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsJCQkJ CQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCQkJXAorCSIJLm9wdGlvbiBwdXNoXG4iCQkJCQkJCVwK KwkiCS5vcHRpb24gYXJjaCwtY1xuIgkJCQkJCVwKKwkiCXN3ICUwLCAwKCUxKVxuIgkJCQkJCQlc CisJIgkub3B0aW9uIHBvcFxuIgkJCQkJCQlcCisJOiA6ICJyIih2YWx1ZSksICJyIihwdHIpIDog Im1lbW9yeSIpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgc3lzY2FsbF90cmFw X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHNldF9zZHQpCisJCWNzcl9z ZXQoQ1NSX1NTVEFUVVMsIFNSX1NEVCk7CisKKwlpZiAoZG91YmxlX3RyYXApIHsKKwkJZG91Ymxl X3RyYXAgPSBmYWxzZTsKKwkJR0VOX1RSQVAoKTsKKwl9CisKKwkvKiBTa2lwIHRyYXBwaW5nIGlu c3RydWN0aW9uICovCisJcmVncy0+ZXBjICs9IDQ7Cit9CisKK3N0YXRpYyBib29sIHNzZV9kYmx0 cnBfY2FsbGVkOworCitzdGF0aWMgdm9pZCBzc2VfZGJsdHJwX2hhbmRsZXIodm9pZCAqZGF0YSwg c3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBoYXJ0aWQpCit7CisJc3RydWN0IHNi aXJldCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGV4cGVjdGVk X2ZsYWdzID0gU0JJX1NTRV9BVFRSX0lOVEVSUlVQVEVEX0ZMQUdTX1NTVEFUVVNfU1BQIHwKKwkJ CQkgICAgICAgU0JJX1NTRV9BVFRSX0lOVEVSUlVQVEVEX0ZMQUdTX1NTVEFUVVNfU0RUOworCisJ cmV0ID0gc2JpX3NzZV9yZWFkX2F0dHJzKFNCSV9TU0VfRVZFTlRfTE9DQUxfRE9VQkxFX1RSQVAs IFNCSV9TU0VfQVRUUl9JTlRFUlJVUFRFRF9GTEFHUywgMSwKKwkJCQkgJmZsYWdzKTsKKwlzYmly ZXRfcmVwb3J0X2Vycm9yKCZyZXQsIFNCSV9TVUNDRVNTLCAiR2V0IGRvdWJsZSB0cmFwIGV2ZW50 IGZsYWdzIik7CisJcmVwb3J0KGZsYWdzID09IGV4cGVjdGVkX2ZsYWdzLCAiU1NFIGZsYWdzID09 IDB4JWx4IiwgZXhwZWN0ZWRfZmxhZ3MpOworCisJc3NlX2RibHRycF9jYWxsZWQgPSB0cnVlOwor CisJLyogU2tpcCB0cmFwcGluZyBpbnN0cnVjdGlvbiAqLworCXJlZ3MtPmVwYyArPSA0OworfQor CitzdGF0aWMgdm9pZCBzc2VfZG91YmxlX3RyYXAodm9pZCkKK3sKKwlzdHJ1Y3Qgc2JpcmV0IHJl dDsKKworCXN0cnVjdCBzYmlfc3NlX2hhbmRsZXJfYXJnIGhhbmRsZXJfYXJnID0geworCQkuaGFu ZGxlciA9IHNzZV9kYmx0cnBfaGFuZGxlciwKKwkJLnN0YWNrID0gYWxsb2NfcGFnZSgpICsgUEFH RV9TSVpFLAorCX07CisKKwlyZXBvcnRfcHJlZml4X3B1c2goInNzZSIpOworCisJcmV0ID0gc2Jp X3NzZV9oYXJ0X3VubWFzaygpOworCWlmICghc2JpcmV0X3JlcG9ydF9lcnJvcigmcmV0LCBTQklf U1VDQ0VTUywgIlNTRSBoYXJ0IHVubWFzayBvayIpKQorCQlnb3RvIG91dDsKKworCXJldCA9IHNi aV9zc2VfcmVnaXN0ZXIoU0JJX1NTRV9FVkVOVF9MT0NBTF9ET1VCTEVfVFJBUCwgJmhhbmRsZXJf YXJnKTsKKwlpZiAocmV0LmVycm9yID09IFNCSV9FUlJfTk9UX1NVUFBPUlRFRCkgeworCQlyZXBv cnRfc2tpcCgiU1NFIGRvdWJsZSB0cmFwIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJZ290 byBvdXQ7CisJfQorCXNiaXJldF9yZXBvcnRfZXJyb3IoJnJldCwgU0JJX1NVQ0NFU1MsICJTU0Ug ZG91YmxlIHRyYXAgcmVnaXN0ZXIiKTsKKworCXJldCA9IHNiaV9zc2VfZW5hYmxlKFNCSV9TU0Vf RVZFTlRfTE9DQUxfRE9VQkxFX1RSQVApOworCWlmICghc2JpcmV0X3JlcG9ydF9lcnJvcigmcmV0 LCBTQklfU1VDQ0VTUywgIlNTRSBkb3VibGUgdHJhcCBlbmFibGUiKSkKKwkJZ290byBvdXRfdW5y ZWdpc3RlcjsKKworCS8qCisJICogR2VuZXJhdGUgYSBkb3VibGUgY3Jhc2ggc28gdGhhdCBhbiBT U0UgZXZlbnQgc2hvdWxkIGJlIGdlbmVyYXRlZC4gVGhlIFNQRUMgKElTQSBub3IgU0JJKQorCSAq IGRvZXMgbm90IGV4cGxpY2l0bHkgdGVsbCB0aGF0IGlmIHN1cHBvcnRlZCBpdCBzaG91bGQgZ2Vu ZXJhdGUgYW4gU1NFIGV2ZW50IGJ1dCB0aGF0J3MKKwkgKiBhIHJlYXNvbmFibGUgYXNzdW1wdGlv biB0byBkbyBzbyBpZiBib3RoIEZXRlQgYW5kIFNTRSBhcmUgc3VwcG9ydGVkLgorCSAqLworCXNl dF9zZHQgPSB0cnVlOworCWRvdWJsZV90cmFwID0gdHJ1ZTsKKwlHRU5fVFJBUCgpOworCisJcmVw b3J0KHNzZV9kYmx0cnBfY2FsbGVkLCAiU1NFIGRvdWJsZSB0cmFwIGV2ZW50IGdlbmVyYXRlZCIp OworCisJcmV0ID0gc2JpX3NzZV9kaXNhYmxlKFNCSV9TU0VfRVZFTlRfTE9DQUxfRE9VQkxFX1RS QVApOworCXNiaXJldF9yZXBvcnRfZXJyb3IoJnJldCwgU0JJX1NVQ0NFU1MsICJTU0UgZG91Ymxl IHRyYXAgZGlzYWJsZSIpOworb3V0X3VucmVnaXN0ZXI6CisJcmV0ID0gc2JpX3NzZV91bnJlZ2lz dGVyKFNCSV9TU0VfRVZFTlRfTE9DQUxfRE9VQkxFX1RSQVApOworCXNiaXJldF9yZXBvcnRfZXJy b3IoJnJldCwgU0JJX1NVQ0NFU1MsICJTU0UgZG91YmxlIHRyYXAgdW5yZWdpc3RlciIpOworCitv dXQ6CisJc2JpX3NzZV9oYXJ0X21hc2soKTsKKwlmcmVlX3BhZ2UoaGFuZGxlcl9hcmcuc3RhY2sg LSBQQUdFX1NJWkUpOworCisJcmVwb3J0X3ByZWZpeF9wb3AoKTsKK30KKworc3RhdGljIHZvaWQg Y2hlY2tfZG91YmxlX3RyYXAodm9pZCkKK3sKKwlzdHJ1Y3Qgc2JpcmV0IHJldDsKKworCS8qIERp c2FibGUgZG91YmxlIHRyYXAgKi8KKwlyZXQgPSBzYmlfZndmdF9zZXQoU0JJX0ZXRlRfRE9VQkxF X1RSQVAsIDAsIDApOworCXNiaXJldF9yZXBvcnRfZXJyb3IoJnJldCwgU0JJX1NVQ0NFU1MsICJT ZXQgZG91YmxlIHRyYXAgZW5hYmxlIGZlYXR1cmUgdmFsdWUgPT0gMCIpOworCXJldCA9IHNiaV9m d2Z0X2dldChTQklfRldGVF9ET1VCTEVfVFJBUCk7CisJc2JpcmV0X3JlcG9ydCgmcmV0LCBTQklf U1VDQ0VTUywgMCwgIkdldCBkb3VibGUgdHJhcCBlbmFibGUgZmVhdHVyZSB2YWx1ZSA9PSAwIik7 CisKKwlpbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKEVYQ19TVE9SRV9QQUdFX0ZBVUxULCBzeXNj YWxsX3RyYXBfaGFuZGxlcik7CisKKwlkb3VibGVfdHJhcCA9IHRydWU7CisJR0VOX1RSQVAoKTsK KwlyZXBvcnRfcGFzcygiRG91YmxlIHRyYXAgZGlzYWJsZWQsIHRyYXAgZmlyc3QgdGltZSBvayIp OworCisJLyogRW5hYmxlIGRvdWJsZSB0cmFwICovCisJcmV0ID0gc2JpX2Z3ZnRfc2V0KFNCSV9G V0ZUX0RPVUJMRV9UUkFQLCAxLCAxKTsKKwlzYmlyZXRfcmVwb3J0X2Vycm9yKCZyZXQsIFNCSV9T VUNDRVNTLCAiU2V0IGRvdWJsZSB0cmFwIGVuYWJsZSBmZWF0dXJlIHZhbHVlID09IDEiKTsKKwly ZXQgPSBzYmlfZndmdF9nZXQoU0JJX0ZXRlRfRE9VQkxFX1RSQVApOworCWlmICghc2JpcmV0X3Jl cG9ydCgmcmV0LCBTQklfU1VDQ0VTUywgMSwgIkdldCBkb3VibGUgdHJhcCBlbmFibGUgZmVhdHVy ZSB2YWx1ZSA9PSAxIikpCisJCXJldHVybjsKKworCS8qIEZpcnN0IHRpbWUsIGNsZWFyIHRoZSBk b3VibGUgdHJhcCBmbGFnIChTRFQpIHNvIHRoYXQgaXQgZG9lc24ndCBnZW5lcmF0ZSBhIGRvdWJs ZSB0cmFwICovCisJc2V0X3NkdCA9IGZhbHNlOworCWRvdWJsZV90cmFwID0gdHJ1ZTsKKwlHRU5f VFJBUCgpOworCXJlcG9ydF9wYXNzKCJUcmFwcGVkIHR3aWNlIGFsbG93ZWQgb2siKTsKKworCWlm IChzYmlfcHJvYmUoU0JJX0VYVF9TU0UpKQorCQlzc2VfZG91YmxlX3RyYXAoKTsKKwllbHNlCisJ CXJlcG9ydF9za2lwKCJTU0UgZG91YmxlIHRyYXAgZXZlbnQgd2lsbCBub3QgYmUgdGVzdGVkLCBl eHRlbnNpb24gaXMgbm90IGF2YWlsYWJsZSIpOworCisJLyoKKwkgKiBTZWNvbmQgdGltZSwga2Vl cCB0aGUgZG91YmxlIHRyYXAgZmxhZyAoU0RUKSBhbmQgZ2VuZXJhdGUgYW5vdGhlciB0cmFwLCB0 aGlzIHNob3VsZAorCSAqIGdlbmVyYXRlIGEgZG91YmxlIHRyYXAuIFNpbmNlIHRoZXJlIGlzIG5v IFNTRSBoYW5kbGVyIHJlZ2lzdGVyZWQsIGl0IHNob3VsZCBjcmFzaCB0bworCSAqIE0tbW9kZS4K KwkgKi8KKwlzZXRfc2R0ID0gdHJ1ZTsKKwlkb3VibGVfdHJhcCA9IHRydWU7CisJcmVwb3J0X2lu Zm8oIlNob3VsZCBnZW5lcmF0ZSBhIGRvdWJsZSB0cmFwIGFuZCBjcmFzaCAhIik7CisJR0VOX1RS QVAoKTsKKwlyZXBvcnRfZmFpbCgiU2hvdWxkIGhhdmUgY3Jhc2hlZCAhIik7Cit9CisKK2ludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc2JpcmV0IHJldDsKKworCXJl cG9ydF9wcmVmaXhfcHVzaCgiZGJsdHJwIik7CisKKwlpZiAoIXNiaV9wcm9iZShTQklfRVhUX0ZX RlQpKSB7CisJCXJlcG9ydF9za2lwKCJGV0ZUIGV4dGVuc2lvbiBpcyBub3QgYXZhaWxhYmxlLCBj YW4gbm90IGVuYWJsZSBkb3VibGUgdHJhcHMiKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0g c2JpX2Z3ZnRfZ2V0KFNCSV9GV0ZUX0RPVUJMRV9UUkFQKTsKKwlpZiAocmV0LnZhbHVlID09IFNC SV9FUlJfTk9UX1NVUFBPUlRFRCkgeworCQlyZXBvcnRfc2tpcCgiU0JJX0ZXRlRfRE9VQkxFX1RS QVAgaXMgbm90IHN1cHBvcnRlZCAhIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzYmlyZXRf cmVwb3J0X2Vycm9yKCZyZXQsIFNCSV9TVUNDRVNTLCAiU0JJX0ZXRlRfRE9VQkxFX1RSQVAgZ2V0 IHZhbHVlIikpCisJCWNoZWNrX2RvdWJsZV90cmFwKCk7CisKK291dDoKKwlyZXBvcnRfcHJlZml4 X3BvcCgpOworCisJcmV0dXJuIHJlcG9ydF9zdW1tYXJ5KCk7Cit9CmRpZmYgLS1naXQgYS9yaXNj di91bml0dGVzdHMuY2ZnIGIvcmlzY3YvdW5pdHRlc3RzLmNmZwppbmRleCAyZWI3NjBlYy4uNzU3 ZTYwMjcgMTAwNjQ0Ci0tLSBhL3Jpc2N2L3VuaXR0ZXN0cy5jZmcKKysrIGIvcmlzY3YvdW5pdHRl c3RzLmNmZwpAQCAtMTgsMyArMTgsOCBAQCBncm91cHMgPSBzZWxmdGVzdAogZmlsZSA9IHNiaS5m bGF0CiBzbXAgPSAkTUFYX1NNUAogZ3JvdXBzID0gc2JpCisKK1tkYmx0cnBdCitmaWxlID0gaXNh LWRibHRycC5mbGF0CitzbXAgPSAkTUFYX1NNUAorZ3JvdXBzID0gaXNhCi0tIAoyLjQ5LjAKCgot LSAKa3ZtLXJpc2N2IG1haWxpbmcgbGlzdAprdm0tcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2t2bS1yaXNjdgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 97D2E28369A for ; Fri, 23 May 2025 07:55:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747986914; cv=none; b=oOtVoZWFzpNjilick6fw0e1gmNLMNa9kyCsH4ZIiNn/CShM4PKK0Nj00A3N3gGOjMHJbYGjbCXjnaFuKS3QCQo1vVsMsQSm5CsFZucByLDYt36ygERjOn+hrnKmkowB+O77hxgfGn8JDJ3zZfSOuImJLyzOvGSwrBSRTL4sOO3Y= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747986914; c=relaxed/simple; bh=h0qBN3wboDfmA8JNgMgjqZsUmuvhvXgWljcJd/JmLXM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WPFKzQRz1ebrgHZLRO3dNwbow92jcra7Qqu5/ABDCKcznZidSsBgjzhK81gSQEM5ZTc8RtA0SdN31ONtVaJWaAO3DUaafqD9lnbpSdsW9lA0mDhCejhsi2bG5NykoqpVXP9vFLPWCqdvbsojw5VWBZkw9lltNRAe2Lvo/nmzo1g= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=BnvbzteU; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="BnvbzteU" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-231c86bffc1so90158135ad.0 for ; Fri, 23 May 2025 00:55:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1747986911; x=1748591711; 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=nxzqQKMOJ7+1lap2SHx+5+EMFITY8vpqy2IDV73v588=; b=BnvbzteU0ls+GRGrRWWqn1w7ECBDlaZQyrILdxsZnhBfYDhQRkmhHgJ0rlI8RsiSmt 6WN98pE8eQKEU15dZeM0DzhGbSnHfd741UdhBzIlrqoe26SsG6YJLAFnFPPm4GgAEwvO PbqxkQIw04w6nwCl4tgYLzyW18y5liAvfZnrD5S07phLaGuTFaOan/na6Dvjj1Lwxmw3 UWsOpGAFg+9Uxemxa53FeY1rCt8h6X/oCZA+xdjf2mjoMprg7X/VIvewEsQYaaPWa4hn hw+TgUbYBrjMmJ74GJadtq7C72sMBSqkYj1kHt7+PosXRETb8uM5uaLTL8nwsqU4hZnp 4xhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747986911; x=1748591711; 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=nxzqQKMOJ7+1lap2SHx+5+EMFITY8vpqy2IDV73v588=; b=viYDSIA29StJOaYV7Jp1ouagiu3NxUUEztYStVQABiomEuTqF0uGR/36pZSiJBAV2q v7uUt+gO89uli6iWefAvKQ/iShXt3j6c3INTbUx4xS0UciD2Y4klHb9E/4wbgZokjwFE PBJksv/rQgDGrGfFezcPsR/ZPFWXgcybR8/HItA+Yc0DtwgfGMDF8HzZV8dI/xi3KZ7v ZS4SuOjz3lL/gknqPlnMfFhl/ycp3vl1IMdyFXfiwU+Bogy4WxbEQNWA/O/qaeeQ7qMA 99maX/BHaxaIedLCBNEGv1EPcdiGWEmDGeGZvavVVtAZnA1SzKRUAjHOhnGI2JnhCri3 10PQ== X-Gm-Message-State: AOJu0Yz32i6epsb6MQ6baKzRaDvrzeV5DnjP/+SQOQquYmwJKPTBIbsx 0c5dF5/vFRkk3cKioNm/8zHfU73AJqrnv2iYb1ZCQC3j6ToIhHfdlOKSgLo+qqokv1yPEdqPxbs 1Q8sgrYc= X-Gm-Gg: ASbGnctDTqihjYz+TRqlNqJtsgdLphi28zZIb3n1rq+hYT59OIERminAmGiJ4X8+3Fb 1VE+rzsR5S4YkUbW1/tdwlSCAUxfXmP9OKwyoL3rSz+SfP8ghmYPjtAhjydU7QAV4W0zFAFHOPI xE5Xl4QsY6vFIosg5Sx/JabYj02GSXiAZglONy0VHuOz6ch5cYiYxvJ8WnCZ2W9aofjqEGKtVU0 lkdsm3Ha3Revg1W1f+bN+KcjyoKc4PsYAG4do1YsiY3/MHRRwcAqcvau6MvqwQjw3mbYdVI2bxx 7Nn9fjDF5VOhVEsXqBaofvrF6Q2O8gU640BU1gJEYiYsS2XfNPLqTdp6CouyEuk= X-Google-Smtp-Source: AGHT+IFsCaQmmtn/D65KR060IPvzSK50zSGXf48LGomWrpC+b3XUenXh9CU65SIwoVkuKdwTJQU3NA== X-Received: by 2002:a17:903:2284:b0:22e:663f:c4b with SMTP id d9443c01a7336-231de36bb60mr361017045ad.26.1747986911225; Fri, 23 May 2025 00:55:11 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30f36513bb7sm6767204a91.46.2025.05.23.00.55.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 May 2025 00:55:10 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: kvm@vger.kernel.org, kvm-riscv@lists.infradead.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Andrew Jones , Ved Shanbhogue Subject: [PATCH 3/3] riscv: Add ISA double trap extension testing Date: Fri, 23 May 2025 09:53:10 +0200 Message-ID: <20250523075341.1355755-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250523075341.1355755-1-cleger@rivosinc.com> References: <20250523075341.1355755-1-cleger@rivosinc.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 This test allows to test the double trap implementation of hardware as well as the SBI FWFT and SSE support for double trap. The tests will try to trigger double trap using various sequences and will test to receive the SSE double trap event if supported. It is provided as a separate test from the SBI one for two reasons: - It isn't specifically testing SBI "per se". - It ends up by trying to crash into in M-mode. Currently, the test uses a page fault to raise a trap programatically. Some concern was raised by a github user on the original branch [1] saying that the spec doesn't mandate any trap to be delegatable and that we would need a way to detect which ones are delegatable. I think we can safely assume that PAGE FAULT is delagatable and if a hardware that does not have support comes up then it will probably be the vendor responsibility to provide a way to do so. Link: https://github.com/clementleger/kvm-unit-tests/issues/1 [1] Signed-off-by: Clément Léger --- riscv/Makefile | 1 + lib/riscv/asm/csr.h | 1 + riscv/isa-dbltrp.c | 189 ++++++++++++++++++++++++++++++++++++++++++++ riscv/unittests.cfg | 5 ++ 4 files changed, 196 insertions(+) create mode 100644 riscv/isa-dbltrp.c diff --git a/riscv/Makefile b/riscv/Makefile index 11e68eae..d71c9d2e 100644 --- a/riscv/Makefile +++ b/riscv/Makefile @@ -14,6 +14,7 @@ tests = tests += $(TEST_DIR)/sbi.$(exe) tests += $(TEST_DIR)/selftest.$(exe) tests += $(TEST_DIR)/sieve.$(exe) +tests += $(TEST_DIR)/isa-dbltrp.$(exe) all: $(tests) diff --git a/lib/riscv/asm/csr.h b/lib/riscv/asm/csr.h index 3e4b5fca..6a8e0578 100644 --- a/lib/riscv/asm/csr.h +++ b/lib/riscv/asm/csr.h @@ -18,6 +18,7 @@ #define SR_SIE _AC(0x00000002, UL) #define SR_SPP _AC(0x00000100, UL) +#define SR_SDT _AC(0x01000000, UL) /* Supervisor Double Trap */ /* Exception cause high bit - is an interrupt if set */ #define CAUSE_IRQ_FLAG (_AC(1, UL) << (__riscv_xlen - 1)) diff --git a/riscv/isa-dbltrp.c b/riscv/isa-dbltrp.c new file mode 100644 index 00000000..174aee2a --- /dev/null +++ b/riscv/isa-dbltrp.c @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * SBI verification + * + * Copyright (C) 2025, Rivos Inc., Clément Léger + */ +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +static bool double_trap; +static bool set_sdt = true; + +#define GEN_TRAP() \ +do { \ + void *ptr = NULL; \ + unsigned long value = 0; \ + asm volatile( \ + " .option push\n" \ + " .option arch,-c\n" \ + " sw %0, 0(%1)\n" \ + " .option pop\n" \ + : : "r"(value), "r"(ptr) : "memory"); \ +} while (0) + +static void syscall_trap_handler(struct pt_regs *regs) +{ + if (set_sdt) + csr_set(CSR_SSTATUS, SR_SDT); + + if (double_trap) { + double_trap = false; + GEN_TRAP(); + } + + /* Skip trapping instruction */ + regs->epc += 4; +} + +static bool sse_dbltrp_called; + +static void sse_dbltrp_handler(void *data, struct pt_regs *regs, unsigned int hartid) +{ + struct sbiret ret; + unsigned long flags; + unsigned long expected_flags = SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SPP | + SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SDT; + + ret = sbi_sse_read_attrs(SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP, SBI_SSE_ATTR_INTERRUPTED_FLAGS, 1, + &flags); + sbiret_report_error(&ret, SBI_SUCCESS, "Get double trap event flags"); + report(flags == expected_flags, "SSE flags == 0x%lx", expected_flags); + + sse_dbltrp_called = true; + + /* Skip trapping instruction */ + regs->epc += 4; +} + +static void sse_double_trap(void) +{ + struct sbiret ret; + + struct sbi_sse_handler_arg handler_arg = { + .handler = sse_dbltrp_handler, + .stack = alloc_page() + PAGE_SIZE, + }; + + report_prefix_push("sse"); + + ret = sbi_sse_hart_unmask(); + if (!sbiret_report_error(&ret, SBI_SUCCESS, "SSE hart unmask ok")) + goto out; + + ret = sbi_sse_register(SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP, &handler_arg); + if (ret.error == SBI_ERR_NOT_SUPPORTED) { + report_skip("SSE double trap event is not supported"); + goto out; + } + sbiret_report_error(&ret, SBI_SUCCESS, "SSE double trap register"); + + ret = sbi_sse_enable(SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP); + if (!sbiret_report_error(&ret, SBI_SUCCESS, "SSE double trap enable")) + goto out_unregister; + + /* + * Generate a double crash so that an SSE event should be generated. The SPEC (ISA nor SBI) + * does not explicitly tell that if supported it should generate an SSE event but that's + * a reasonable assumption to do so if both FWFT and SSE are supported. + */ + set_sdt = true; + double_trap = true; + GEN_TRAP(); + + report(sse_dbltrp_called, "SSE double trap event generated"); + + ret = sbi_sse_disable(SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP); + sbiret_report_error(&ret, SBI_SUCCESS, "SSE double trap disable"); +out_unregister: + ret = sbi_sse_unregister(SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP); + sbiret_report_error(&ret, SBI_SUCCESS, "SSE double trap unregister"); + +out: + sbi_sse_hart_mask(); + free_page(handler_arg.stack - PAGE_SIZE); + + report_prefix_pop(); +} + +static void check_double_trap(void) +{ + struct sbiret ret; + + /* Disable double trap */ + ret = sbi_fwft_set(SBI_FWFT_DOUBLE_TRAP, 0, 0); + sbiret_report_error(&ret, SBI_SUCCESS, "Set double trap enable feature value == 0"); + ret = sbi_fwft_get(SBI_FWFT_DOUBLE_TRAP); + sbiret_report(&ret, SBI_SUCCESS, 0, "Get double trap enable feature value == 0"); + + install_exception_handler(EXC_STORE_PAGE_FAULT, syscall_trap_handler); + + double_trap = true; + GEN_TRAP(); + report_pass("Double trap disabled, trap first time ok"); + + /* Enable double trap */ + ret = sbi_fwft_set(SBI_FWFT_DOUBLE_TRAP, 1, 1); + sbiret_report_error(&ret, SBI_SUCCESS, "Set double trap enable feature value == 1"); + ret = sbi_fwft_get(SBI_FWFT_DOUBLE_TRAP); + if (!sbiret_report(&ret, SBI_SUCCESS, 1, "Get double trap enable feature value == 1")) + return; + + /* First time, clear the double trap flag (SDT) so that it doesn't generate a double trap */ + set_sdt = false; + double_trap = true; + GEN_TRAP(); + report_pass("Trapped twice allowed ok"); + + if (sbi_probe(SBI_EXT_SSE)) + sse_double_trap(); + else + report_skip("SSE double trap event will not be tested, extension is not available"); + + /* + * Second time, keep the double trap flag (SDT) and generate another trap, this should + * generate a double trap. Since there is no SSE handler registered, it should crash to + * M-mode. + */ + set_sdt = true; + double_trap = true; + report_info("Should generate a double trap and crash !"); + GEN_TRAP(); + report_fail("Should have crashed !"); +} + +int main(int argc, char **argv) +{ + struct sbiret ret; + + report_prefix_push("dbltrp"); + + if (!sbi_probe(SBI_EXT_FWFT)) { + report_skip("FWFT extension is not available, can not enable double traps"); + goto out; + } + + ret = sbi_fwft_get(SBI_FWFT_DOUBLE_TRAP); + if (ret.value == SBI_ERR_NOT_SUPPORTED) { + report_skip("SBI_FWFT_DOUBLE_TRAP is not supported !"); + goto out; + } + + if (sbiret_report_error(&ret, SBI_SUCCESS, "SBI_FWFT_DOUBLE_TRAP get value")) + check_double_trap(); + +out: + report_prefix_pop(); + + return report_summary(); +} diff --git a/riscv/unittests.cfg b/riscv/unittests.cfg index 2eb760ec..757e6027 100644 --- a/riscv/unittests.cfg +++ b/riscv/unittests.cfg @@ -18,3 +18,8 @@ groups = selftest file = sbi.flat smp = $MAX_SMP groups = sbi + +[dbltrp] +file = isa-dbltrp.flat +smp = $MAX_SMP +groups = isa -- 2.49.0