Message ID | 20170209092409.202832-1-salil.mehta@huawei.com |
---|---|
State | New |
Headers | show |
> -----Original Message----- > From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] > On Behalf Of Salil Mehta > Sent: Thursday, February 09, 2017 5:24 PM > To: davem@davemloft.net > Cc: salil.mehta@huawei.com; yisen.zhuang@huawei.com; > mehta.salil.lnk@gmail.com; netdev@vger.kernel.org; > linux-kernel@vger.kernel.org; linuxarm@huawei.com; Kejian Yan > Subject: [PATCH net] net: hns: Fix the device being used for dma mapping during > TX > > From: Kejian Yan <yankejian@huawei.com> > > This patch fixes the device being used to DMA map skb->data. > Erroneous device assignment causes the crash when SMMU is enabled. > This happens during TX since buffer gets DMA mapped with device > correspondign to net_device and gets unmapped using the device > related to DSAF. > > Signed-off-by: Kejian Yan <yankejian@huawei.com> > Reviewed-by: Yisen Zhuang <yisen.zhuang@huawei.com> > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > --- > drivers/net/ethernet/hisilicon/hns/hns_enet.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > index 672b646..2b52a12 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > @@ -305,7 +305,7 @@ int hns_nic_net_xmit_hw(struct net_device *ndev, > struct hns_nic_ring_data *ring_data) > { > struct hns_nic_priv *priv = netdev_priv(ndev); > - struct device *dev = priv->dev; > + struct device *dev = ring_to_dev(ring_data->ring); > struct hnae_ring *ring = ring_data->ring; struct device *dev = ring_to_dev(ring); ?????? > struct netdev_queue *dev_queue; > struct skb_frag_struct *frag; > -- > 1.7.9.5 >
> -----Original Message----- > From: YUAN Linyu [mailto:Linyu.Yuan@alcatel-sbell.com.cn] > Sent: Thursday, February 09, 2017 9:36 AM > To: Salil Mehta; davem@davemloft.net > Cc: Zhuangyuzeng (Yisen); mehta.salil.lnk@gmail.com; > netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Linuxarm; > Yankejian (Hackim Yim) > Subject: RE: [PATCH net] net: hns: Fix the device being used for dma > mapping during TX > > > > > -----Original Message----- > > From: netdev-owner@vger.kernel.org [mailto:netdev- > owner@vger.kernel.org] > > On Behalf Of Salil Mehta > > Sent: Thursday, February 09, 2017 5:24 PM > > To: davem@davemloft.net > > Cc: salil.mehta@huawei.com; yisen.zhuang@huawei.com; > > mehta.salil.lnk@gmail.com; netdev@vger.kernel.org; > > linux-kernel@vger.kernel.org; linuxarm@huawei.com; Kejian Yan > > Subject: [PATCH net] net: hns: Fix the device being used for dma > mapping during > > TX > > > > From: Kejian Yan <yankejian@huawei.com> > > > > This patch fixes the device being used to DMA map skb->data. > > Erroneous device assignment causes the crash when SMMU is enabled. > > This happens during TX since buffer gets DMA mapped with device > > correspondign to net_device and gets unmapped using the device > > related to DSAF. > > > > Signed-off-by: Kejian Yan <yankejian@huawei.com> > > Reviewed-by: Yisen Zhuang <yisen.zhuang@huawei.com> > > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > > --- > > drivers/net/ethernet/hisilicon/hns/hns_enet.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > index 672b646..2b52a12 100644 > > --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > @@ -305,7 +305,7 @@ int hns_nic_net_xmit_hw(struct net_device *ndev, > > struct hns_nic_ring_data *ring_data) > > { > > struct hns_nic_priv *priv = netdev_priv(ndev); > > - struct device *dev = priv->dev; > > + struct device *dev = ring_to_dev(ring_data->ring); > > struct hnae_ring *ring = ring_data->ring; > struct device *dev = ring_to_dev(ring); ?????? Yes, name of the macro is slight misnomer but this gets the dsaf device. Hope this answers your question? Thanks Salil > > struct netdev_queue *dev_queue; > > struct skb_frag_struct *frag; > > -- > > 1.7.9.5 > >
> -----Original Message----- > From: Salil Mehta > Sent: Thursday, February 09, 2017 9:48 AM > To: 'YUAN Linyu'; davem@davemloft.net > Cc: Zhuangyuzeng (Yisen); mehta.salil.lnk@gmail.com; > netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Linuxarm; > Yankejian (Hackim Yim) > Subject: RE: [PATCH net] net: hns: Fix the device being used for dma > mapping during TX > > > -----Original Message----- > > From: YUAN Linyu [mailto:Linyu.Yuan@alcatel-sbell.com.cn] > > Sent: Thursday, February 09, 2017 9:36 AM > > To: Salil Mehta; davem@davemloft.net > > Cc: Zhuangyuzeng (Yisen); mehta.salil.lnk@gmail.com; > > netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Linuxarm; > > Yankejian (Hackim Yim) > > Subject: RE: [PATCH net] net: hns: Fix the device being used for dma > > mapping during TX > > > > > > > > > -----Original Message----- > > > From: netdev-owner@vger.kernel.org [mailto:netdev- > > owner@vger.kernel.org] > > > On Behalf Of Salil Mehta > > > Sent: Thursday, February 09, 2017 5:24 PM > > > To: davem@davemloft.net > > > Cc: salil.mehta@huawei.com; yisen.zhuang@huawei.com; > > > mehta.salil.lnk@gmail.com; netdev@vger.kernel.org; > > > linux-kernel@vger.kernel.org; linuxarm@huawei.com; Kejian Yan > > > Subject: [PATCH net] net: hns: Fix the device being used for dma > > mapping during > > > TX > > > > > > From: Kejian Yan <yankejian@huawei.com> > > > > > > This patch fixes the device being used to DMA map skb->data. > > > Erroneous device assignment causes the crash when SMMU is enabled. > > > This happens during TX since buffer gets DMA mapped with device > > > correspondign to net_device and gets unmapped using the device > > > related to DSAF. > > > > > > Signed-off-by: Kejian Yan <yankejian@huawei.com> > > > Reviewed-by: Yisen Zhuang <yisen.zhuang@huawei.com> > > > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > > > --- > > > drivers/net/ethernet/hisilicon/hns/hns_enet.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > > b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > > index 672b646..2b52a12 100644 > > > --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > > +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > > @@ -305,7 +305,7 @@ int hns_nic_net_xmit_hw(struct net_device > *ndev, > > > struct hns_nic_ring_data *ring_data) > > > { > > > struct hns_nic_priv *priv = netdev_priv(ndev); > > > - struct device *dev = priv->dev; > > > + struct device *dev = ring_to_dev(ring_data->ring); > > > struct hnae_ring *ring = ring_data->ring; > > struct device *dev = ring_to_dev(ring); ?????? > Yes, name of the macro is slight misnomer but this gets the dsaf > device. > Hope this answers your question? I realized this lately, I think you meant below: struct hnae_ring *ring = ring_data->ring; struct device *dev = ring_to_dev(ring); I will correct this and float a patch. Thanks! Best regards Salil > > Thanks > Salil > > > struct netdev_queue *dev_queue; > > > struct skb_frag_struct *frag; > > > -- > > > 1.7.9.5 > > >
> -----Original Message----- > From: Lino Sanfilippo [mailto:LinoSanfilippo@gmx.de] > Sent: Thursday, February 09, 2017 10:25 AM > To: Salil Mehta > Cc: davem@davemloft.net; Salil Mehta; Zhuangyuzeng (Yisen); > mehta.salil.lnk@gmail.com; netdev@vger.kernel.org; linux- > kernel@vger.kernel.org; Linuxarm; Yankejian (Hackim Yim) > Subject: Re: [PATCH net] net: hns: Fix the device being used for dma > mapping during TX > > Hi, > > > From: Kejian Yan <yankejian@huawei.com> > > > > This patch fixes the device being used to DMA map skb->data. > > Erroneous device assignment causes the crash when SMMU is enabled. > > This happens during TX since buffer gets DMA mapped with device > > correspondign to net_device and gets unmapped using the device > > related to DSAF. > > > > Signed-off-by: Kejian Yan <yankejian@huawei.com> > > Reviewed-by: Yisen Zhuang <yisen.zhuang@huawei.com> > > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > > --- > > drivers/net/ethernet/hisilicon/hns/hns_enet.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > index 672b646..2b52a12 100644 > > --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > > @@ -305,7 +305,7 @@ int hns_nic_net_xmit_hw(struct net_device *ndev, > > struct hns_nic_ring_data *ring_data) > > { > > struct hns_nic_priv *priv = netdev_priv(ndev); > > - struct device *dev = priv->dev; > > + struct device *dev = ring_to_dev(ring_data->ring); > > struct hnae_ring *ring = ring_data->ring; > > struct netdev_queue *dev_queue; > > struct skb_frag_struct *frag; > > -- > > I would say it should be the other way around: Use priv->dev for > mapping and > unmapping instead of ring_to_dev(). Yes, you got it right. Ideally, it should be per-port and for legacy reasons we have it this way. In the current design, we have SMMU node per-dsaf and I guess we will not land in the right dma-ops if we use per-netdev platform-device/device right now. Best regards Salil > > Regards, > Lino
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c index 672b646..2b52a12 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c @@ -305,7 +305,7 @@ int hns_nic_net_xmit_hw(struct net_device *ndev, struct hns_nic_ring_data *ring_data) { struct hns_nic_priv *priv = netdev_priv(ndev); - struct device *dev = priv->dev; + struct device *dev = ring_to_dev(ring_data->ring); struct hnae_ring *ring = ring_data->ring; struct netdev_queue *dev_queue; struct skb_frag_struct *frag;