From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (usa-sjc-mx-foss1.foss.arm.com [217.140.101.70]) by dpdk.org (Postfix) with ESMTP id 34F0220BD for ; Wed, 9 Aug 2017 08:32:47 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 06E0180D; Tue, 8 Aug 2017 23:32:47 -0700 (PDT) Received: from ubuntu-jianbo.shanghai.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 36ABB3F540; Tue, 8 Aug 2017 23:32:46 -0700 (PDT) From: Jianbo Liu To: dts@dpdk.org, herbert.guan@arm.com Cc: Jianbo Liu Date: Wed, 9 Aug 2017 14:32:02 +0800 Message-Id: <1502260322-23906-1-git-send-email-jianbo.liu@linaro.org> X-Mailer: git-send-email 1.9.1 Subject: [dts] [PATCH] framework: add config option for vfio noiommu mode X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Aug 2017 06:32:48 -0000 Signed-off-by: Jianbo Liu --- framework/dts.py | 9 +++++++++ framework/project_dpdk.py | 30 +++++++++++++++++++++++++++++- framework/settings.py | 1 + tools/setup.py | 2 +- 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/framework/dts.py b/framework/dts.py index c821fc1..931bf38 100644 --- a/framework/dts.py +++ b/framework/dts.py @@ -81,6 +81,14 @@ def dts_parse_param(config, section): parameters = config.get(section, 'parameters').split(':') drivername = config.get(section, 'drivername').split('=')[-1] + driver = drivername.split(':') + if len(driver) == 2: + drivername = driver[0] + drivermode = driver[1] + settings.save_global_setting(settings.HOST_DRIVER_MODE_SETTING, drivermode) + else: + drivername = driver[0] + settings.save_global_setting(settings.HOST_DRIVER_SETTING, drivername) paramDict = dict() @@ -373,6 +381,7 @@ def dts_run_target(duts, tester, targets, test_suites): for dutobj in duts: dutobj.stop_ports() dutobj.restore_interfaces() + dutobj.restore_modules() def dts_run_suite(duts, tester, test_suites, target): diff --git a/framework/project_dpdk.py b/framework/project_dpdk.py index b9a6d4a..402ac8d 100644 --- a/framework/project_dpdk.py +++ b/framework/project_dpdk.py @@ -33,7 +33,7 @@ import os import re from settings import NICS, load_global_setting, accepted_nic -from settings import DPDK_RXMODE_SETTING, HOST_DRIVER_SETTING +from settings import DPDK_RXMODE_SETTING, HOST_DRIVER_SETTING, HOST_DRIVER_MODE_SETTING from ssh_connection import SSHConnection from crb import Crb from dut import Dut @@ -104,6 +104,11 @@ class DPDKdut(Dut): self.send_expect("modprobe vfio-pci", "#", 70) out = self.send_expect("lsmod | grep vfio_iommu_type1", "#") assert ("vfio_iommu_type1" in out), "Failed to setup vfio-pci" + + drivermode = load_global_setting(HOST_DRIVER_MODE_SETTING) + if drivermode == "noiommu": + self.send_expect("echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode", "#", 70) + else: self.send_expect("modprobe uio", "#", 70) out = self.send_expect("lsmod | grep igb_uio", "#") @@ -130,6 +135,29 @@ class DPDKdut(Dut): out = self.send_expect("kldstat", "#") assert ("nic_uio" in out), "Failed to insmod nic_uio" + def restore_modules(self): + """ + Restore DPDK kernel module on DUT. + """ + restore_modules = getattr(self, 'restore_modules_%s' % self.get_os_type()) + restore_modules() + + def restore_modules_linux(self): + """ + Restore DPDK Linux kernel module on DUT. + """ + drivername = load_global_setting(HOST_DRIVER_SETTING) + if drivername == "vfio-pci": + drivermode = load_global_setting(HOST_DRIVER_MODE_SETTING) + if drivermode == "noiommu": + self.send_expect("echo 0 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode", "#", 70) + + def restore_modules_freebsd(self): + """ + Restore DPDK Freebsd kernel module on DUT. + """ + pass + def set_rxtx_mode(self): """ Set default RX/TX PMD function, diff --git a/framework/settings.py b/framework/settings.py index d306de2..e5b7746 100644 --- a/framework/settings.py +++ b/framework/settings.py @@ -204,6 +204,7 @@ DTS_ENV_PAT = r"DTS_*" PERF_SETTING = "DTS_PERF_ONLY" FUNC_SETTING = "DTS_FUNC_ONLY" HOST_DRIVER_SETTING = "DTS_HOST_DRIVER" +HOST_DRIVER_MODE_SETTING = "DTS_HOST_DRIVER_MODE" HOST_NIC_SETTING = "DTS_HOST_NIC" DEBUG_SETTING = "DTS_DEBUG_ENABLE" DEBUG_CASE_SETTING = "DTS_DEBUGCASE_ENABLE" diff --git a/tools/setup.py b/tools/setup.py index 9fcd70e..c6c72bc 100755 --- a/tools/setup.py +++ b/tools/setup.py @@ -280,7 +280,7 @@ def config_execution(): driver_option = {'prompt': 'Choose one of them', 'type': 'choice', 'help': 'Choose one of dpdk support driver', - 'options': ['igb_uio', 'vfio-pci'], + 'options': ['igb_uio', 'vfio-pci', 'vfio-pci:noiommu'], 'default': '0'} opt = Option(**driver_option) driver_name = opt.parse_input() -- 1.9.1