From: Stephen Hemminger <stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org>
To: Thomas Monjalon
<thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>,
Yerden Zhumabekov <e_zhumabekov-8EHiFRVJVgQ@public.gmane.org>
Cc: dev-VfR2kkLFssw@public.gmane.org
Subject: [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-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.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]
[not found] ` <20140725103627.4ca989b7-a7a0dvSY7KrRI77zikRAJc56i+j3xesD0e7PPNI6Mm0@public.gmane.org>
2014-07-25 17:37 ` [PATCH 2/2] igb_uio: handle no IRQ fallback Stephen Hemminger
[not found] ` <20140725103754.5fbec494-a7a0dvSY7KrRI77zikRAJc56i+j3xesD0e7PPNI6Mm0@public.gmane.org>
2014-08-01 13:11 ` Thomas Monjalon
2014-08-01 13:10 ` [PATCH 1/2] igb_uio: fix compability on old kernel Thomas Monjalon
2014-08-22 17:29 ` Sanford, Robert
[not found] ` <D01CF3B4.28B5%rsanford-JqFfY2XvxFXQT0dZR+AlfA@public.gmane.org>
2014-08-22 18:09 ` Robert Sanford
[not found] ` <CA+cr1coJs9yokaDT1ya=5ChSWuSYWiF4TqmAhpcP0qLZKC4odA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-08-23 15:14 ` Stephen Hemminger
[not found] ` <20140823081453.6e3ae5d7-CA4OZQ/Yy2Lykuyl+CZolw@public.gmane.org>
2014-08-26 16:08 ` Sanford, Robert
[not found] ` <D0222750.29B5%rsanford-JqFfY2XvxFXQT0dZR+AlfA@public.gmane.org>
2014-09-01 11:15 ` Thomas Monjalon
2014-09-01 15:07 ` Guillaume Gaudonville
2014-09-01 14:55 ` Guillaume Gaudonville
[not found] ` <540488DD.3030304-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
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-otpzqlsittunbdjkjebofr2eb7je58tq@public.gmane.org \
--cc=dev-VfR2kkLFssw@public.gmane.org \
--cc=e_zhumabekov-8EHiFRVJVgQ@public.gmane.org \
--cc=thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.