* [dpdk-dev] [PATCH] kni: fix build on RHEL6.5
@ 2014-12-11 5:27 Jincheng Miao
2014-12-16 15:21 ` Thomas Monjalon
0 siblings, 1 reply; 4+ messages in thread
From: Jincheng Miao @ 2014-12-11 5:27 UTC (permalink / raw)
To: dev
RHEL6.5 kernel is based on 2.6.32. But there are two changing
from 2.6.35:
1. socket struct is changed
It wrappered previous wait_queue_head_t of socket to
struct socket_wq. So for the kernel older than 2.6.35, we should
directly use socket->wait instead.
2. new function sk_sleep()
This function is implemented from 2.6.35 to obtain wait queue
from struct sock. This patch adds a macro in kni/compat.h
to be compatible with older kernels.
Patch is tested in RHEL6.5 and RHEL7.0 with:
CONFIG_RTE_LIBRTE_KNI=y
CONFIG_RTE_KNI_KO_DEBUG=y
CONFIG_RTE_KNI_VHOST=y
CONFIG_RTE_KNI_VHOST_MAX_CACHE_SIZE=1024
CONFIG_RTE_KNI_VHOST_VNET_HDR_EN=y
CONFIG_RTE_KNI_VHOST_DEBUG_RX=y
CONFIG_RTE_KNI_VHOST_DEBUG_TX=y
Signed-off-by: Jincheng Miao <jmiao@redhat.com>
---
lib/librte_eal/linuxapp/kni/compat.h | 6 ++++++
lib/librte_eal/linuxapp/kni/kni_vhost.c | 17 +++++++++++++++++
2 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/lib/librte_eal/linuxapp/kni/compat.h b/lib/librte_eal/linuxapp/kni/compat.h
index 0d87421..1313523 100644
--- a/lib/librte_eal/linuxapp/kni/compat.h
+++ b/lib/librte_eal/linuxapp/kni/compat.h
@@ -13,3 +13,9 @@
#define kstrtoul strict_strtoul
#endif /* < 2.6.39 */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
+
+#define sk_sleep(s) (s)->sk_sleep
+
+#endif /* < 2.6.35 */
diff --git a/lib/librte_eal/linuxapp/kni/kni_vhost.c b/lib/librte_eal/linuxapp/kni/kni_vhost.c
index c05c868..7141f83 100644
--- a/lib/librte_eal/linuxapp/kni/kni_vhost.c
+++ b/lib/librte_eal/linuxapp/kni/kni_vhost.c
@@ -33,6 +33,7 @@
#include <linux/if_tun.h>
#include <linux/version.h>
+#include "compat.h"
#include "kni_dev.h"
#include "kni_fifo.h"
@@ -215,10 +216,19 @@ kni_sock_poll(struct file *file, struct socket *sock, poll_table * wait)
return POLLERR;
kni = q->kni;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
KNI_DBG("start kni_poll on group %d, wq 0x%16llx\n",
kni->group_id, (uint64_t)sock->wq);
+#else
+ KNI_DBG("start kni_poll on group %d, wait at 0x%16llx\n",
+ kni->group_id, (uint64_t)&sock->wait);
+#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
poll_wait(file, &sock->wq->wait, wait);
+#else
+ poll_wait(file, &sock->wait, wait);
+#endif
if (kni_fifo_count(kni->rx_q) > 0)
mask |= POLLIN | POLLRDNORM;
@@ -681,10 +691,17 @@ kni_vhost_backend_init(struct kni_dev *kni)
kni->vq_status = BE_START;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
KNI_DBG("backend init sockfd=%d, sock->wq=0x%16llx,"
"sk->sk_wq=0x%16llx",
q->sockfd, (uint64_t)q->sock->wq,
(uint64_t)q->sk.sk_wq);
+#else
+ KNI_DBG("backend init sockfd=%d, sock->wait at 0x%16llx,"
+ "sk->sk_sleep=0x%16llx",
+ q->sockfd, (uint64_t)&q->sock->wait,
+ (uint64_t)q->sk.sk_sleep);
+#endif
return 0;
--
1.7.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dpdk-dev] [PATCH] kni: fix build on RHEL6.5
2014-12-11 5:27 [dpdk-dev] [PATCH] kni: fix build on RHEL6.5 Jincheng Miao
@ 2014-12-16 15:21 ` Thomas Monjalon
2014-12-17 3:26 ` Jincheng Miao
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Monjalon @ 2014-12-16 15:21 UTC (permalink / raw)
To: Jincheng Miao; +Cc: dev
2014-12-11 13:27, Jincheng Miao:
> RHEL6.5 kernel is based on 2.6.32. But there are two changing
> from 2.6.35:
> 1. socket struct is changed
> It wrappered previous wait_queue_head_t of socket to
> struct socket_wq. So for the kernel older than 2.6.35, we should
> directly use socket->wait instead.
>
> 2. new function sk_sleep()
> This function is implemented from 2.6.35 to obtain wait queue
> from struct sock. This patch adds a macro in kni/compat.h
> to be compatible with older kernels.
I don't understand the relation between RHEL-6.5 and the kernel 2.6.35.
The patch seems not related to RHEL at all.
Please start your explanations by describing what is the problem
you want to solve.
Thanks
--
Thomas
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dpdk-dev] [PATCH] kni: fix build on RHEL6.5
2014-12-16 15:21 ` Thomas Monjalon
@ 2014-12-17 3:26 ` Jincheng Miao
2014-12-17 23:39 ` Thomas Monjalon
0 siblings, 1 reply; 4+ messages in thread
From: Jincheng Miao @ 2014-12-17 3:26 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On 12/16/2014 11:21 PM, Thomas Monjalon wrote:
> 2014-12-11 13:27, Jincheng Miao:
>> RHEL6.5 kernel is based on 2.6.32. But there are two changing
>> from 2.6.35:
>> 1. socket struct is changed
>> It wrappered previous wait_queue_head_t of socket to
>> struct socket_wq. So for the kernel older than 2.6.35, we should
>> directly use socket->wait instead.
>>
>> 2. new function sk_sleep()
>> This function is implemented from 2.6.35 to obtain wait queue
>> from struct sock. This patch adds a macro in kni/compat.h
>> to be compatible with older kernels.
> I don't understand the relation between RHEL-6.5 and the kernel 2.6.35.
> The patch seems not related to RHEL at all.
> Please start your explanations by describing what is the problem
> you want to solve.
Hi Thomas,
This patch is working for resolving the problem I found on RHEL6.5:
http://dpdk.org/ml/archives/dev/2014-December/009827.html
Because the root cause is socket struct change from 2.6.35, so this
patch also fits for all kernels older than 2.6.35.
Sorry for the ambiguous description, I think the title should be:
"kni: more compatibility for kernel older than 2.6.35"
Regards,
Jincheng Miao
>
> Thanks
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dpdk-dev] [PATCH] kni: fix build on RHEL6.5
2014-12-17 3:26 ` Jincheng Miao
@ 2014-12-17 23:39 ` Thomas Monjalon
0 siblings, 0 replies; 4+ messages in thread
From: Thomas Monjalon @ 2014-12-17 23:39 UTC (permalink / raw)
To: Jincheng Miao; +Cc: dev
2014-12-17 11:26, Jincheng Miao:
> On 12/16/2014 11:21 PM, Thomas Monjalon wrote:
> > 2014-12-11 13:27, Jincheng Miao:
> >> RHEL6.5 kernel is based on 2.6.32. But there are two changing
> >> from 2.6.35:
> >> 1. socket struct is changed
> >> It wrappered previous wait_queue_head_t of socket to
> >> struct socket_wq. So for the kernel older than 2.6.35, we should
> >> directly use socket->wait instead.
> >>
> >> 2. new function sk_sleep()
> >> This function is implemented from 2.6.35 to obtain wait queue
> >> from struct sock. This patch adds a macro in kni/compat.h
> >> to be compatible with older kernels.
> > I don't understand the relation between RHEL-6.5 and the kernel 2.6.35.
> > The patch seems not related to RHEL at all.
> > Please start your explanations by describing what is the problem
> > you want to solve.
>
> Hi Thomas,
>
> This patch is working for resolving the problem I found on RHEL6.5:
> http://dpdk.org/ml/archives/dev/2014-December/009827.html
>
> Because the root cause is socket struct change from 2.6.35, so this
> patch also fits for all kernels older than 2.6.35.
>
> Sorry for the ambiguous description, I think the title should be:
> "kni: more compatibility for kernel older than 2.6.35"
Applied with title "kni: fix build with kernel < 2.6.35 and vhost debug enabled"
and error log.
Thanks
--
Thomas
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-12-17 23:40 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-11 5:27 [dpdk-dev] [PATCH] kni: fix build on RHEL6.5 Jincheng Miao
2014-12-16 15:21 ` Thomas Monjalon
2014-12-17 3:26 ` Jincheng Miao
2014-12-17 23:39 ` Thomas Monjalon
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).