All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Daniel Kestrel <kestrelseventyfour@gmail.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Rob Herring <robh+dt@kernel.org>,
	Daniel Kestrel <kestrelseventyfour@gmail.com>,
	linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 3/3] remoteproc: Add AVM WASP driver
Date: Fri, 22 Jul 2022 23:44:36 +0800	[thread overview]
Message-ID: <202207222313.GAofKYST-lkp@intel.com> (raw)
In-Reply-To: <20220721193455.2717-4-kestrelseventyfour@gmail.com>

Hi Daniel,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on remoteproc/rproc-next]
[also build test WARNING on robh/for-next linus/master v5.19-rc7 next-20220721]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Daniel-Kestrel/Add-support-for-WASP-SoC-on-AVM-router-boards/20220722-033724
base:   git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux.git rproc-next
config: i386-allyesconfig (https://download.01.org/0day-ci/archive/20220722/202207222313.GAofKYST-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 72686d68c137551cce816416190a18d45b4d4e2a)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/b737a00511b74767e3eb13b2ddfba8e6dfe8e5c2
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Daniel-Kestrel/Add-support-for-WASP-SoC-on-AVM-router-boards/20220722-033724
        git checkout b737a00511b74767e3eb13b2ddfba8e6dfe8e5c2
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/remoteproc/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/remoteproc/avm_wasp.c:582:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (!avmwasp->linux_blob) {
               ^~~~~~~~~~~~~~~~~~~~
   drivers/remoteproc/avm_wasp.c:776:9: note: uninitialized use occurs here
           return ret;
                  ^~~
   drivers/remoteproc/avm_wasp.c:582:2: note: remove the 'if' if its condition is always false
           if (!avmwasp->linux_blob) {
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/remoteproc/avm_wasp.c:566:9: note: initialize the variable 'ret' to silence this warning
           int ret;
                  ^
                   = 0
   1 warning generated.


vim +582 drivers/remoteproc/avm_wasp.c

   545	
   546	/**
   547	 * avm_wasp_load_initramfs_image() - load initramfs image to WASP
   548	 * @avmwasp: pointer to drivers private avm_wasp_rproc structure
   549	 *
   550	 * Uses the lan port specified from DT to load the initramfs to
   551	 * WASP after the network boot firmware was successfully started.
   552	 * Communication is done by using raw sockets.
   553	 * There are several commands and status values which are checked.
   554	 * First a discovery packet is received and then each data packet
   555	 * is acknowledged by the WASP network boot firmware.
   556	 * First packet needs to prepend the load address and last packet
   557	 * needs to append the execution address.
   558	 *
   559	 * Return: 0 on Success, -EFAULT if errors with the WASP send protocol
   560	 * have occurred, -EAGAIN if the wasp network interface is down or the
   561	 * error returned from the failed operating system function or service
   562	 */
   563	static int avm_wasp_load_initramfs_image(struct avm_wasp_rproc *avmwasp)
   564	{
   565		bool done = false;
   566		int ret;
   567		u32 num_chunks, chunk_counter;
   568		short interface_flags;
   569		const u8 *firmware, *firmware_end;
   570		struct device *dev = &avmwasp->pdev->dev;
   571		struct kvec socket_kvec;
   572		struct msghdr socket_msghdr;
   573		struct net_device *send_netdev;
   574		struct sockaddr send_sock_addr;
   575		struct sockaddr_ll send_socket_address;
   576		struct socket *wasp_socket;
   577		struct wasp_packet *packet = (struct wasp_packet *)
   578				(avmwasp->buffer);
   579		struct __kernel_old_timeval timeout;
   580		time64_t start_time, current_time;
   581	
 > 582		if (!avmwasp->linux_blob) {
   583			dev_err(dev, "error accessing initramfs image\n");
   584			goto err;
   585		}
   586	
   587		firmware = avmwasp->linux_blob->data;
   588		firmware_end = firmware + avmwasp->linux_blob->size;
   589	
   590		ret = sock_create_kern(&init_net, PF_PACKET, SOCK_RAW,
   591				       htons(ETH_TYPE_ATH_ECPS_FRAME),
   592				       &wasp_socket);
   593		if (ret < 0) {
   594			dev_err(dev, "error opening recv socket: %d\n", ret);
   595			goto err;
   596		}
   597	
   598		timeout.tv_sec = 10;
   599		timeout.tv_usec = 0;
   600		ret = sock_setsockopt(wasp_socket, SOL_SOCKET, SO_RCVTIMEO_OLD,
   601				      KERNEL_SOCKPTR(&timeout), sizeof(timeout));
   602		if (ret < 0) {
   603			dev_err(dev, "error SO_RCVTIMEO recv socket: %d\n", ret);
   604			goto err_socket;
   605		}
   606	
   607		ret = sock_setsockopt(wasp_socket, SOL_SOCKET, SO_SNDTIMEO_OLD,
   608				      KERNEL_SOCKPTR(&timeout), sizeof(timeout));
   609		if (ret < 0) {
   610			dev_err(dev, "error SO_SNDTIMEO send socket: %d\n", ret);
   611			goto err_socket;
   612		}
   613	
   614		rcu_read_lock();
   615		send_netdev = dev_get_by_name_rcu(sock_net(wasp_socket->sk),
   616						  avmwasp->loader_port);
   617		if (send_netdev)
   618			interface_flags = (short)dev_get_flags(send_netdev);
   619		rcu_read_unlock();
   620	
   621		if (IS_ERR_OR_NULL(send_netdev)) {
   622			dev_err(dev, "error accessing net device\n");
   623			ret = -ENODEV;
   624			goto err_socket;
   625		}
   626	
   627		if (!(interface_flags & IFF_UP && interface_flags & IFF_RUNNING)) {
   628			dev_err(dev, "error wasp interface %s is down\n",
   629				avmwasp->loader_port);
   630			ret = -EAGAIN;
   631			goto err_socket;
   632		}
   633	
   634		avmwasp->ifindex = send_netdev->ifindex;
   635		ret = dev_get_mac_address(&send_sock_addr, &init_net,
   636					  avmwasp->loader_port);
   637		if (ret < 0) {
   638			dev_err(dev, "error getting mac address: %d\n", ret);
   639			goto err_socket;
   640		}
   641	
   642		send_socket_address.sll_halen = ETH_ALEN;
   643		send_socket_address.sll_ifindex = avmwasp->ifindex;
   644		memset(&socket_msghdr, 0, sizeof(socket_msghdr));
   645		socket_msghdr.msg_name = (struct sockaddr *)&send_socket_address;
   646		socket_msghdr.msg_namelen = sizeof(struct sockaddr_ll);
   647	
   648		start_time = ktime_get_seconds();
   649	
   650		while (!done) {
   651			current_time = ktime_get_seconds();
   652			if ((current_time - start_time) > ETH_SEND_LOOP_TIMEOUT_SECS) {
   653				dev_err(dev,
   654					"waiting for packet from WASP timed out\n");
   655				ret = -ETIMEDOUT;
   656				goto err_socket;
   657			}
   658	
   659			socket_kvec.iov_base = avmwasp->buffer;
   660			socket_kvec.iov_len = ETH_BUF_SIZE;
   661			ret = kernel_recvmsg(wasp_socket,
   662					     &socket_msghdr, &socket_kvec, 1,
   663					     ETH_BUF_SIZE, 0);
   664	
   665			if (ret < 0) {
   666				dev_err(dev,
   667					"error receiving any packet or timeout: %d\n",
   668					ret);
   669				goto err_socket;
   670			}
   671	
   672			if (ret < (sizeof(struct ethhdr) + sizeof(packet->hdr))) {
   673				dev_err(dev,
   674					"packet too small, discard and continue\n");
   675				continue;
   676			}
   677	
   678			if (packet->eh.h_proto != ETH_TYPE_ATH_ECPS_FRAME)
   679				continue;
   680	
   681			memcpy(wasp_mac, packet->eh.h_source, sizeof(wasp_mac));
   682	
   683			if (packet->hdr.packet_start == ETH_WASP_PACKET_ID) {
   684				switch (packet->hdr.response) {
   685				case RESP_DISCOVER:
   686					chunk_counter = 1;
   687					num_chunks = DIV_ROUND_UP(avmwasp->linux_blob->size,
   688								  ETH_DATA_SIZE);
   689					fallthrough;
   690				case RESP_OK:
   691					memcpy(packet->eh.h_dest, wasp_mac, sizeof(packet->eh.h_dest));
   692					packet->eh.h_proto = ETH_TYPE_ATH_ECPS_FRAME;
   693					memcpy(packet->eh.h_source, send_sock_addr.sa_data,
   694					       sizeof(packet->eh.h_source));
   695	
   696					if (firmware < firmware_end) {
   697						size_t bytestosend, send_len;
   698						u32 data_offset = 0;
   699	
   700						if (chunk_counter == 1) {
   701							memcpy(packet->payload,
   702							       &m_load_addr,
   703							       sizeof(m_load_addr));
   704							data_offset = sizeof(m_load_addr);
   705						}
   706	
   707						if ((firmware_end - firmware) >=
   708						     ETH_DATA_SIZE)
   709							bytestosend = ETH_DATA_SIZE;
   710						else
   711							bytestosend = firmware_end -
   712										firmware;
   713						memcpy(&packet->payload[data_offset],
   714						       firmware, bytestosend);
   715						firmware = firmware + ETH_DATA_SIZE;
   716	
   717						packet->hdr.packet_start =
   718								ETH_WASP_PACKET_ID;
   719						if (chunk_counter == num_chunks) {
   720							packet->hdr.response =
   721								CMD_START_FIRMWARE;
   722							memcpy(&packet->payload
   723							       [data_offset + bytestosend],
   724							       &m_load_addr,
   725							       sizeof(m_load_addr));
   726							bytestosend += sizeof(m_load_addr);
   727						} else {
   728							packet->hdr.command =
   729								CMD_FIRMWARE_DATA;
   730						}
   731						packet->hdr.counter =
   732								(chunk_counter - 1) * 4;
   733	
   734						send_len = sizeof(struct ethhdr)
   735							+ sizeof(packet->hdr) + bytestosend +
   736							data_offset;
   737	
   738						socket_kvec.iov_len = send_len;
   739						socket_kvec.iov_base = avmwasp->buffer;
   740	
   741						ret = kernel_sendmsg(wasp_socket,
   742								     &socket_msghdr,
   743								     &socket_kvec,
   744								     1, send_len);
   745						if (ret < 0) {
   746							dev_err(dev,
   747								"error sending to WASP %d\n",
   748								ret);
   749							goto err_socket;
   750						}
   751	
   752						chunk_counter++;
   753					}
   754					break;
   755				case RESP_ERROR:
   756					dev_err(dev,
   757						"received an WASP error packet\n");
   758					ret = -EFAULT;
   759					goto err_socket;
   760				case RESP_STARTING:
   761					done = true;
   762					ret = 0;
   763					continue;
   764					break;
   765				default:
   766					dev_err(dev, "unknown packet, continue\n");
   767					continue;
   768					break;
   769				}
   770			}
   771		}
   772	
   773	err_socket:
   774		wasp_socket->ops->release(wasp_socket);
   775	err:
   776		return ret;
   777	}
   778	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

      reply	other threads:[~2022-07-22 15:44 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-21 19:34 [PATCH v3 0/3] Add support for WASP SoC on AVM router boards Daniel Kestrel
2022-07-21 19:34 ` [PATCH v3 1/3] dt-bindings: vendor-prefixes: Add AVM Daniel Kestrel
2022-07-21 19:34 ` [PATCH v3 2/3] dt-bindings: remoteproc: Add AVM WASP Daniel Kestrel
2022-07-21 19:34 ` [PATCH v3 3/3] remoteproc: Add AVM WASP driver Daniel Kestrel
2022-07-22 15:44   ` kernel test robot [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202207222313.GAofKYST-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=bjorn.andersson@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=kbuild-all@lists.01.org \
    --cc=kestrelseventyfour@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=mathieu.poirier@linaro.org \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.