[ofa-general] [PATCH] libibumad: support for new pkey enabled user_mad API

Sasha Khapyorsky sashak at voltaire.com
Thu Nov 1 04:31:25 PDT 2007


On 12:38 Thu 01 Nov     , Sasha Khapyorsky wrote:
> On 11:19 Thu 01 Nov     , Yevgeny Kliteynik wrote:
> > >  +	if (abi_version > 5)
> > > +		new_user_mad_api = 1;
> > > +	else {
> > > +		int ret = ioctl(fd, IB_USER_MAD_ENABLE_PKEY, NULL);
> > >   
> >  I got (ret = -1) and (errno = 515)
> 
> It is ENOIOCTLCMD, and it is correct value when unlocked_ioctl() method
> is not defined by driver. So I think we need to handle this one too.
> 
> > > +		if (ret == 0)
> > > +			new_user_mad_api = 1;
> > > +		else if (ret < 0 && errno == EINVAL)
> > > +			new_user_mad_api = 0;
> > >   +		else {
> > >   
> >  So eventually I got here.
> >  I have kernel 2.6.9-42.
> 
> I will send update soon.

For me it looks that best we can do is to just remove any errno checks -
as below.

Sasha


>From fe395b0c3de4dbbe69c31b9d97818c81ac76a99c Mon Sep 17 00:00:00 2001
From: Sasha Khapyorsky <sashak at voltaire.com>
Date: Thu, 1 Nov 2007 13:52:06 +0200
Subject: [PATCH] libibumad: don't check errno when pkey enabling API ioctl() fails

With some old kernel ioctl() returns 515 (ENOIOCTLCMD), which is not
defined in userspace at all. OTOH the usage of this ioctl() is hidden
inside libibumad library where failure scenarios are limited - it is
likely enough to just refer return status and don't analyze errno value
at all.

Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
 libibumad/src/umad.c |   16 +++-------------
 1 files changed, 3 insertions(+), 13 deletions(-)

diff --git a/libibumad/src/umad.c b/libibumad/src/umad.c
index b63f220..1012695 100644
--- a/libibumad/src/umad.c
+++ b/libibumad/src/umad.c
@@ -597,20 +597,10 @@ umad_open_port(char *ca_name, int portnum)
 		return -EIO;
 	}
 
-	if (abi_version > 5)
+	if (abi_version > 5 || !ioctl(fd, IB_USER_MAD_ENABLE_PKEY, NULL))
 		new_user_mad_api = 1;
-	else {
-		int ret = ioctl(fd, IB_USER_MAD_ENABLE_PKEY, NULL);
-		if (ret == 0)
-			new_user_mad_api = 1;
-		else if (ret < 0 && errno == EINVAL)
-			new_user_mad_api = 0;
-		else {
-			close(fd);
-			IBWARN("cannot detect is user_mad P_Key enabled API supported.");
-			return ret;
-		}
-	}
+	else
+		new_user_mad_api = 0;
 
 	DEBUG("opened %s fd %d portid %d", dev_file, fd, umad_id);
 	return fd;
-- 
1.5.3.rc2.29.gc4640f




More information about the general mailing list