All of lore.kernel.org
 help / color / mirror / Atom feed
* [ti:ti-linux-5.4.y 7856/9102] net/hsr/hsr_device.c:520 send_hsr_supervision_frame() error: double unlocked 'hsr->seqnr_lock' (orig line 492)
@ 2020-08-25  5:34 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2020-08-25  5:34 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 11579 bytes --]

CC: kbuild-all(a)lists.01.org
TO: Murali Karicheri <m-karicheri2@ti.com>
CC: Grygorii Strashko <grygorii.strashko@ti.com>

tree:   git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git ti-linux-5.4.y
head:   7e56cd9ced296dbf411d0ccdc1fa2135345eebf3
commit: a3f4bfaeea6fb1a3d14dcc3ab8e2cf7da5f6f0ee [7856/9102] net: hsr/prp: Support VLAN tagged supervision frames
:::::: branch date: 17 hours ago
:::::: commit date: 9 weeks ago
config: h8300-randconfig-m031-20200824 (attached as .config)
compiler: h8300-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
net/hsr/hsr_device.c:520 send_hsr_supervision_frame() error: double unlocked 'hsr->seqnr_lock' (orig line 492)

git remote add ti git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git
git fetch --no-tags ti ti-linux-5.4.y
git checkout a3f4bfaeea6fb1a3d14dcc3ab8e2cf7da5f6f0ee
vim +520 net/hsr/hsr_device.c

f421436a591d34 Arvid Brodin     2013-10-30  394  
ee1c2797728490 Peter Heise      2016-04-13  395  static void send_hsr_supervision_frame(struct hsr_port *master,
b1b4aa91408028 Murali Karicheri 2019-04-05  396  				       u8 type, u8 hsr_ver)
f421436a591d34 Arvid Brodin     2013-10-30  397  {
f421436a591d34 Arvid Brodin     2013-10-30  398  	struct sk_buff *skb;
f421436a591d34 Arvid Brodin     2013-10-30  399  	int hlen, tlen;
9cc476d92a4b40 Murali Karicheri 2020-06-02  400  	struct hsr_tag *hsr_tag = NULL;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  401  	struct vlan_hdr *vhdr;
9cc476d92a4b40 Murali Karicheri 2020-06-02  402  	struct prp_rct *rct;
f421436a591d34 Arvid Brodin     2013-10-30  403  	struct hsr_sup_tag *hsr_stag;
f421436a591d34 Arvid Brodin     2013-10-30  404  	struct hsr_sup_payload *hsr_sp;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  405  	struct hsr_priv *hsr;
f421436a591d34 Arvid Brodin     2013-10-30  406  	unsigned long irqflags;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  407  	u16 proto, vlan_tci = 0;
9cc476d92a4b40 Murali Karicheri 2020-06-02  408  	u8 *tail;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  409  	int len;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  410  
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  411  	hsr = master->hsr;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  412  
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  413  	if (hsr->disable_sv_frame)
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  414  		return;
f421436a591d34 Arvid Brodin     2013-10-30  415  
c5a75911721002 Arvid Brodin     2014-07-04  416  	hlen = LL_RESERVED_SPACE(master->dev);
c5a75911721002 Arvid Brodin     2014-07-04  417  	tlen = master->dev->needed_tailroom;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  418  	len = sizeof(struct hsr_tag) +
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  419  	      sizeof(struct hsr_sup_tag) +
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  420  	      sizeof(struct hsr_sup_payload) + hlen + tlen;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  421  
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  422  	if (hsr->use_vlan_for_sv)
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  423  		len += VLAN_HLEN;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  424  
9cc476d92a4b40 Murali Karicheri 2020-06-02  425  	/* skb size is same for PRP/HSR frames, only difference
9cc476d92a4b40 Murali Karicheri 2020-06-02  426  	 * being, for PRP it is a trailer and for HSR it is a
9cc476d92a4b40 Murali Karicheri 2020-06-02  427  	 * header
9cc476d92a4b40 Murali Karicheri 2020-06-02  428  	 */
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  429  	skb = dev_alloc_skb(len);
05ca6e644dc9b7 Murali Karicheri 2019-04-05  430  	if (!skb)
f421436a591d34 Arvid Brodin     2013-10-30  431  		return;
f421436a591d34 Arvid Brodin     2013-10-30  432  
f421436a591d34 Arvid Brodin     2013-10-30  433  	skb_reserve(skb, hlen);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  434  	skb->dev = master->dev;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  435  	if (hsr->use_vlan_for_sv) {
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  436  		proto = ETH_P_8021Q;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  437  		skb->priority = hsr->sv_frame_pcp;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  438  	} else {
9cc476d92a4b40 Murali Karicheri 2020-06-02  439  		if (!hsr_ver)
9cc476d92a4b40 Murali Karicheri 2020-06-02  440  			proto = ETH_P_PRP;
9cc476d92a4b40 Murali Karicheri 2020-06-02  441  		else
9cc476d92a4b40 Murali Karicheri 2020-06-02  442  			proto = (hsr_ver == HSR_V1) ? ETH_P_HSR : ETH_P_PRP;
f421436a591d34 Arvid Brodin     2013-10-30  443  		skb->priority = TC_PRIO_CONTROL;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  444  	}
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  445  	skb->protocol = htons(proto);
f421436a591d34 Arvid Brodin     2013-10-30  446  
9cc476d92a4b40 Murali Karicheri 2020-06-02  447  	if (dev_hard_header(skb, skb->dev, proto,
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  448  			    hsr->sup_multicast_addr,
f266a683a4804d Arvid Brodin     2014-07-04  449  			    skb->dev->dev_addr, skb->len) <= 0)
f421436a591d34 Arvid Brodin     2013-10-30  450  		goto out;
f266a683a4804d Arvid Brodin     2014-07-04  451  	skb_reset_mac_header(skb);
5e5eaf92b37ab6 Taehee Yoo       2019-12-22  452  	skb_reset_network_header(skb);
5e5eaf92b37ab6 Taehee Yoo       2019-12-22  453  	skb_reset_transport_header(skb);
f421436a591d34 Arvid Brodin     2013-10-30  454  
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  455  	if (hsr->use_vlan_for_sv) {
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  456  		vhdr = skb_put(skb, VLAN_HLEN);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  457  		vlan_tci = hsr->sv_frame_vid;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  458  		vlan_tci |= (hsr->sv_frame_pcp	<< VLAN_PRIO_SHIFT);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  459  		if (hsr->sv_frame_dei)
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  460  			vlan_tci |= VLAN_CFI_MASK;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  461  		if (!hsr_ver)
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  462  			proto = ETH_P_PRP;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  463  		else
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  464  			proto = (hsr_ver == HSR_V1) ? ETH_P_HSR : ETH_P_PRP;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  465  		vhdr->h_vlan_TCI = htons(vlan_tci);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  466  		vhdr->h_vlan_encapsulated_proto = htons(proto);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  467  	}
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  468  
9cc476d92a4b40 Murali Karicheri 2020-06-02  469  	if (hsr_ver == HSR_V1) {
b952f4dff27512 yuan linyu       2017-06-18  470  		hsr_tag = skb_put(skb, sizeof(struct hsr_tag));
ee1c2797728490 Peter Heise      2016-04-13  471  		hsr_tag->encap_proto = htons(ETH_P_PRP);
ee1c2797728490 Peter Heise      2016-04-13  472  		set_hsr_tag_LSDU_size(hsr_tag, HSR_V1_SUP_LSDUSIZE);
ee1c2797728490 Peter Heise      2016-04-13  473  	}
f421436a591d34 Arvid Brodin     2013-10-30  474  
b952f4dff27512 yuan linyu       2017-06-18  475  	hsr_stag = skb_put(skb, sizeof(struct hsr_sup_tag));
b1b4aa91408028 Murali Karicheri 2019-04-05  476  	set_hsr_stag_path(hsr_stag, (hsr_ver ? 0x0 : 0xf));
9cc476d92a4b40 Murali Karicheri 2020-06-02  477  	set_hsr_stag_HSR_ver(hsr_stag, (hsr_ver ? 1 : 0));
f421436a591d34 Arvid Brodin     2013-10-30  478  
ee1c2797728490 Peter Heise      2016-04-13  479  	/* From HSRv1 on we have separate supervision sequence numbers. */
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  480  	spin_lock_irqsave(&hsr->seqnr_lock, irqflags);
b1b4aa91408028 Murali Karicheri 2019-04-05  481  	if (hsr_ver > 0) {
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  482  		hsr_stag->sequence_nr = htons(hsr->sup_sequence_nr);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  483  		hsr->sup_sequence_nr++;
9cc476d92a4b40 Murali Karicheri 2020-06-02  484  		if (hsr_ver == HSR_V1) {
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  485  			hsr_tag->sequence_nr = htons(hsr->sequence_nr);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  486  			hsr->sequence_nr++;
9cc476d92a4b40 Murali Karicheri 2020-06-02  487  		}
ee1c2797728490 Peter Heise      2016-04-13  488  	} else {
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  489  		hsr_stag->sequence_nr = htons(hsr->sequence_nr);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  490  		hsr->sequence_nr++;
ee1c2797728490 Peter Heise      2016-04-13  491  	}
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18 @492  	spin_unlock_irqrestore(&hsr->seqnr_lock, irqflags);
f421436a591d34 Arvid Brodin     2013-10-30  493  
b1b4aa91408028 Murali Karicheri 2019-04-05  494  	hsr_stag->HSR_TLV_type = type;
ee1c2797728490 Peter Heise      2016-04-13  495  	/* TODO: Why 12 in HSRv0? */
b1b4aa91408028 Murali Karicheri 2019-04-05  496  	hsr_stag->HSR_TLV_length =
b1b4aa91408028 Murali Karicheri 2019-04-05  497  				hsr_ver ? sizeof(struct hsr_sup_payload) : 12;
f421436a591d34 Arvid Brodin     2013-10-30  498  
f421436a591d34 Arvid Brodin     2013-10-30  499  	/* Payload: MacAddressA */
b952f4dff27512 yuan linyu       2017-06-18  500  	hsr_sp = skb_put(skb, sizeof(struct hsr_sup_payload));
b1b4aa91408028 Murali Karicheri 2019-04-05  501  	ether_addr_copy(hsr_sp->macaddress_A, master->dev->dev_addr);
f421436a591d34 Arvid Brodin     2013-10-30  502  
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  503  	if (!hsr->use_vlan_for_sv) {
414e7d76af6d3e Florian Fainelli 2017-08-21  504  		if (skb_put_padto(skb, ETH_ZLEN + HSR_HLEN))
414e7d76af6d3e Florian Fainelli 2017-08-21  505  			return;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  506  	} else {
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  507  		if (skb_put_padto(skb, ETH_ZLEN + HSR_HLEN + VLAN_HLEN))
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  508  			return;
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  509  	}
ee1c2797728490 Peter Heise      2016-04-13  510  
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  511  	spin_lock_irqsave(&hsr->seqnr_lock, irqflags);
9cc476d92a4b40 Murali Karicheri 2020-06-02  512  	if (hsr_ver == PRP_V1) {
9cc476d92a4b40 Murali Karicheri 2020-06-02  513  		tail = skb_tail_pointer(skb) - HSR_HLEN;
9cc476d92a4b40 Murali Karicheri 2020-06-02  514  		rct = (struct prp_rct *)tail;
9cc476d92a4b40 Murali Karicheri 2020-06-02  515  		rct->PRP_suffix = htons(ETH_P_PRP);
9cc476d92a4b40 Murali Karicheri 2020-06-02  516  		set_prp_LSDU_size(rct, HSR_V1_SUP_LSDUSIZE);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  517  		rct->sequence_nr = htons(hsr->sequence_nr);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  518  		hsr->sequence_nr++;
9cc476d92a4b40 Murali Karicheri 2020-06-02  519  	}
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18 @520  	spin_unlock_irqrestore(&hsr->seqnr_lock, irqflags);
9cc476d92a4b40 Murali Karicheri 2020-06-02  521  
f266a683a4804d Arvid Brodin     2014-07-04  522  	hsr_forward_skb(skb, master);
a3f4bfaeea6fb1 Murali Karicheri 2020-06-18  523  	INC_CNT_TX_SUP(hsr);
f421436a591d34 Arvid Brodin     2013-10-30  524  	return;
f421436a591d34 Arvid Brodin     2013-10-30  525  
f421436a591d34 Arvid Brodin     2013-10-30  526  out:
3d1a54e801b661 Dan Carpenter    2015-11-21  527  	WARN_ONCE(1, "HSR: Could not send supervision frame\n");
f421436a591d34 Arvid Brodin     2013-10-30  528  	kfree_skb(skb);
f421436a591d34 Arvid Brodin     2013-10-30  529  }
f421436a591d34 Arvid Brodin     2013-10-30  530  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 24794 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-08-25  5:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-25  5:34 [ti:ti-linux-5.4.y 7856/9102] net/hsr/hsr_device.c:520 send_hsr_supervision_frame() error: double unlocked 'hsr->seqnr_lock' (orig line 492) kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.