From: Stephen Hemminger <stephen@networkplumber.org>
To: Thomas Monjalon <thomas.monjalon@6wind.com>,
Yerden Zhumabekov <e_zhumabekov@sts.kz>
Cc: dev@dpdk.org
Subject: [dpdk-dev] [PATCH 1/2] igb_uio: fix compability on old kernel
Date: Fri, 25 Jul 2014 10:36:27 -0700 [thread overview]
Message-ID: <20140725103627.4ca989b7@haswell.linuxnetplumber.net> (raw)
Add more compatibility wrappers, and split out all the wrapper
code to a separate file. Builds on Debian Squeeze (2.6.32) which
is oldest version of kernel current DPDK supports.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/librte_eal/linuxapp/igb_uio/compat.h | 103 ++++++++++++++++++++++++++++++
lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 81 -----------------------
2 files changed, 104 insertions(+), 80 deletions(-)
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ b/lib/librte_eal/linuxapp/igb_uio/compat.h 2014-07-25 10:29:58.664127988 -0700
@@ -0,0 +1,103 @@
+/*
+ * Minimal wrappers to allow compiling igb_uio on older kernels.
+ */
+
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
+#define pci_cfg_access_lock pci_block_user_cfg_access
+#define pci_cfg_access_unlock pci_unblock_user_cfg_access
+#endif
+
+#ifndef PCI_MSIX_ENTRY_SIZE
+#define PCI_MSIX_ENTRY_SIZE 16
+#define PCI_MSIX_ENTRY_LOWER_ADDR 0
+#define PCI_MSIX_ENTRY_UPPER_ADDR 4
+#define PCI_MSIX_ENTRY_DATA 8
+#define PCI_MSIX_ENTRY_VECTOR_CTRL 12
+#define PCI_MSIX_ENTRY_CTRL_MASKBIT 1
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 34)
+static int pci_num_vf(struct pci_dev *dev)
+{
+ struct iov {
+ int pos;
+ int nres;
+ u32 cap;
+ u16 ctrl;
+ u16 total;
+ u16 initial;
+ u16 nr_virtfn;
+ } *iov = (struct iov *)dev->sriov;
+
+ if (!dev->is_physfn)
+ return 0;
+
+ return iov->nr_virtfn;
+}
+#endif
+
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
+
+/* Check if INTX works to control irq's.
+ * Set's INTX_DISABLE flag and reads it back
+ */
+static bool pci_intx_mask_supported(struct pci_dev *pdev)
+{
+ bool mask_supported = false;
+ uint16_t orig, new;
+
+ pci_block_user_cfg_access(pdev);
+ pci_read_config_word(pdev, PCI_COMMAND, &orig);
+ pci_write_config_word(pdev, PCI_COMMAND,
+ orig ^ PCI_COMMAND_INTX_DISABLE);
+ pci_read_config_word(pdev, PCI_COMMAND, &new);
+
+ if ((new ^ orig) & ~PCI_COMMAND_INTX_DISABLE) {
+ dev_err(&pdev->dev, "Command register changed from "
+ "0x%x to 0x%x: driver or hardware bug?\n", orig, new);
+ } else if ((new ^ orig) & PCI_COMMAND_INTX_DISABLE) {
+ mask_supported = true;
+ pci_write_config_word(pdev, PCI_COMMAND, orig);
+ }
+ pci_unblock_user_cfg_access(pdev);
+
+ return mask_supported;
+}
+
+static bool pci_check_and_mask_intx(struct pci_dev *pdev)
+{
+ bool pending;
+ uint32_t status;
+
+ pci_block_user_cfg_access(pdev);
+ pci_read_config_dword(pdev, PCI_COMMAND, &status);
+
+ /* interrupt is not ours, goes to out */
+ pending = (((status >> 16) & PCI_STATUS_INTERRUPT) != 0);
+ if (pending) {
+ uint16_t old, new;
+
+ old = status;
+ if (status != 0)
+ new = old & (~PCI_COMMAND_INTX_DISABLE);
+ else
+ new = old | PCI_COMMAND_INTX_DISABLE;
+
+ if (old != new)
+ pci_write_config_word(pdev, PCI_COMMAND, new);
+ }
+ pci_unblock_user_cfg_access(pdev);
+
+ return pending;
+}
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 37)
+/* Compatability wrapper for new kernel API for IRQ */
+#define irq_data irq_desc
+#define irq_get_irq_data(irq) irq_to_desc(irq)
+#define irq_data_get_msi(data) get_irq_desc_msi(data)
+#endif
+
--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c 2014-07-25 10:29:58.668128002 -0700
+++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c 2014-07-25 10:29:58.664127988 -0700
@@ -37,10 +37,7 @@
#endif
#include <rte_pci_dev_features.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
-#define pci_cfg_access_lock pci_block_user_cfg_access
-#define pci_cfg_access_unlock pci_unblock_user_cfg_access
-#endif
+#include "compat.h"
#ifdef RTE_PCI_CONFIG
#define PCI_SYS_FILE_BUF_SIZE 10
@@ -70,26 +67,6 @@ igbuio_get_uio_pci_dev(struct uio_info *
}
/* sriov sysfs */
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 34)
-static int pci_num_vf(struct pci_dev *dev)
-{
- struct iov {
- int pos;
- int nres;
- u32 cap;
- u16 ctrl;
- u16 total;
- u16 initial;
- u16 nr_virtfn;
- } *iov = (struct iov *)dev->sriov;
-
- if (!dev->is_physfn)
- return 0;
-
- return iov->nr_virtfn;
-}
-#endif
-
static ssize_t
show_max_vfs(struct device *dev, struct device_attribute *attr,
char *buf)
@@ -228,62 +205,6 @@ static struct attribute *dev_attrs[] = {
static const struct attribute_group dev_attr_grp = {
.attrs = dev_attrs,
};
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
-/* Check if INTX works to control irq's.
- * Set's INTX_DISABLE flag and reads it back
- */
-static bool pci_intx_mask_supported(struct pci_dev *pdev)
-{
- bool mask_supported = false;
- uint16_t orig, new;
-
- pci_block_user_cfg_access(pdev);
- pci_read_config_word(pdev, PCI_COMMAND, &orig);
- pci_write_config_word(pdev, PCI_COMMAND,
- orig ^ PCI_COMMAND_INTX_DISABLE);
- pci_read_config_word(pdev, PCI_COMMAND, &new);
-
- if ((new ^ orig) & ~PCI_COMMAND_INTX_DISABLE) {
- dev_err(&pdev->dev, "Command register changed from "
- "0x%x to 0x%x: driver or hardware bug?\n", orig, new);
- } else if ((new ^ orig) & PCI_COMMAND_INTX_DISABLE) {
- mask_supported = true;
- pci_write_config_word(pdev, PCI_COMMAND, orig);
- }
- pci_unblock_user_cfg_access(pdev);
-
- return mask_supported;
-}
-
-static bool pci_check_and_mask_intx(struct pci_dev *pdev)
-{
- bool pending;
- uint32_t status;
-
- pci_block_user_cfg_access(pdev);
- pci_read_config_dword(pdev, PCI_COMMAND, &status);
-
- /* interrupt is not ours, goes to out */
- pending = (((status >> 16) & PCI_STATUS_INTERRUPT) != 0);
- if (pending) {
- uint16_t old, new;
-
- old = status;
- if (status != 0)
- new = old & (~PCI_COMMAND_INTX_DISABLE);
- else
- new = old | PCI_COMMAND_INTX_DISABLE;
-
- if (old != new)
- pci_write_config_word(pdev, PCI_COMMAND, new);
- }
- pci_unblock_user_cfg_access(pdev);
-
- return pending;
-}
-#endif
-
/*
* It masks the msix on/off of generating MSI-X messages.
*/
next reply other threads:[~2014-07-25 17:36 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-25 17:36 Stephen Hemminger [this message]
2014-07-25 17:37 ` [dpdk-dev] [PATCH 2/2] igb_uio: handle no IRQ fallback Stephen Hemminger
2014-08-01 13:11 ` Thomas Monjalon
2014-08-01 13:10 ` [dpdk-dev] [PATCH 1/2] igb_uio: fix compability on old kernel Thomas Monjalon
2014-08-22 17:29 ` Sanford, Robert
2014-08-22 18:09 ` Robert Sanford
2014-08-23 15:14 ` Stephen Hemminger
2014-08-26 16:08 ` Sanford, Robert
2014-09-01 11:15 ` Thomas Monjalon
2014-09-01 15:07 ` Guillaume Gaudonville
2014-09-01 14:55 ` Guillaume Gaudonville
2014-09-03 2:28 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140725103627.4ca989b7@haswell.linuxnetplumber.net \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=e_zhumabekov@sts.kz \
--cc=thomas.monjalon@6wind.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).