diff mbox series

[net-next] hinic: fix a bug in set rx mode

Message ID 20190527221005.10073-1-xuechaojing@huawei.com
State Accepted
Delegated to: David Miller
Headers show
Series [net-next] hinic: fix a bug in set rx mode | expand

Commit Message

Xue Chaojing May 27, 2019, 10:10 p.m. UTC
in set_rx_mode, __dev_mc_sync and netdev_for_each_mc_addr will
repeatedly set the multicast mac address. so we delete this loop.

Signed-off-by: Xue Chaojing <xuechaojing@huawei.com>
---
 drivers/net/ethernet/huawei/hinic/hinic_main.c | 4 ----
 1 file changed, 4 deletions(-)

Comments

David Miller May 29, 2019, 12:24 a.m. UTC | #1
From: Xue Chaojing <xuechaojing@huawei.com>
Date: Mon, 27 May 2019 22:10:05 +0000

> in set_rx_mode, __dev_mc_sync and netdev_for_each_mc_addr will
> repeatedly set the multicast mac address. so we delete this loop.
> 
> Signed-off-by: Xue Chaojing <xuechaojing@huawei.com>

Applied.
dann frazier June 11, 2019, 12:45 a.m. UTC | #2
On Mon, May 27, 2019 at 10:10:05PM +0000, Xue Chaojing wrote:
> in set_rx_mode, __dev_mc_sync and netdev_for_each_mc_addr will
> repeatedly set the multicast mac address. so we delete this loop.

fyi, I'm told this fixes the following Oops (in case it makes sense to
queue it for stable):

[ 642.914581] Internal error: Oops: 96000005 [#1] SMP
[ 642.919444] Modules linked in: hinic(-) 8021q garp mrp stp llc ses enclosure sg nls_utf8 isofs vfat fat loop ipmi_ssif crc32_ce crct10dif_ce ghash_c e sha2_ce sha256_arm64 sha1_ce sbsa_gwdt hns_roce_hw_v2 hns_roce ib_core ipmi_si ipmi_devintf ipmi_msghandler xfs libcrc32c marvell hibmc_drm drm_kms_h elper syscopyarea sysfillrect sysimgblt fb_sys_fops ttm qla2xxx ixgbe drm mpt3sas nvme_fc hns3 hisi_sas_v3_hw igb nvme_fabrics hisi_sas_main hclge mdio scsi_transport_fc nvme libsas hnae3 raid_class nvme_core scsi_transport_sas i2c_algo_bit gpio_dwapb gpio_generic dm_mirror dm_region_hash dm_log dm_mo d [last unloaded: hinic]
[ 642.974177] CPU: 4 PID: 5339 Comm: kworker/u256:1 Kdump: loaded Not tainted 4.18.0-74.el8.aarch64 #1
[ 642.983293] Hardware name: Huawei TaiShan 2280 V2/BC82AMDA, BIOS TA BIOS 2280-A CS V2.16.01 03/16/2019
[ 642.992591] Workqueue: hinic_dev set_rx_mode [hinic]
[ 642.997542] pstate: 00c00009 (nzcv daif +PAN +UAO)
[ 643.002320] pc : add_mac_addr+0xa4/0x100 [hinic]
[ 643.006924] lr : set_rx_mode+0x88/0xc0 [hinic]
[ 643.011353] sp : ffff00003228fd40
[ 643.014653] x29: ffff00003228fd40 x28: 0000000000000000
[ 643.019952] x27: ffffb955c362ff38 x26: ffff27ccd2cc3110
[ 643.025250] x25: 0000000000000000 x24: ffffb955025c6b08
[ 643.030547] x23: ffffb955025c6000 x22: 0000000000000010
[ 643.035845] x21: ffff27cc56040488 x20: ffffb955025c6ac0
[ 643.041142] x19: 0000000000000000 x18: 0000000000000010
[ 643.046440] x17: 0000ffffb7135830 x16: ffff27ccd2259bb8
[ 643.051737] x15: ffffffffffffffff x14: 2030302031302039
[ 643.057035] x13: 33203d2072646461 x12: 2063616d20746573
[ 643.062332] x11: 203a296465726574 x10: 0000000000000d10
[ 643.067630] x9 : ffff00003228f9f0 x8 : ffffb95501756170
[ 643.072927] x7 : 198c000940300814 x6 : ffff00003228fd08
[ 643.078225] x5 : 0000000000000000 x4 : 0000000000000000
[ 643.083523] x3 : 0000000000000000 x2 : 0000000000000001
[ 643.088820] x1 : 0000000000000010 x0 : 00000000000000e3
[ 643.094118] Process kworker/u256:1 (pid: 5339, stack limit = 0x0000000023b4f182)
[ 643.101498] Call trace:
[ 643.103932] add_mac_addr+0xa4/0x100 [hinic]
[ 643.108189] set_rx_mode+0x88/0xc0 [hinic]
[ 643.112272] process_one_work+0x1ac/0x3e0
[ 643.116268] worker_thread+0x44/0x448
[ 643.119916] kthread+0x130/0x138
[ 643.123130] ret_from_fork+0x10/0x18
[ 643.126692] Code: a9425bf5 a94363f7 a8c47bfd d65f03c0 (394016c7)
[ 643.132828] SMP: stopping secondary CPUs
[ 643.139859] Starting crashdump kernel...
[ 643.143771] Bye!

  -dann

> Signed-off-by: Xue Chaojing <xuechaojing@huawei.com>
> ---
>  drivers/net/ethernet/huawei/hinic/hinic_main.c | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c
> index e64bc664f687..cfd3f4232cac 100644
> --- a/drivers/net/ethernet/huawei/hinic/hinic_main.c
> +++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c
> @@ -724,7 +724,6 @@ static void set_rx_mode(struct work_struct *work)
>  {
>  	struct hinic_rx_mode_work *rx_mode_work = work_to_rx_mode_work(work);
>  	struct hinic_dev *nic_dev = rx_mode_work_to_nic_dev(rx_mode_work);
> -	struct netdev_hw_addr *ha;
>  
>  	netif_info(nic_dev, drv, nic_dev->netdev, "set rx mode work\n");
>  
> @@ -732,9 +731,6 @@ static void set_rx_mode(struct work_struct *work)
>  
>  	__dev_uc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr);
>  	__dev_mc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr);
> -
> -	netdev_for_each_mc_addr(ha, nic_dev->netdev)
> -		add_mac_addr(nic_dev->netdev, ha->addr);
>  }
>  
>  static void hinic_set_rx_mode(struct net_device *netdev)
Xue Chaojing June 11, 2019, 1:30 a.m. UTC | #3
Yes, This patch fixes the Oops.

xue

在 2019/6/11 8:45, dann frazier wrote:
> On Mon, May 27, 2019 at 10:10:05PM +0000, Xue Chaojing wrote:
>> in set_rx_mode, __dev_mc_sync and netdev_for_each_mc_addr will
>> repeatedly set the multicast mac address. so we delete this loop.
> fyi, I'm told this fixes the following Oops (in case it makes sense to
> queue it for stable):
>
> [ 642.914581] Internal error: Oops: 96000005 [#1] SMP
> [ 642.919444] Modules linked in: hinic(-) 8021q garp mrp stp llc ses enclosure sg nls_utf8 isofs vfat fat loop ipmi_ssif crc32_ce crct10dif_ce ghash_c e sha2_ce sha256_arm64 sha1_ce sbsa_gwdt hns_roce_hw_v2 hns_roce ib_core ipmi_si ipmi_devintf ipmi_msghandler xfs libcrc32c marvell hibmc_drm drm_kms_h elper syscopyarea sysfillrect sysimgblt fb_sys_fops ttm qla2xxx ixgbe drm mpt3sas nvme_fc hns3 hisi_sas_v3_hw igb nvme_fabrics hisi_sas_main hclge mdio scsi_transport_fc nvme libsas hnae3 raid_class nvme_core scsi_transport_sas i2c_algo_bit gpio_dwapb gpio_generic dm_mirror dm_region_hash dm_log dm_mo d [last unloaded: hinic]
> [ 642.974177] CPU: 4 PID: 5339 Comm: kworker/u256:1 Kdump: loaded Not tainted 4.18.0-74.el8.aarch64 #1
> [ 642.983293] Hardware name: Huawei TaiShan 2280 V2/BC82AMDA, BIOS TA BIOS 2280-A CS V2.16.01 03/16/2019
> [ 642.992591] Workqueue: hinic_dev set_rx_mode [hinic]
> [ 642.997542] pstate: 00c00009 (nzcv daif +PAN +UAO)
> [ 643.002320] pc : add_mac_addr+0xa4/0x100 [hinic]
> [ 643.006924] lr : set_rx_mode+0x88/0xc0 [hinic]
> [ 643.011353] sp : ffff00003228fd40
> [ 643.014653] x29: ffff00003228fd40 x28: 0000000000000000
> [ 643.019952] x27: ffffb955c362ff38 x26: ffff27ccd2cc3110
> [ 643.025250] x25: 0000000000000000 x24: ffffb955025c6b08
> [ 643.030547] x23: ffffb955025c6000 x22: 0000000000000010
> [ 643.035845] x21: ffff27cc56040488 x20: ffffb955025c6ac0
> [ 643.041142] x19: 0000000000000000 x18: 0000000000000010
> [ 643.046440] x17: 0000ffffb7135830 x16: ffff27ccd2259bb8
> [ 643.051737] x15: ffffffffffffffff x14: 2030302031302039
> [ 643.057035] x13: 33203d2072646461 x12: 2063616d20746573
> [ 643.062332] x11: 203a296465726574 x10: 0000000000000d10
> [ 643.067630] x9 : ffff00003228f9f0 x8 : ffffb95501756170
> [ 643.072927] x7 : 198c000940300814 x6 : ffff00003228fd08
> [ 643.078225] x5 : 0000000000000000 x4 : 0000000000000000
> [ 643.083523] x3 : 0000000000000000 x2 : 0000000000000001
> [ 643.088820] x1 : 0000000000000010 x0 : 00000000000000e3
> [ 643.094118] Process kworker/u256:1 (pid: 5339, stack limit = 0x0000000023b4f182)
> [ 643.101498] Call trace:
> [ 643.103932] add_mac_addr+0xa4/0x100 [hinic]
> [ 643.108189] set_rx_mode+0x88/0xc0 [hinic]
> [ 643.112272] process_one_work+0x1ac/0x3e0
> [ 643.116268] worker_thread+0x44/0x448
> [ 643.119916] kthread+0x130/0x138
> [ 643.123130] ret_from_fork+0x10/0x18
> [ 643.126692] Code: a9425bf5 a94363f7 a8c47bfd d65f03c0 (394016c7)
> [ 643.132828] SMP: stopping secondary CPUs
> [ 643.139859] Starting crashdump kernel...
> [ 643.143771] Bye!
>
>    -dann
>
>> Signed-off-by: Xue Chaojing <xuechaojing@huawei.com>
>> ---
>>   drivers/net/ethernet/huawei/hinic/hinic_main.c | 4 ----
>>   1 file changed, 4 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c
>> index e64bc664f687..cfd3f4232cac 100644
>> --- a/drivers/net/ethernet/huawei/hinic/hinic_main.c
>> +++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c
>> @@ -724,7 +724,6 @@ static void set_rx_mode(struct work_struct *work)
>>   {
>>   	struct hinic_rx_mode_work *rx_mode_work = work_to_rx_mode_work(work);
>>   	struct hinic_dev *nic_dev = rx_mode_work_to_nic_dev(rx_mode_work);
>> -	struct netdev_hw_addr *ha;
>>   
>>   	netif_info(nic_dev, drv, nic_dev->netdev, "set rx mode work\n");
>>   
>> @@ -732,9 +731,6 @@ static void set_rx_mode(struct work_struct *work)
>>   
>>   	__dev_uc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr);
>>   	__dev_mc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr);
>> -
>> -	netdev_for_each_mc_addr(ha, nic_dev->netdev)
>> -		add_mac_addr(nic_dev->netdev, ha->addr);
>>   }
>>   
>>   static void hinic_set_rx_mode(struct net_device *netdev)
> .
>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c
index e64bc664f687..cfd3f4232cac 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_main.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c
@@ -724,7 +724,6 @@  static void set_rx_mode(struct work_struct *work)
 {
 	struct hinic_rx_mode_work *rx_mode_work = work_to_rx_mode_work(work);
 	struct hinic_dev *nic_dev = rx_mode_work_to_nic_dev(rx_mode_work);
-	struct netdev_hw_addr *ha;
 
 	netif_info(nic_dev, drv, nic_dev->netdev, "set rx mode work\n");
 
@@ -732,9 +731,6 @@  static void set_rx_mode(struct work_struct *work)
 
 	__dev_uc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr);
 	__dev_mc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr);
-
-	netdev_for_each_mc_addr(ha, nic_dev->netdev)
-		add_mac_addr(nic_dev->netdev, ha->addr);
 }
 
 static void hinic_set_rx_mode(struct net_device *netdev)