.. _sys_req:

System Requirements
===================

Xilinx Accelerator Card
-----------------------

1. VCU118
2. Versal CPM4 XCVC1902
3. Versal CPM5 XCVP1202

Host Platform
-------------

x86_64 host system with at least one Gen 3x16 PCIe slot and minimum 64GB RAM
on same CPU node for 2K queues. For accomodating 4K queues in Versal CPM5 ~256GB RAM would be required.
For VM testing, host system must support virtualization and it must be enabled in the BIOS.


Host System Configuration
-------------------------

Linux QDMA Driver release is verified on following Host system configuration for PF and VF functionality

+--------------------------+-------------------------------------------------------------+
| Host System              | Configuration Details                                       |
+==========================+=============================================================+
| Operating System         | Ubuntu 24.04 LTS                                            |
+--------------------------+-------------------------------------------------------------+
| Linux Kernel             | 6.8.0-36-generic                                            |
+--------------------------+-------------------------------------------------------------+
| RAM                      | 64GB on local NUMA node                                     |
+--------------------------+-------------------------------------------------------------+
| Hypervisor               | KVM                                                         |
+--------------------------+-------------------------------------------------------------+
| Qemu Version             | QEMU emulator version 8.2.2 (Debian 1:8.2.2+ds-0ubuntu1.2)  |
+--------------------------+-------------------------------------------------------------+

**Notes**: 

- When assigning the 2048 queues to PFs users shall make sure the host system configuration meets the requirement given above. If users want to enable iommu(iommu=on), make sure suffiecient memory available to support the 2048 queues. If the memory is not sufficient, ``dma_alloc_coherent`` kernel call may fail and driver might not work.

- Versal CPM5 design supports 4096 queues. Users shall make sure the host system configuration meets the memory requirements to accomodate 4096 queues.

- QEMU is a hosted virtual machine monitor which emulates the machine's processor through dynamic binary translation and provides a set of different hardware and device models for the machine, enabling it to run a variety of guest operating systems.This is used to emulate the virtual machines and enables the users to attach virtual functions to virtual machines.

Guest System Configuration
--------------------------

Linux QDMA VF Driver release is verified on following Guest system configuration for VF functionality

========================= ==================================
Guest System(VM)          Configuration Details             
========================= ==================================
Operating System          Ubuntu 24.04 LTS
Linux Kernel              6.8.0-36-generic
RAM 			          32GB
Cores              	      32
========================= ==================================


Supported Linux Distributions
-----------------------------

Linux QDMA Driver is supported on the following linux distributions


+-------------------------+---------------------+----------------+
| Linux Distribution      | Version             | Kernel Version |
+=========================+=====================+================+
| CentOS                  |7.6-1810 (RHEL 7.6)  |3.10.0-957      |
|                         +---------------------+----------------+
|                         |7.7-1908 (RHEL 7.7)  |3.10.0-1062     |
|                         +---------------------+----------------+
|                         |8.1-1911 (RHEL 8.1)  |4.18.0-348      |
|                         +---------------------+----------------+
|                         |8.3-2011 (RHEL 8.3)  |4.18.0-348      |
|                         +---------------------+----------------+
|                         |9                    |5.14.0-283      |
|                         +---------------------+----------------+
|                         |Stream-9             |5.14.0-452      |
+-------------------------+---------------------+----------------+
|Fedora                   |30                   |5.0.9-301       |
|                         +---------------------+----------------+
|                         |31                   |5.3.7-301       |
|                         +---------------------+----------------+
|                         |33                   |5.8.15-301      |
|                         +---------------------+----------------+
|                         |36                   |5.17.5-300      |
|                         +---------------------+----------------+
|                         |37                   |6.2.8-200       |
|                         +---------------------+----------------+
|                         |40                   |6.8.10-300      |
+-------------------------+---------------------+----------------+
|Ubuntu                   |16.04                |4.15.0-101      |
|                         +---------------------+----------------+
|                         |18.04                |4.15.0-20       |
|                         +---------------------+----------------+
|                         |20.04                |5.4.0-31        |
|                         +---------------------+----------------+
|                         |22.04                |5.15.0-41       |
|                         +---------------------+----------------+
|                         |24.04                |6.8.0-36        |
+-------------------------+---------------------+----------------+
|AlmaLinux                |9.4                  |5.14.0-503      |
+-------------------------+---------------------+----------------+


Supported Kernel Versions
-------------------------

Linux QDMA Driver is verified on following kernel.org Linux kernel versions

+-------------------------+-----------------+
|Kernel.org               | Kernel Version  |
+=========================+=================+
|                         | 3.16.66         |
|                         +-----------------+
|                         | 4.4.196         |
|                         +-----------------+
|                         | 4.9.174         |
|                         +-----------------+
|                         | 4.14.117        |
|                         +-----------------+
|                         | 5.4             |
|                         +-----------------+
|                         | 5.13            |
|                         +-----------------+
|                         | 5.17            |
|                         +-----------------+
|                         | 6.5             |
|                         +-----------------+
|                         | 6.8             |
+-------------------------+-----------------+

The following kernel functions shall be included in the OS kernel version being used. Make sure that these functions are included in the kernel.

- Timer Functions 
- PCIe Functions 
- Kernel Memory functions
- Memory and GFP Functions

Notes about GCC versions
-------------------------

**Issue#1**: For Kernel Images > 4.9.199 with CONFIG_STACK_VALIDATION=y and GCC version > 8 compiler throws spurious warnings
related to sibling calls and frame pointer save/setup.

**Solution#1**: To suppress these warnings
enable the OBJECT_FILES_NON_STANDARD option in linux/drv/Makefile

**Issue#2**: Compilation failure on GCC 9 

**Solution#2**: GCC 9 release adds the -Wmissing-attributes warnings (enabled by -Wall), which trigger for all the initialization/cleanup_module
aliases in the kernel (defined by the module_init/exit macros), ending up being very noisy.

These aliases point to the __init/__exit functions of a module, which are defined as __cold (among other attributes). However, if
the aliases themselves do not have the __cold attribute, this causes compilation failure for driver if used with Kernel Versions < 3.16.66 mentioned
in the supported kernels list above or if the Kernel Source doesn't have the fix for this which are there in the long term releases.


