Message ID | CA+sbYW2ZJj2SdchU8M4dZz-KOGSxw2EPX-9oGJhMf3LSzMtA2A@mail.gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On Fri, Aug 18, 2017 at 03:16:12PM +0530, Selvin Xavier wrote: > Removing the "modify_port" hook is causing some issues with ib_cm module. > While adding a mad agent for the new device, ib_cm invokes > ib_modify_port which fails > with return value -ENOSYS. So the mad agent gets unregistered. This > break the connection > establishment. It is broken for bnxt_re also. > > The following patch helps. But it is like a workaround to solve the problem. > > diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c > index d5ca101..59911dd 100644 > --- a/drivers/infiniband/core/cm.c > +++ b/drivers/infiniband/core/cm.c > @@ -4189,7 +4189,7 @@ static void cm_add_one(struct ib_device *ib_device) > goto error2; > > ret = ib_modify_port(ib_device, i, 0, &port_modify); > - if (ret) > + if (ret && ret != -ENOSYS) > goto error3; > > count++; > > Or should we have the modify_port hook with some basic checks? I think that your proposal is right thing to do. The driver should properly return the status of its callbacks (-ENOSYS) and it is responsibility of the caller to decide what to do in such case. The dummy function (return 0) hides the fact that modify_port do nothing and it can be wrong for some callers. Thanks
On Fri, Aug 18, 2017 at 9:10 PM, Leon Romanovsky <leon@kernel.org> wrote: >> >> The following patch helps. But it is like a workaround to solve the problem. >> >> diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c >> index d5ca101..59911dd 100644 >> --- a/drivers/infiniband/core/cm.c >> +++ b/drivers/infiniband/core/cm.c >> @@ -4189,7 +4189,7 @@ static void cm_add_one(struct ib_device *ib_device) >> goto error2; >> >> ret = ib_modify_port(ib_device, i, 0, &port_modify); >> - if (ret) >> + if (ret && ret != -ENOSYS) >> goto error3; >> >> count++; >> >> Or should we have the modify_port hook with some basic checks? > > I think that your proposal is right thing to do. The driver should > properly return the status of its callbacks (-ENOSYS) and it is > responsibility of the caller to decide what to do in such case. > > The dummy function (return 0) hides the fact that modify_port do > nothing and it can be wrong for some callers. > I am bit confused. You support the proposal to have a modify_port with some basic check.. right? > Thanks -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Aug 21, 2017 at 10:09:10AM +0530, Selvin Xavier wrote: > On Fri, Aug 18, 2017 at 9:10 PM, Leon Romanovsky <leon@kernel.org> wrote: > > >> > >> The following patch helps. But it is like a workaround to solve the problem. > >> > >> diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c > >> index d5ca101..59911dd 100644 > >> --- a/drivers/infiniband/core/cm.c > >> +++ b/drivers/infiniband/core/cm.c > >> @@ -4189,7 +4189,7 @@ static void cm_add_one(struct ib_device *ib_device) > >> goto error2; > >> > >> ret = ib_modify_port(ib_device, i, 0, &port_modify); > >> - if (ret) > >> + if (ret && ret != -ENOSYS) > >> goto error3; > >> > >> count++; > >> > >> Or should we have the modify_port hook with some basic checks? > > > > I think that your proposal is right thing to do. The driver should > > properly return the status of its callbacks (-ENOSYS) and it is > > responsibility of the caller to decide what to do in such case. > > > > > The dummy function (return 0) hides the fact that modify_port do > > nothing and it can be wrong for some callers. > > > I am bit confused. You support the proposal to have a modify_port with > some basic check.. right? Sorry for not being clear, Yes, I fully support your suggestion to improve modify_port function. At least that common modify_port function should check the type of port and return success for RoCE (see mlx4_ib_modify_port), but need to check that mlx5_ib_modify_port won't break after that. Thanks > > Thanks > -- > To unsubscribe from this list: send the line "unsubscribe linux-rdma" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c index d5ca101..59911dd 100644 --- a/drivers/infiniband/core/cm.c +++ b/drivers/infiniband/core/cm.c @@ -4189,7 +4189,7 @@ static void cm_add_one(struct ib_device *ib_device) goto error2; ret = ib_modify_port(ib_device, i, 0, &port_modify); - if (ret) + if (ret && ret != -ENOSYS) goto error3; count++;