From 2718976ddc5c272a97cc60651fe5d63a9a037406 Mon Sep 17 00:00:00 2001 From: Jim Somerville Date: Tue, 29 Oct 2019 15:39:05 -0400 Subject: [PATCH] i40e Driver Upgrade in support of N3000 on-board NICs Uprev i40e to version 2.10.19.30 i40evf gets replaced by iavf version 3.7.61.20 The iavf driver supports both fortville and columbiaville, so they decided to rename from i40evf to something more generic. We get to drop the patch which polls for coming out of reset as it was incorporated upstream. The Intel FPGA Programmable Acceleration Card N3000 contains dual Intel XL710 NICs and an FPGA for acceleration purposes. This driver upgrade is required to support those NICs. Change-Id: Ifbec94bcc00a8cce9fe97bf0eb41556b8bd3e592 Story: 2006740 Task: 37542 Depends-On: https://review.opendev.org/#/c/695061 Signed-off-by: Jim Somerville --- centos_guest_image.inc | 4 +- centos_guest_image_rt.inc | 4 +- centos_iso_image.inc | 6 +-- centos_pkg_dirs | 2 +- centos_pkg_dirs_rt | 2 +- .../intel-i40e/centos/build_srpm.data | 2 +- .../intel-i40e/centos/i40e-kmod.spec | 3 +- ...e-Enable-getting-link-status-from-VF.patch | 18 +++---- ...re-debug-info-for-VFs-still-in-reset.patch | 40 +++++++-------- ...t_vf_config-poll-for-out-of-vf-reset.patch | 49 ------------------- .../intel-i40evf/files/modules-load.conf | 1 - .../centos/build_srpm.data | 2 +- .../centos/iavf-kmod.spec} | 38 +++++++------- .../files/GPL-v2.0.txt | 0 .../intel-iavf/files/modules-load.conf | 1 + 15 files changed, 61 insertions(+), 111 deletions(-) delete mode 100644 kernel/kernel-modules/intel-i40e/files/ndo_get_vf_config-poll-for-out-of-vf-reset.patch delete mode 100644 kernel/kernel-modules/intel-i40evf/files/modules-load.conf rename kernel/kernel-modules/{intel-i40evf => intel-iavf}/centos/build_srpm.data (53%) rename kernel/kernel-modules/{intel-i40evf/centos/i40evf-kmod.spec => intel-iavf/centos/iavf-kmod.spec} (80%) rename kernel/kernel-modules/{intel-i40evf => intel-iavf}/files/GPL-v2.0.txt (100%) create mode 100644 kernel/kernel-modules/intel-iavf/files/modules-load.conf diff --git a/centos_guest_image.inc b/centos_guest_image.inc index c72cec857..1dd8f28fd 100644 --- a/centos_guest_image.inc +++ b/centos_guest_image.inc @@ -10,8 +10,8 @@ perf # Network Drivers # -# i40evf-kmod -kmod-i40evf +# iavf-kmod +kmod-iavf # i40e-kmod kmod-i40e diff --git a/centos_guest_image_rt.inc b/centos_guest_image_rt.inc index 7990eee28..c80892cad 100644 --- a/centos_guest_image_rt.inc +++ b/centos_guest_image_rt.inc @@ -7,8 +7,8 @@ # Network Drivers # -# i40evf-kmod -kmod-i40evf-rt +# iavf-kmod +kmod-iavf-rt # i40e-kmod kmod-i40e-rt diff --git a/centos_iso_image.inc b/centos_iso_image.inc index 35ba4863f..8634a8590 100644 --- a/centos_iso_image.inc +++ b/centos_iso_image.inc @@ -80,9 +80,9 @@ kmod-e1000e-rt kmod-i40e kmod-i40e-rt -# i40evf-kmod -kmod-i40evf -kmod-i40evf-rt +# iavf-kmod +kmod-iavf +kmod-iavf-rt # ixgbevf-kmod kmod-ixgbevf diff --git a/centos_pkg_dirs b/centos_pkg_dirs index 52f22c54a..843a3e3b4 100644 --- a/centos_pkg_dirs +++ b/centos_pkg_dirs @@ -65,7 +65,7 @@ kubernetes/etcd kubernetes/helm grub/grubby kernel/kernel-modules/intel-e1000e -kernel/kernel-modules/intel-i40evf +kernel/kernel-modules/intel-iavf kernel/kernel-modules/intel-i40e kernel/kernel-modules/intel-ixgbevf kernel/kernel-modules/intel-ixgbe diff --git a/centos_pkg_dirs_rt b/centos_pkg_dirs_rt index 2c504494b..51a2ed799 100644 --- a/centos_pkg_dirs_rt +++ b/centos_pkg_dirs_rt @@ -3,7 +3,7 @@ networking/mellanox/libibverbs kernel/kernel-modules/mlnx-ofa_kernel networking/mellanox/rdma-core kernel/kernel-modules/intel-e1000e -kernel/kernel-modules/intel-i40evf +kernel/kernel-modules/intel-iavf kernel/kernel-modules/intel-i40e kernel/kernel-modules/intel-ixgbevf kernel/kernel-modules/intel-ixgbe diff --git a/kernel/kernel-modules/intel-i40e/centos/build_srpm.data b/kernel/kernel-modules/intel-i40e/centos/build_srpm.data index 47321e589..2410f7041 100644 --- a/kernel/kernel-modules/intel-i40e/centos/build_srpm.data +++ b/kernel/kernel-modules/intel-i40e/centos/build_srpm.data @@ -1,4 +1,4 @@ COPY_LIST=" \ $PKG_BASE/files/* \ - $STX_BASE/downloads/i40e-2.7.29.tar.gz" + $STX_BASE/downloads/i40e-2.10.19.30.tar.gz" TIS_PATCH_VER=1 diff --git a/kernel/kernel-modules/intel-i40e/centos/i40e-kmod.spec b/kernel/kernel-modules/intel-i40e/centos/i40e-kmod.spec index 04cd3eb34..6221c006b 100644 --- a/kernel/kernel-modules/intel-i40e/centos/i40e-kmod.spec +++ b/kernel/kernel-modules/intel-i40e/centos/i40e-kmod.spec @@ -8,7 +8,7 @@ %define kmod_name i40e Name: %{kmod_name}-kmod%{?bt_ext} -Version: 2.7.29 +Version: 2.10.19.30 Release: 0%{?_tis_dist}.%{tis_patch_ver} Group: System Environment/Kernel License: GPLv2 @@ -25,7 +25,6 @@ Source11: modules-load.conf Patch01: i40e-Enable-getting-link-status-from-VF.patch Patch02: i40e-add-more-debug-info-for-VFs-still-in-reset.patch -Patch03: ndo_get_vf_config-poll-for-out-of-vf-reset.patch %define kversion %(rpm -q kernel%{?bt_ext}-devel | sort --version-sort | tail -1 | sed 's/kernel%{?bt_ext}-devel-//') diff --git a/kernel/kernel-modules/intel-i40e/files/i40e-Enable-getting-link-status-from-VF.patch b/kernel/kernel-modules/intel-i40e/files/i40e-Enable-getting-link-status-from-VF.patch index 9807529d0..747f567e5 100644 --- a/kernel/kernel-modules/intel-i40e/files/i40e-Enable-getting-link-status-from-VF.patch +++ b/kernel/kernel-modules/intel-i40e/files/i40e-Enable-getting-link-status-from-VF.patch @@ -1,8 +1,8 @@ -From 412fdc8c0d51500e42e76e788ece3ca7dd260ced Mon Sep 17 00:00:00 2001 -Message-Id: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com> +From b8c666367cd98a2b0033c043f6f206abd8e238a6 Mon Sep 17 00:00:00 2001 +Message-Id: From: Vadim Suraev Date: Mon, 8 Feb 2016 15:57:30 -0500 -Subject: [PATCH 1/3] i40e: Enable getting link status from VF +Subject: [PATCH 1/2] i40e: Enable getting link status from VF Add handling of custom OP code sent from the PMD VF to get link status via the virtual channel interface. @@ -16,10 +16,10 @@ Signed-off-by: Jim Somerville 2 files changed, 79 insertions(+) diff --git a/src/i40e_virtchnl_pf.c b/src/i40e_virtchnl_pf.c -index 020bacb..126ec19 100644 +index 9e48f0d..21b4606 100644 --- a/src/i40e_virtchnl_pf.c +++ b/src/i40e_virtchnl_pf.c -@@ -2559,6 +2559,81 @@ static int i40e_vc_config_promiscuous_mode_msg(struct i40e_vf *vf, u8 *msg) +@@ -2467,6 +2467,81 @@ err_out: aq_ret); } @@ -101,7 +101,7 @@ index 020bacb..126ec19 100644 /** * i40e_vc_config_queues_msg * @vf: pointer to the VF info -@@ -4300,6 +4375,9 @@ int i40e_vc_process_vf_msg(struct i40e_pf *pf, s16 vf_id, u32 v_opcode, +@@ -4166,6 +4241,9 @@ int i40e_vc_process_vf_msg(struct i40e_pf *pf, s16 vf_id, u32 v_opcode, case VIRTCHNL_OP_REQUEST_QUEUES: ret = i40e_vc_request_queues_msg(vf, msg); break; @@ -112,17 +112,17 @@ index 020bacb..126ec19 100644 case VIRTCHNL_OP_ENABLE_CHANNELS: ret = i40e_vc_add_qch_msg(vf, msg); diff --git a/src/virtchnl.h b/src/virtchnl.h -index afde603..b9b38c0 100644 +index a22cc43..d3d9324 100644 --- a/src/virtchnl.h +++ b/src/virtchnl.h -@@ -124,6 +124,7 @@ enum virtchnl_ops { +@@ -128,6 +128,7 @@ enum virtchnl_ops { VIRTCHNL_OP_DISABLE_CHANNELS = 31, VIRTCHNL_OP_ADD_CLOUD_FILTER = 32, VIRTCHNL_OP_DEL_CLOUD_FILTER = 33, + VIRTCHNL_OP_GET_LINK_STAT = 0x101, - }; + /* These macros are used to generate compilation errors if a structure/union -- 1.8.3.1 diff --git a/kernel/kernel-modules/intel-i40e/files/i40e-add-more-debug-info-for-VFs-still-in-reset.patch b/kernel/kernel-modules/intel-i40e/files/i40e-add-more-debug-info-for-VFs-still-in-reset.patch index 530aada97..7f1fba6e6 100644 --- a/kernel/kernel-modules/intel-i40e/files/i40e-add-more-debug-info-for-VFs-still-in-reset.patch +++ b/kernel/kernel-modules/intel-i40e/files/i40e-add-more-debug-info-for-VFs-still-in-reset.patch @@ -1,10 +1,10 @@ -From d60e87567eb5418fbb848bf30f72d3d8bec3bad6 Mon Sep 17 00:00:00 2001 -Message-Id: -In-Reply-To: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com> -References: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com> +From 40b257ecf5d36abf14a4ef98fc2e44dba7100fea Mon Sep 17 00:00:00 2001 +Message-Id: <40b257ecf5d36abf14a4ef98fc2e44dba7100fea.1572295393.git.Jim.Somerville@windriver.com> +In-Reply-To: +References: From: Jim Somerville Date: Mon, 26 Mar 2018 11:03:47 -0400 -Subject: [PATCH 2/3] i40e add more debug info for VFs still in reset +Subject: [PATCH 2/2] i40e add more debug info for VFs still in reset Signed-off-by: Jim Somerville --- @@ -12,10 +12,21 @@ Signed-off-by: Jim Somerville 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/i40e_virtchnl_pf.c b/src/i40e_virtchnl_pf.c -index 126ec19..da29fc3 100644 +index 21b4606..dfb9568 100644 --- a/src/i40e_virtchnl_pf.c +++ b/src/i40e_virtchnl_pf.c -@@ -4650,8 +4650,8 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev, +@@ -4363,8 +4363,8 @@ static int i40e_set_vf_mac(struct i40e_vf *vf, struct i40e_vsi *vsi, + msleep(20); + } + if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { +- dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n", +- vf->vf_id); ++ dev_err(&pf->pdev->dev, "%s: VF %d still in reset. Try again.\n", ++ __func__, vf->vf_id); + ret = -EAGAIN; + goto error_param; + } +@@ -4522,8 +4522,8 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev, vf = &pf->vf[vf_id]; vsi = pf->vsi[vf->lan_vsi_idx]; if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { @@ -26,7 +37,7 @@ index 126ec19..da29fc3 100644 ret = -EAGAIN; goto error_pvid; } -@@ -4784,8 +4784,8 @@ int i40e_ndo_set_vf_bw(struct net_device *netdev, int vf_id, int max_tx_rate) +@@ -4678,8 +4678,8 @@ int i40e_ndo_set_vf_bw(struct net_device *netdev, int vf_id, int max_tx_rate) vf = &pf->vf[vf_id]; vsi = pf->vsi[vf->lan_vsi_idx]; if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { @@ -37,18 +48,7 @@ index 126ec19..da29fc3 100644 ret = -EAGAIN; goto error; } -@@ -4844,8 +4844,8 @@ int i40e_ndo_get_vf_config(struct net_device *netdev, - /* first vsi is always the LAN vsi */ - vsi = pf->vsi[vf->lan_vsi_idx]; - if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { -- dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n", -- vf_id); -+ dev_err(&pf->pdev->dev, "%s: VF %d still in reset. Try again.\n", -+ __func__, vf_id); - ret = -EAGAIN; - goto error_param; - } -@@ -4989,8 +4989,8 @@ int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable) +@@ -4881,8 +4881,8 @@ int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable) vf = &(pf->vf[vf_id]); if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { diff --git a/kernel/kernel-modules/intel-i40e/files/ndo_get_vf_config-poll-for-out-of-vf-reset.patch b/kernel/kernel-modules/intel-i40e/files/ndo_get_vf_config-poll-for-out-of-vf-reset.patch deleted file mode 100644 index e8b6ffb38..000000000 --- a/kernel/kernel-modules/intel-i40e/files/ndo_get_vf_config-poll-for-out-of-vf-reset.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 25b521f58b33bf070c0b31d077333c13c3ad25e8 Mon Sep 17 00:00:00 2001 -Message-Id: <25b521f58b33bf070c0b31d077333c13c3ad25e8.1528830095.git.Jim.Somerville@windriver.com> -In-Reply-To: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com> -References: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com> -From: Jim Somerville -Date: Mon, 2 Apr 2018 15:35:12 -0400 -Subject: [PATCH 3/3] ndo_get_vf_config poll for out of vf reset - -Same solution as 028daf80117376b22909becd9720daaefdfceff4 from the -net-next tree as supplied by Intel, but we apply it to -ndo_get_vf_config instead. - -Signed-off-by: Jim Somerville ---- - src/i40e_virtchnl_pf.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/src/i40e_virtchnl_pf.c b/src/i40e_virtchnl_pf.c -index da29fc3..d5935d6 100644 ---- a/src/i40e_virtchnl_pf.c -+++ b/src/i40e_virtchnl_pf.c -@@ -4829,6 +4829,7 @@ int i40e_ndo_get_vf_config(struct net_device *netdev, - struct i40e_pf *pf = vsi->back; - struct i40e_vf *vf; - int ret = 0; -+ u8 i; - - if (test_and_set_bit(__I40E_VIRTCHNL_OP_PENDING, pf->state)) { - dev_warn(&pf->pdev->dev, "Unable to configure VFs, other operation is pending.\n"); -@@ -4843,6 +4844,16 @@ int i40e_ndo_get_vf_config(struct net_device *netdev, - vf = &pf->vf[vf_id]; - /* first vsi is always the LAN vsi */ - vsi = pf->vsi[vf->lan_vsi_idx]; -+ -+ /* When the VF is resetting wait until it is done. -+ * It can take up to 200 milliseconds, -+ * but wait for up to 300 milliseconds to be safe. -+ */ -+ for (i = 0; i < 15; i++) { -+ if (test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) -+ break; -+ msleep(20); -+ } - if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { - dev_err(&pf->pdev->dev, "%s: VF %d still in reset. Try again.\n", - __func__, vf_id); --- -1.8.3.1 - diff --git a/kernel/kernel-modules/intel-i40evf/files/modules-load.conf b/kernel/kernel-modules/intel-i40evf/files/modules-load.conf deleted file mode 100644 index c647f0ef7..000000000 --- a/kernel/kernel-modules/intel-i40evf/files/modules-load.conf +++ /dev/null @@ -1 +0,0 @@ -i40evf diff --git a/kernel/kernel-modules/intel-i40evf/centos/build_srpm.data b/kernel/kernel-modules/intel-iavf/centos/build_srpm.data similarity index 53% rename from kernel/kernel-modules/intel-i40evf/centos/build_srpm.data rename to kernel/kernel-modules/intel-iavf/centos/build_srpm.data index ee17d7021..8833d2d6a 100644 --- a/kernel/kernel-modules/intel-i40evf/centos/build_srpm.data +++ b/kernel/kernel-modules/intel-iavf/centos/build_srpm.data @@ -1,4 +1,4 @@ COPY_LIST=" \ $PKG_BASE/files/* \ - $STX_BASE/downloads/i40evf-3.6.15.tar.gz" + $STX_BASE/downloads/iavf-3.7.61.20.tar.gz" TIS_PATCH_VER=1 diff --git a/kernel/kernel-modules/intel-i40evf/centos/i40evf-kmod.spec b/kernel/kernel-modules/intel-iavf/centos/iavf-kmod.spec similarity index 80% rename from kernel/kernel-modules/intel-i40evf/centos/i40evf-kmod.spec rename to kernel/kernel-modules/intel-iavf/centos/iavf-kmod.spec index c02915217..6a4a37726 100644 --- a/kernel/kernel-modules/intel-i40evf/centos/i40evf-kmod.spec +++ b/kernel/kernel-modules/intel-iavf/centos/iavf-kmod.spec @@ -5,10 +5,10 @@ %endif # Define the kmod package name here. -%define kmod_name i40evf +%define kmod_name iavf Name: %{kmod_name}-kmod%{?bt_ext} -Version: 3.6.15 +Version: 3.7.61.20 Release: 0%{?_tis_dist}.%{tis_patch_ver} Group: System Environment/Kernel License: GPLv2 @@ -25,52 +25,52 @@ Source11: modules-load.conf %define kversion %(rpm -q kernel%{?bt_ext}-devel | sort --version-sort | tail -1 | sed 's/kernel%{?bt_ext}-devel-//') -%package -n kmod-i40evf%{?bt_ext} -Summary: i40evf kernel module(s) +%package -n kmod-iavf%{?bt_ext} +Summary: iavf kernel module(s) Group: System Environment/Kernel %global _use_internal_dependency_generator 0 Provides: kernel-modules >= %{kversion} -Provides: i40evf-kmod = %{?epoch:%{epoch}:}%{version}-%{release} +Provides: iavf-kmod = %{?epoch:%{epoch}:}%{version}-%{release} Requires(post): /usr/sbin/depmod Requires(postun): /usr/sbin/depmod -%description -n kmod-i40evf%{?bt_ext} -This package provides the i40evf kernel module(s) built +%description -n kmod-iavf%{?bt_ext} +This package provides the iavf kernel module(s) built for the Linux kernel using the %{_target_cpu} family of processors. -%post -n kmod-i40evf%{?bt_ext} +%post -n kmod-iavf%{?bt_ext} echo "Working. This may take some time ..." if [ -e "/boot/System.map-%{kversion}" ]; then /usr/sbin/depmod -aeF "/boot/System.map-%{kversion}" "%{kversion}" > /dev/null || : fi -modules=( $(find /lib/modules/%{kversion}/extra/i40evf | grep '\.ko$') ) +modules=( $(find /lib/modules/%{kversion}/extra/iavf | grep '\.ko$') ) if [ -x "/sbin/weak-modules" ]; then printf '%s\n' "${modules[@]}" | /sbin/weak-modules --add-modules fi echo "Done." -%preun -n kmod-i40evf%{?bt_ext} -rpm -ql kmod-i40evf%{?bt_ext}-%{version}-%{release}.x86_64 | grep '\.ko$' > /var/run/rpm-kmod-i40evf%{?bt_ext}-modules +%preun -n kmod-iavf%{?bt_ext} +rpm -ql kmod-iavf%{?bt_ext}-%{version}-%{release}.x86_64 | grep '\.ko$' > /var/run/rpm-kmod-iavf%{?bt_ext}-modules -%postun -n kmod-i40evf%{?bt_ext} +%postun -n kmod-iavf%{?bt_ext} echo "Working. This may take some time ..." if [ -e "/boot/System.map-%{kversion}" ]; then /usr/sbin/depmod -aeF "/boot/System.map-%{kversion}" "%{kversion}" > /dev/null || : fi -modules=( $(cat /var/run/rpm-kmod-i40evf%{?bt_ext}-modules) ) -rm /var/run/rpm-kmod-i40evf%{?bt_ext}-modules +modules=( $(cat /var/run/rpm-kmod-iavf%{?bt_ext}-modules) ) +rm /var/run/rpm-kmod-iavf%{?bt_ext}-modules if [ -x "/sbin/weak-modules" ]; then printf '%s\n' "${modules[@]}" | /sbin/weak-modules --remove-modules fi echo "Done." -%files -n kmod-i40evf%{?bt_ext} +%files -n kmod-iavf%{?bt_ext} %defattr(644,root,root,755) /lib/modules/%{kversion}/ -%config(noreplace)/etc/depmod.d/kmod-i40evf.conf -%doc /usr/share/doc/kmod-i40evf-%{version}/ +%config(noreplace)/etc/depmod.d/kmod-iavf.conf +%doc /usr/share/doc/kmod-iavf-%{version}/ %doc /usr/share/man/man7/ -%{_sysconfdir}/modules-load.d/i40evf.conf +%{_sysconfdir}/modules-load.d/iavf.conf # Disable the building of the debug package(s). %define debug_package %{nil} @@ -102,7 +102,7 @@ popd >/dev/null %{__install} -d %{buildroot}%{_mandir}/man7/ %{__install} %{kmod_name}.7.gz %{buildroot}%{_mandir}/man7/ %{__install} -d %{buildroot}%{_sysconfdir}/modules-load.d -%{__install} -m 644 %{SOURCE11} %{buildroot}%{_sysconfdir}/modules-load.d/i40evf.conf +%{__install} -m 644 %{SOURCE11} %{buildroot}%{_sysconfdir}/modules-load.d/iavf.conf # Strip the modules(s). find %{buildroot} -type f -name \*.ko -exec %{__strip} --strip-debug \{\} \; diff --git a/kernel/kernel-modules/intel-i40evf/files/GPL-v2.0.txt b/kernel/kernel-modules/intel-iavf/files/GPL-v2.0.txt similarity index 100% rename from kernel/kernel-modules/intel-i40evf/files/GPL-v2.0.txt rename to kernel/kernel-modules/intel-iavf/files/GPL-v2.0.txt diff --git a/kernel/kernel-modules/intel-iavf/files/modules-load.conf b/kernel/kernel-modules/intel-iavf/files/modules-load.conf new file mode 100644 index 000000000..54c14c832 --- /dev/null +++ b/kernel/kernel-modules/intel-iavf/files/modules-load.conf @@ -0,0 +1 @@ +iavf