summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Malanik <janx.malanik@intel.com>2017-11-21 12:05:43 -0800
committerRoss Brattain <ross.b.brattain@intel.com>2018-01-22 21:54:26 +0000
commit1fe31e2bc4ac789000f11c1f78b31b0b1fa60882 (patch)
tree847ac0162622bf08c9a1320cd824f78bc09a5a01
parent36f0563490a4ee8f5b30eb7fe51a62d3b55c5b32 (diff)
Enable iommu support in grub
JIRA: YARDSTICK-895 It's required for sriov standalone yardstick tests. This part of commit message will be deleted: This code will be enabled when https://gerrit.opnfv.org/gerrit/#/c/47957/ will be merged, because it requires host reboot. Change-Id: I0ec9cbf90a9d83d54e545fcf421b8baf206601a4 Signed-off-by: Jan Malanik <janx.malanik@intel.com> Signed-off-by: Malanik Jan <janx.malanik@intel.com>
-rw-r--r--ansible/roles/enable_iommu_on_boot/tasks/main.yml72
-rw-r--r--ansible/roles/enable_iommu_on_boot/tasks/manual_modify_grub.yml34
-rw-r--r--ansible/roles/enable_iommu_on_boot/vars/main.yml17
3 files changed, 123 insertions, 0 deletions
diff --git a/ansible/roles/enable_iommu_on_boot/tasks/main.yml b/ansible/roles/enable_iommu_on_boot/tasks/main.yml
new file mode 100644
index 000000000..1b98a50b1
--- /dev/null
+++ b/ansible/roles/enable_iommu_on_boot/tasks/main.yml
@@ -0,0 +1,72 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+---
+- name: Set iommu_boot_params for Intel
+ set_fact:
+ iommu_boot_params: ' intel_iommu=on iommu=pt'
+ when: hostvars[inventory_hostname]['ansible_system_vendor'] == "Intel Corporation"
+
+- name: Set iommu_boot_params for AMD
+ set_fact:
+ iommu_boot_params: ' amd_iommu=on iommu=pt'
+ when: hostvars[inventory_hostname]['ansible_system_vendor'] == "AuthenticAMD"
+
+- name: Set facts for this role
+ set_fact:
+ hugepages_help_string: ' # added by hugepages role'
+ iommu_help_string: ', added by iommu role'
+ hugepages_params: " default_hugepagesz=1G hugepagesz=1G hugepages=8"
+ iommu_original_kernel_params: 'GRUB_CMDLINE_LINUX="\$GRUB_CMDLINE_LINUX{{ hugepages_params }}'
+ iommu_enabled_kernel_params: '{{ iommu_original_kernel_params }}{{ iommu_boot_params }}"'
+ iommu_enabled_kernel_params_with_help: '{{ iommu_original_kernel_params }}{{ iommu_boot_params }}"{{ hugepages_help_string }}{{ iommu_help_string }}'
+
+- name: check if iommu is set by this role in /etc/default/grub
+ lineinfile:
+ path: /etc/default/grub
+ line: '{{ iommu_enabled_kernel_params_with_help }}'
+ #changed_when: no
+ check_mode: yes
+ register: is_mine_iommu_etc_grub
+ ignore_errors: True
+
+- name: check if iommu is set by someone else
+ command: "grep -o 'iommu' /etc/default/grub"
+ register: is_iommu
+ ignore_errors: True
+
+- fail:
+ msg: "Iommu already set by someone else"
+ when: is_mine_iommu_etc_grub.changed == false and is_iommu.stdout != ""
+
+- name: 'Configure iommu in /etc/default/grub'
+# and /boot/grub/grub.cfg(when: ansible_distribution == "Ubuntu")'
+ lineinfile:
+ path: /etc/default/grub
+ regexp: '({{ iommu_original_kernel_params }})"{{ hugepages_help_string }}'
+ line: '\1{{ iommu_boot_params }}"{{ hugepages_help_string }}{{ iommu_help_string }}'
+ backrefs: yes
+ when: is_mine_iommu_etc_grub.changed == true
+
+- name: find boot grub.cfg
+ find:
+ paths: /boot
+ file_type: file
+ patterns: 'grub*.cfg'
+ recurse: yes
+ register: grub_files
+
+- include: manual_modify_grub.yml
+ # only tested on Ubuntu, kernel line is probably different on other distros
+ with_items: "{{ grub_files.files }}"
+ when: ansible_distribution == "Ubuntu"
diff --git a/ansible/roles/enable_iommu_on_boot/tasks/manual_modify_grub.yml b/ansible/roles/enable_iommu_on_boot/tasks/manual_modify_grub.yml
new file mode 100644
index 000000000..6760c3f9d
--- /dev/null
+++ b/ansible/roles/enable_iommu_on_boot/tasks/manual_modify_grub.yml
@@ -0,0 +1,34 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+---
+
+
+- name: check if iommu is set by this role in /boot grub.cfg files
+ lineinfile:
+ path: "{{ item.path }}"
+ regexp: '{{ hugepages_params }}{{ iommu_boot_params }}'
+ line: ''
+ #changed_when: no
+ check_mode: yes
+ register: is_mine_iommu_boot_grub
+ ignore_errors: True
+
+- name: added iommu to grub manually because we can't run update-grub in chroot
+ replace:
+ path: "{{ item.path }}"
+ regexp: '(.*linux\s+/boot/vmlinuz.*)$'
+ replace: '\1{{ iommu_boot_params }}'
+ when: is_mine_iommu_boot_grub.msg != "line replaced"
+
+- debug: var=ansible_kernel
diff --git a/ansible/roles/enable_iommu_on_boot/vars/main.yml b/ansible/roles/enable_iommu_on_boot/vars/main.yml
new file mode 100644
index 000000000..1b642dcb5
--- /dev/null
+++ b/ansible/roles/enable_iommu_on_boot/vars/main.yml
@@ -0,0 +1,17 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+---
+update_grub:
+ Debian: "update-grub2"
+ RedHat: "grub2-mkconfig -o /boot/grub2/grub.cfg"