All of lore.kernel.org
 help / color / mirror / Atom feed
From: Corey Minyard <cminyard@mvista.com>
To: kbuild-all@lists.01.org
Subject: Re: [linux-next:master 4314/4896] drivers/char/ipmi/ipmi_ssif.c:781:3: note: in expansion of macro 'memcpy'
Date: Mon, 23 Dec 2019 10:45:12 -0600	[thread overview]
Message-ID: <20191223164512.GO7049@minyard.net> (raw)
In-Reply-To: <20191223111015.ztav74pbg7iz3t7z@butterfly.localdomain>

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

On Mon, Dec 23, 2019 at 12:10:15PM +0100, Oleksandr Natalenko wrote:
> /cc Corey and Jens.
> 
> On Sun, Dec 22, 2019 at 04:34:30AM +0800, kbuild test robot wrote:
> > tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> > head:   9f8535c5f75f0e23359962527dbfd31478b2cf16
> > commit: 933639f5723a15a13e2105603de9e240bae2f546 [4314/4896] init/Kconfig: enable -O3 for all arches
> > config: alpha-randconfig-a001-20191222 (attached as .config)
> > compiler: alpha-linux-gcc (GCC) 7.5.0
> > reproduce:
> >         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> >         chmod +x ~/bin/make.cross
> >         git checkout 933639f5723a15a13e2105603de9e240bae2f546
> >         # save the attached .config to linux build tree
> >         GCC_VERSION=7.5.0 make.cross ARCH=alpha 
> > 
> > If you fix the issue, kindly add following tag
> > Reported-by: kbuild test robot <lkp@intel.com>
> > 
> > All warnings (new ones prefixed by >>):
> > 
> >    In file included from include/linux/string.h:20:0,
> >                     from include/linux/bitmap.h:9,
> >                     from include/linux/nodemask.h:95,
> >                     from include/linux/mmzone.h:17,
> >                     from include/linux/gfp.h:6,
> >                     from include/linux/umh.h:4,
> >                     from include/linux/kmod.h:9,
> >                     from include/linux/module.h:16,
> >                     from drivers/char/ipmi/ipmi_ssif.c:37:
> >    drivers/char/ipmi/ipmi_ssif.c: In function 'msg_written_handler':
> >    arch/alpha/include/asm/string.h:22:16: warning: argument 2 null where non-null expected [-Wnonnull]
> >     #define memcpy __builtin_memcpy
> > >> drivers/char/ipmi/ipmi_ssif.c:781:3: note: in expansion of macro 'memcpy'
> >       memcpy(msg->rsp, data, msg->rsp_size);

This can't really happen, but I've queued a fix in my next tree to avoid
the warning.

Thanks,

-corey

> >       ^~~~~~
> >    arch/alpha/include/asm/string.h:22:16: note: in a call to built-in function '__builtin_memcpy'
> >     #define memcpy __builtin_memcpy
> > >> drivers/char/ipmi/ipmi_ssif.c:781:3: note: in expansion of macro 'memcpy'
> >       memcpy(msg->rsp, data, msg->rsp_size);
> >       ^~~~~~
> > --
> >    fs/io_uring.c: In function 'io_link_timeout_fn':
> > >> fs/io_uring.c:2831:2: warning: argument 2 null where non-null expected [-Wnonnull]
> >      io_put_req_find_next(req, nxt);
> >      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >    fs/io_uring.c:1036:13: note: in a call to function 'io_put_req_find_next' declared here
> >     static void io_put_req_find_next(struct io_kiocb *req, struct io_kiocb **nxtptr)
> >                 ^~~~~~~~~~~~~~~~~~~~
> > 
> > vim +/memcpy +781 drivers/char/ipmi/ipmi_ssif.c
> > 
> > 259307074bfcf1 Corey Minyard   2012-03-19  622  
> > 259307074bfcf1 Corey Minyard   2012-03-19  623  static void msg_done_handler(struct ssif_info *ssif_info, int result,
> > 259307074bfcf1 Corey Minyard   2012-03-19  624  			     unsigned char *data, unsigned int len)
> > 259307074bfcf1 Corey Minyard   2012-03-19  625  {
> > 259307074bfcf1 Corey Minyard   2012-03-19  626  	struct ipmi_smi_msg *msg;
> > 259307074bfcf1 Corey Minyard   2012-03-19  627  	unsigned long oflags, *flags;
> > 259307074bfcf1 Corey Minyard   2012-03-19  628  	int rv;
> > 259307074bfcf1 Corey Minyard   2012-03-19  629  
> > 259307074bfcf1 Corey Minyard   2012-03-19  630  	/*
> > 259307074bfcf1 Corey Minyard   2012-03-19  631  	 * We are single-threaded here, so no need for a lock until we
> > 259307074bfcf1 Corey Minyard   2012-03-19  632  	 * start messing with driver states or the queues.
> > 259307074bfcf1 Corey Minyard   2012-03-19  633  	 */
> > 259307074bfcf1 Corey Minyard   2012-03-19  634  
> > 259307074bfcf1 Corey Minyard   2012-03-19  635  	if (result < 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  636  		ssif_info->retries_left--;
> > 259307074bfcf1 Corey Minyard   2012-03-19  637  		if (ssif_info->retries_left > 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  638  			ssif_inc_stat(ssif_info, receive_retries);
> > 259307074bfcf1 Corey Minyard   2012-03-19  639  
> > 9162052173d238 Corey Minyard   2015-04-24  640  			flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
> > 9162052173d238 Corey Minyard   2015-04-24  641  			ssif_info->waiting_alert = true;
> > 9162052173d238 Corey Minyard   2015-04-24  642  			ssif_info->rtc_us_timer = SSIF_MSG_USEC;
> > 0711e8c1b4572d Jan Glauber     2018-10-11  643  			if (!ssif_info->stopping)
> > 259307074bfcf1 Corey Minyard   2012-03-19  644  				mod_timer(&ssif_info->retry_timer,
> > 259307074bfcf1 Corey Minyard   2012-03-19  645  					  jiffies + SSIF_MSG_JIFFIES);
> > 9162052173d238 Corey Minyard   2015-04-24  646  			ipmi_ssif_unlock_cond(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  647  			return;
> > 259307074bfcf1 Corey Minyard   2012-03-19  648  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  649  
> > 259307074bfcf1 Corey Minyard   2012-03-19  650  		ssif_inc_stat(ssif_info, receive_errors);
> > 259307074bfcf1 Corey Minyard   2012-03-19  651  
> > 259307074bfcf1 Corey Minyard   2012-03-19  652  		if  (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  653  			dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  654  				"%s: Error %d\n", __func__, result);
> > 259307074bfcf1 Corey Minyard   2012-03-19  655  		len = 0;
> > 259307074bfcf1 Corey Minyard   2012-03-19  656  		goto continue_op;
> > 259307074bfcf1 Corey Minyard   2012-03-19  657  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  658  
> > 259307074bfcf1 Corey Minyard   2012-03-19  659  	if ((len > 1) && (ssif_info->multi_pos == 0)
> > 259307074bfcf1 Corey Minyard   2012-03-19  660  				&& (data[0] == 0x00) && (data[1] == 0x01)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  661  		/* Start of multi-part read.  Start the next transaction. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  662  		int i;
> > 259307074bfcf1 Corey Minyard   2012-03-19  663  
> > 259307074bfcf1 Corey Minyard   2012-03-19  664  		ssif_inc_stat(ssif_info, received_message_parts);
> > 259307074bfcf1 Corey Minyard   2012-03-19  665  
> > 259307074bfcf1 Corey Minyard   2012-03-19  666  		/* Remove the multi-part read marker. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  667  		len -= 2;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  668  		data += 2;
> > 3d69d43baa2749 Corey Minyard   2015-04-29  669  		for (i = 0; i < len; i++)
> > 7d6380cd40f799 Corey Minyard   2018-11-16  670  			ssif_info->data[i] = data[i];
> > 259307074bfcf1 Corey Minyard   2012-03-19  671  		ssif_info->multi_len = len;
> > 259307074bfcf1 Corey Minyard   2012-03-19  672  		ssif_info->multi_pos = 1;
> > 259307074bfcf1 Corey Minyard   2012-03-19  673  
> > 259307074bfcf1 Corey Minyard   2012-03-19  674  		rv = ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ,
> > 259307074bfcf1 Corey Minyard   2012-03-19  675  				  SSIF_IPMI_MULTI_PART_RESPONSE_MIDDLE,
> > 259307074bfcf1 Corey Minyard   2012-03-19  676  				  ssif_info->recv, I2C_SMBUS_BLOCK_DATA);
> > 259307074bfcf1 Corey Minyard   2012-03-19  677  		if (rv < 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  678  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  679  				dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  680  					"Error from i2c_non_blocking_op(1)\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  681  
> > 259307074bfcf1 Corey Minyard   2012-03-19  682  			result = -EIO;
> > 259307074bfcf1 Corey Minyard   2012-03-19  683  		} else
> > 259307074bfcf1 Corey Minyard   2012-03-19  684  			return;
> > 259307074bfcf1 Corey Minyard   2012-03-19  685  	} else if (ssif_info->multi_pos) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  686  		/* Middle of multi-part read.  Start the next transaction. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  687  		int i;
> > 259307074bfcf1 Corey Minyard   2012-03-19  688  		unsigned char blocknum;
> > 259307074bfcf1 Corey Minyard   2012-03-19  689  
> > 259307074bfcf1 Corey Minyard   2012-03-19  690  		if (len == 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  691  			result = -EIO;
> > 259307074bfcf1 Corey Minyard   2012-03-19  692  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  693  				dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  694  					"Middle message with no data\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  695  
> > 259307074bfcf1 Corey Minyard   2012-03-19  696  			goto continue_op;
> > 259307074bfcf1 Corey Minyard   2012-03-19  697  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  698  
> > 3d69d43baa2749 Corey Minyard   2015-04-29  699  		blocknum = data[0];
> > 7d6380cd40f799 Corey Minyard   2018-11-16  700  		len--;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  701  		data++;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  702  
> > 7d6380cd40f799 Corey Minyard   2018-11-16  703  		if (blocknum != 0xff && len != 31) {
> > 7d6380cd40f799 Corey Minyard   2018-11-16  704  		    /* All blocks but the last must have 31 data bytes. */
> > 7d6380cd40f799 Corey Minyard   2018-11-16  705  			result = -EIO;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  706  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  707  				dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  708  					"Received middle message <31\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  709  
> > 7d6380cd40f799 Corey Minyard   2018-11-16  710  			goto continue_op;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  711  		}
> > 7d6380cd40f799 Corey Minyard   2018-11-16  712  
> > 7d6380cd40f799 Corey Minyard   2018-11-16  713  		if (ssif_info->multi_len + len > IPMI_MAX_MSG_LENGTH) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  714  			/* Received message too big, abort the operation. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  715  			result = -E2BIG;
> > 259307074bfcf1 Corey Minyard   2012-03-19  716  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  717  				dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  718  					"Received message too big\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  719  
> > 259307074bfcf1 Corey Minyard   2012-03-19  720  			goto continue_op;
> > 259307074bfcf1 Corey Minyard   2012-03-19  721  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  722  
> > 3d69d43baa2749 Corey Minyard   2015-04-29  723  		for (i = 0; i < len; i++)
> > 7d6380cd40f799 Corey Minyard   2018-11-16  724  			ssif_info->data[i + ssif_info->multi_len] = data[i];
> > 259307074bfcf1 Corey Minyard   2012-03-19  725  		ssif_info->multi_len += len;
> > 259307074bfcf1 Corey Minyard   2012-03-19  726  		if (blocknum == 0xff) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  727  			/* End of read */
> > 259307074bfcf1 Corey Minyard   2012-03-19  728  			len = ssif_info->multi_len;
> > 259307074bfcf1 Corey Minyard   2012-03-19  729  			data = ssif_info->data;
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  730  		} else if (blocknum + 1 != ssif_info->multi_pos) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  731  			/*
> > 259307074bfcf1 Corey Minyard   2012-03-19  732  			 * Out of sequence block, just abort.  Block
> > 259307074bfcf1 Corey Minyard   2012-03-19  733  			 * numbers start at zero for the second block,
> > 259307074bfcf1 Corey Minyard   2012-03-19  734  			 * but multi_pos starts at one, so the +1.
> > 259307074bfcf1 Corey Minyard   2012-03-19  735  			 */
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  736  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  737  				dev_dbg(&ssif_info->client->dev,
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  738  					"Received message out of sequence, expected %u, got %u\n",
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  739  					ssif_info->multi_pos - 1, blocknum);
> > 259307074bfcf1 Corey Minyard   2012-03-19  740  			result = -EIO;
> > 259307074bfcf1 Corey Minyard   2012-03-19  741  		} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  742  			ssif_inc_stat(ssif_info, received_message_parts);
> > 259307074bfcf1 Corey Minyard   2012-03-19  743  
> > 259307074bfcf1 Corey Minyard   2012-03-19  744  			ssif_info->multi_pos++;
> > 259307074bfcf1 Corey Minyard   2012-03-19  745  
> > 259307074bfcf1 Corey Minyard   2012-03-19  746  			rv = ssif_i2c_send(ssif_info, msg_done_handler,
> > 259307074bfcf1 Corey Minyard   2012-03-19  747  					   I2C_SMBUS_READ,
> > 259307074bfcf1 Corey Minyard   2012-03-19  748  					   SSIF_IPMI_MULTI_PART_RESPONSE_MIDDLE,
> > 259307074bfcf1 Corey Minyard   2012-03-19  749  					   ssif_info->recv,
> > 259307074bfcf1 Corey Minyard   2012-03-19  750  					   I2C_SMBUS_BLOCK_DATA);
> > 259307074bfcf1 Corey Minyard   2012-03-19  751  			if (rv < 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  752  				if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  753  					dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  754  						"Error from ssif_i2c_send\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  755  
> > 259307074bfcf1 Corey Minyard   2012-03-19  756  				result = -EIO;
> > 259307074bfcf1 Corey Minyard   2012-03-19  757  			} else
> > 259307074bfcf1 Corey Minyard   2012-03-19  758  				return;
> > 259307074bfcf1 Corey Minyard   2012-03-19  759  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  760  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  761  
> > 7d6380cd40f799 Corey Minyard   2018-11-16  762   continue_op:
> > 259307074bfcf1 Corey Minyard   2012-03-19  763  	if (result < 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  764  		ssif_inc_stat(ssif_info, receive_errors);
> > 259307074bfcf1 Corey Minyard   2012-03-19  765  	} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  766  		ssif_inc_stat(ssif_info, received_messages);
> > 259307074bfcf1 Corey Minyard   2012-03-19  767  		ssif_inc_stat(ssif_info, received_message_parts);
> > 259307074bfcf1 Corey Minyard   2012-03-19  768  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  769  
> > 259307074bfcf1 Corey Minyard   2012-03-19  770  	if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
> > 83af41947c5cbd Corey Minyard   2018-11-27  771  		dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  772  			"DONE 1: state = %d, result=%d\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  773  			ssif_info->ssif_state, result);
> > 259307074bfcf1 Corey Minyard   2012-03-19  774  
> > 259307074bfcf1 Corey Minyard   2012-03-19  775  	flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  776  	msg = ssif_info->curr_msg;
> > 259307074bfcf1 Corey Minyard   2012-03-19  777  	if (msg) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  778  		msg->rsp_size = len;
> > 259307074bfcf1 Corey Minyard   2012-03-19  779  		if (msg->rsp_size > IPMI_MAX_MSG_LENGTH)
> > 259307074bfcf1 Corey Minyard   2012-03-19  780  			msg->rsp_size = IPMI_MAX_MSG_LENGTH;
> > 259307074bfcf1 Corey Minyard   2012-03-19 @781  		memcpy(msg->rsp, data, msg->rsp_size);
> > 259307074bfcf1 Corey Minyard   2012-03-19  782  		ssif_info->curr_msg = NULL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  783  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  784  
> > 259307074bfcf1 Corey Minyard   2012-03-19  785  	switch (ssif_info->ssif_state) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  786  	case SSIF_NORMAL:
> > 259307074bfcf1 Corey Minyard   2012-03-19  787  		ipmi_ssif_unlock_cond(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  788  		if (!msg)
> > 259307074bfcf1 Corey Minyard   2012-03-19  789  			break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  790  
> > 259307074bfcf1 Corey Minyard   2012-03-19  791  		if (result < 0)
> > 259307074bfcf1 Corey Minyard   2012-03-19  792  			return_hosed_msg(ssif_info, msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  793  		else
> > 259307074bfcf1 Corey Minyard   2012-03-19  794  			deliver_recv_msg(ssif_info, msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  795  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  796  
> > 259307074bfcf1 Corey Minyard   2012-03-19  797  	case SSIF_GETTING_FLAGS:
> > 259307074bfcf1 Corey Minyard   2012-03-19  798  		/* We got the flags from the SSIF, now handle them. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  799  		if ((result < 0) || (len < 4) || (data[2] != 0)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  800  			/*
> > 259307074bfcf1 Corey Minyard   2012-03-19  801  			 * Error fetching flags, or invalid length,
> > 259307074bfcf1 Corey Minyard   2012-03-19  802  			 * just give up for now.
> > 259307074bfcf1 Corey Minyard   2012-03-19  803  			 */
> > 259307074bfcf1 Corey Minyard   2012-03-19  804  			ssif_info->ssif_state = SSIF_NORMAL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  805  			ipmi_ssif_unlock_cond(ssif_info, flags);
> > 83af41947c5cbd Corey Minyard   2018-11-27  806  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  807  				 "Error getting flags: %d %d, %x\n",
> > f002612b9d8661 Kamlakant Patel 2018-03-13  808  				 result, len, (len >= 3) ? data[2] : 0);
> > 259307074bfcf1 Corey Minyard   2012-03-19  809  		} else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
> > 259307074bfcf1 Corey Minyard   2012-03-19  810  			   || data[1] != IPMI_GET_MSG_FLAGS_CMD) {
> > 4495ec6d770e1b Corey Minyard   2017-06-30  811  			/*
> > 4495ec6d770e1b Corey Minyard   2017-06-30  812  			 * Don't abort here, maybe it was a queued
> > 4495ec6d770e1b Corey Minyard   2017-06-30  813  			 * response to a previous command.
> > 4495ec6d770e1b Corey Minyard   2017-06-30  814  			 */
> > 4495ec6d770e1b Corey Minyard   2017-06-30  815  			ipmi_ssif_unlock_cond(ssif_info, flags);
> > 83af41947c5cbd Corey Minyard   2018-11-27  816  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  817  				 "Invalid response getting flags: %x %x\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  818  				 data[0], data[1]);
> > 259307074bfcf1 Corey Minyard   2012-03-19  819  		} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  820  			ssif_inc_stat(ssif_info, flag_fetches);
> > 259307074bfcf1 Corey Minyard   2012-03-19  821  			ssif_info->msg_flags = data[3];
> > 259307074bfcf1 Corey Minyard   2012-03-19  822  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  823  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  824  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  825  
> > 259307074bfcf1 Corey Minyard   2012-03-19  826  	case SSIF_CLEARING_FLAGS:
> > 259307074bfcf1 Corey Minyard   2012-03-19  827  		/* We cleared the flags. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  828  		if ((result < 0) || (len < 3) || (data[2] != 0)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  829  			/* Error clearing flags */
> > 83af41947c5cbd Corey Minyard   2018-11-27  830  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  831  				 "Error clearing flags: %d %d, %x\n",
> > f002612b9d8661 Kamlakant Patel 2018-03-13  832  				 result, len, (len >= 3) ? data[2] : 0);
> > 259307074bfcf1 Corey Minyard   2012-03-19  833  		} else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
> > 259307074bfcf1 Corey Minyard   2012-03-19  834  			   || data[1] != IPMI_CLEAR_MSG_FLAGS_CMD) {
> > 83af41947c5cbd Corey Minyard   2018-11-27  835  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  836  				 "Invalid response clearing flags: %x %x\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  837  				 data[0], data[1]);
> > 259307074bfcf1 Corey Minyard   2012-03-19  838  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  839  		ssif_info->ssif_state = SSIF_NORMAL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  840  		ipmi_ssif_unlock_cond(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  841  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  842  
> > 259307074bfcf1 Corey Minyard   2012-03-19  843  	case SSIF_GETTING_EVENTS:
> > 259307074bfcf1 Corey Minyard   2012-03-19  844  		if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  845  			/* Error getting event, probably done. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  846  			msg->done(msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  847  
> > 259307074bfcf1 Corey Minyard   2012-03-19  848  			/* Take off the event flag. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  849  			ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  850  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  851  		} else if (msg->rsp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
> > 259307074bfcf1 Corey Minyard   2012-03-19  852  			   || msg->rsp[1] != IPMI_READ_EVENT_MSG_BUFFER_CMD) {
> > 83af41947c5cbd Corey Minyard   2018-11-27  853  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  854  				 "Invalid response getting events: %x %x\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  855  				 msg->rsp[0], msg->rsp[1]);
> > 259307074bfcf1 Corey Minyard   2012-03-19  856  			msg->done(msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  857  			/* Take off the event flag. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  858  			ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  859  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  860  		} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  861  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  862  			ssif_inc_stat(ssif_info, events);
> > 259307074bfcf1 Corey Minyard   2012-03-19  863  			deliver_recv_msg(ssif_info, msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  864  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  865  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  866  
> > 259307074bfcf1 Corey Minyard   2012-03-19  867  	case SSIF_GETTING_MESSAGES:
> > 259307074bfcf1 Corey Minyard   2012-03-19  868  		if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  869  			/* Error getting event, probably done. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  870  			msg->done(msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  871  
> > 259307074bfcf1 Corey Minyard   2012-03-19  872  			/* Take off the msg flag. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  873  			ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  874  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  875  		} else if (msg->rsp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
> > 259307074bfcf1 Corey Minyard   2012-03-19  876  			   || msg->rsp[1] != IPMI_GET_MSG_CMD) {
> > 83af41947c5cbd Corey Minyard   2018-11-27  877  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  878  				 "Invalid response clearing flags: %x %x\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  879  				 msg->rsp[0], msg->rsp[1]);
> > 259307074bfcf1 Corey Minyard   2012-03-19  880  			msg->done(msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  881  
> > 259307074bfcf1 Corey Minyard   2012-03-19  882  			/* Take off the msg flag. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  883  			ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  884  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  885  		} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  886  			ssif_inc_stat(ssif_info, incoming_messages);
> > 259307074bfcf1 Corey Minyard   2012-03-19  887  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  888  			deliver_recv_msg(ssif_info, msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  889  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  890  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  891  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  892  
> > 259307074bfcf1 Corey Minyard   2012-03-19  893  	flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  894  	if (SSIF_IDLE(ssif_info) && !ssif_info->stopping) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  895  		if (ssif_info->req_events)
> > 259307074bfcf1 Corey Minyard   2012-03-19  896  			start_event_fetch(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  897  		else if (ssif_info->req_flags)
> > 259307074bfcf1 Corey Minyard   2012-03-19  898  			start_flag_fetch(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  899  		else
> > 259307074bfcf1 Corey Minyard   2012-03-19  900  			start_next_msg(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  901  	} else
> > 259307074bfcf1 Corey Minyard   2012-03-19  902  		ipmi_ssif_unlock_cond(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  903  
> > 259307074bfcf1 Corey Minyard   2012-03-19  904  	if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
> > 83af41947c5cbd Corey Minyard   2018-11-27  905  		dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  906  			"DONE 2: state = %d.\n", ssif_info->ssif_state);
> > 259307074bfcf1 Corey Minyard   2012-03-19  907  }
> > 259307074bfcf1 Corey Minyard   2012-03-19  908  
> > 
> > :::::: The code at line 781 was first introduced by commit
> > :::::: 259307074bfcf1ff88016e12c68f057aee6cb694 ipmi: Add SMBus interface driver (SSIF)
> > 
> > :::::: TO: Corey Minyard <cminyard@mvista.com>
> > :::::: CC: Corey Minyard <cminyard@mvista.com>
> > 
> > ---
> > 0-DAY kernel test infrastructure                 Open Source Technology Center
> > https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org Intel Corporation
> 
> 
> 
> -- 
>   Best regards,
>     Oleksandr Natalenko (post-factum)
>     Senior Software Maintenance Engineer
> 

WARNING: multiple messages have this Message-ID (diff)
From: Corey Minyard <cminyard@mvista.com>
To: Oleksandr Natalenko <oleksandr@redhat.com>
Cc: kbuild-all@lists.01.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Linux Memory Management List <linux-mm@kvack.org>,
	Jens Axboe <axboe@kernel.dk>
Subject: Re: [linux-next:master 4314/4896] drivers/char/ipmi/ipmi_ssif.c:781:3: note: in expansion of macro 'memcpy'
Date: Mon, 23 Dec 2019 10:45:12 -0600	[thread overview]
Message-ID: <20191223164512.GO7049@minyard.net> (raw)
In-Reply-To: <20191223111015.ztav74pbg7iz3t7z@butterfly.localdomain>

On Mon, Dec 23, 2019 at 12:10:15PM +0100, Oleksandr Natalenko wrote:
> /cc Corey and Jens.
> 
> On Sun, Dec 22, 2019 at 04:34:30AM +0800, kbuild test robot wrote:
> > tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> > head:   9f8535c5f75f0e23359962527dbfd31478b2cf16
> > commit: 933639f5723a15a13e2105603de9e240bae2f546 [4314/4896] init/Kconfig: enable -O3 for all arches
> > config: alpha-randconfig-a001-20191222 (attached as .config)
> > compiler: alpha-linux-gcc (GCC) 7.5.0
> > reproduce:
> >         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> >         chmod +x ~/bin/make.cross
> >         git checkout 933639f5723a15a13e2105603de9e240bae2f546
> >         # save the attached .config to linux build tree
> >         GCC_VERSION=7.5.0 make.cross ARCH=alpha 
> > 
> > If you fix the issue, kindly add following tag
> > Reported-by: kbuild test robot <lkp@intel.com>
> > 
> > All warnings (new ones prefixed by >>):
> > 
> >    In file included from include/linux/string.h:20:0,
> >                     from include/linux/bitmap.h:9,
> >                     from include/linux/nodemask.h:95,
> >                     from include/linux/mmzone.h:17,
> >                     from include/linux/gfp.h:6,
> >                     from include/linux/umh.h:4,
> >                     from include/linux/kmod.h:9,
> >                     from include/linux/module.h:16,
> >                     from drivers/char/ipmi/ipmi_ssif.c:37:
> >    drivers/char/ipmi/ipmi_ssif.c: In function 'msg_written_handler':
> >    arch/alpha/include/asm/string.h:22:16: warning: argument 2 null where non-null expected [-Wnonnull]
> >     #define memcpy __builtin_memcpy
> > >> drivers/char/ipmi/ipmi_ssif.c:781:3: note: in expansion of macro 'memcpy'
> >       memcpy(msg->rsp, data, msg->rsp_size);

This can't really happen, but I've queued a fix in my next tree to avoid
the warning.

Thanks,

-corey

> >       ^~~~~~
> >    arch/alpha/include/asm/string.h:22:16: note: in a call to built-in function '__builtin_memcpy'
> >     #define memcpy __builtin_memcpy
> > >> drivers/char/ipmi/ipmi_ssif.c:781:3: note: in expansion of macro 'memcpy'
> >       memcpy(msg->rsp, data, msg->rsp_size);
> >       ^~~~~~
> > --
> >    fs/io_uring.c: In function 'io_link_timeout_fn':
> > >> fs/io_uring.c:2831:2: warning: argument 2 null where non-null expected [-Wnonnull]
> >      io_put_req_find_next(req, nxt);
> >      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >    fs/io_uring.c:1036:13: note: in a call to function 'io_put_req_find_next' declared here
> >     static void io_put_req_find_next(struct io_kiocb *req, struct io_kiocb **nxtptr)
> >                 ^~~~~~~~~~~~~~~~~~~~
> > 
> > vim +/memcpy +781 drivers/char/ipmi/ipmi_ssif.c
> > 
> > 259307074bfcf1 Corey Minyard   2012-03-19  622  
> > 259307074bfcf1 Corey Minyard   2012-03-19  623  static void msg_done_handler(struct ssif_info *ssif_info, int result,
> > 259307074bfcf1 Corey Minyard   2012-03-19  624  			     unsigned char *data, unsigned int len)
> > 259307074bfcf1 Corey Minyard   2012-03-19  625  {
> > 259307074bfcf1 Corey Minyard   2012-03-19  626  	struct ipmi_smi_msg *msg;
> > 259307074bfcf1 Corey Minyard   2012-03-19  627  	unsigned long oflags, *flags;
> > 259307074bfcf1 Corey Minyard   2012-03-19  628  	int rv;
> > 259307074bfcf1 Corey Minyard   2012-03-19  629  
> > 259307074bfcf1 Corey Minyard   2012-03-19  630  	/*
> > 259307074bfcf1 Corey Minyard   2012-03-19  631  	 * We are single-threaded here, so no need for a lock until we
> > 259307074bfcf1 Corey Minyard   2012-03-19  632  	 * start messing with driver states or the queues.
> > 259307074bfcf1 Corey Minyard   2012-03-19  633  	 */
> > 259307074bfcf1 Corey Minyard   2012-03-19  634  
> > 259307074bfcf1 Corey Minyard   2012-03-19  635  	if (result < 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  636  		ssif_info->retries_left--;
> > 259307074bfcf1 Corey Minyard   2012-03-19  637  		if (ssif_info->retries_left > 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  638  			ssif_inc_stat(ssif_info, receive_retries);
> > 259307074bfcf1 Corey Minyard   2012-03-19  639  
> > 9162052173d238 Corey Minyard   2015-04-24  640  			flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
> > 9162052173d238 Corey Minyard   2015-04-24  641  			ssif_info->waiting_alert = true;
> > 9162052173d238 Corey Minyard   2015-04-24  642  			ssif_info->rtc_us_timer = SSIF_MSG_USEC;
> > 0711e8c1b4572d Jan Glauber     2018-10-11  643  			if (!ssif_info->stopping)
> > 259307074bfcf1 Corey Minyard   2012-03-19  644  				mod_timer(&ssif_info->retry_timer,
> > 259307074bfcf1 Corey Minyard   2012-03-19  645  					  jiffies + SSIF_MSG_JIFFIES);
> > 9162052173d238 Corey Minyard   2015-04-24  646  			ipmi_ssif_unlock_cond(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  647  			return;
> > 259307074bfcf1 Corey Minyard   2012-03-19  648  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  649  
> > 259307074bfcf1 Corey Minyard   2012-03-19  650  		ssif_inc_stat(ssif_info, receive_errors);
> > 259307074bfcf1 Corey Minyard   2012-03-19  651  
> > 259307074bfcf1 Corey Minyard   2012-03-19  652  		if  (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  653  			dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  654  				"%s: Error %d\n", __func__, result);
> > 259307074bfcf1 Corey Minyard   2012-03-19  655  		len = 0;
> > 259307074bfcf1 Corey Minyard   2012-03-19  656  		goto continue_op;
> > 259307074bfcf1 Corey Minyard   2012-03-19  657  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  658  
> > 259307074bfcf1 Corey Minyard   2012-03-19  659  	if ((len > 1) && (ssif_info->multi_pos == 0)
> > 259307074bfcf1 Corey Minyard   2012-03-19  660  				&& (data[0] == 0x00) && (data[1] == 0x01)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  661  		/* Start of multi-part read.  Start the next transaction. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  662  		int i;
> > 259307074bfcf1 Corey Minyard   2012-03-19  663  
> > 259307074bfcf1 Corey Minyard   2012-03-19  664  		ssif_inc_stat(ssif_info, received_message_parts);
> > 259307074bfcf1 Corey Minyard   2012-03-19  665  
> > 259307074bfcf1 Corey Minyard   2012-03-19  666  		/* Remove the multi-part read marker. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  667  		len -= 2;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  668  		data += 2;
> > 3d69d43baa2749 Corey Minyard   2015-04-29  669  		for (i = 0; i < len; i++)
> > 7d6380cd40f799 Corey Minyard   2018-11-16  670  			ssif_info->data[i] = data[i];
> > 259307074bfcf1 Corey Minyard   2012-03-19  671  		ssif_info->multi_len = len;
> > 259307074bfcf1 Corey Minyard   2012-03-19  672  		ssif_info->multi_pos = 1;
> > 259307074bfcf1 Corey Minyard   2012-03-19  673  
> > 259307074bfcf1 Corey Minyard   2012-03-19  674  		rv = ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ,
> > 259307074bfcf1 Corey Minyard   2012-03-19  675  				  SSIF_IPMI_MULTI_PART_RESPONSE_MIDDLE,
> > 259307074bfcf1 Corey Minyard   2012-03-19  676  				  ssif_info->recv, I2C_SMBUS_BLOCK_DATA);
> > 259307074bfcf1 Corey Minyard   2012-03-19  677  		if (rv < 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  678  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  679  				dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  680  					"Error from i2c_non_blocking_op(1)\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  681  
> > 259307074bfcf1 Corey Minyard   2012-03-19  682  			result = -EIO;
> > 259307074bfcf1 Corey Minyard   2012-03-19  683  		} else
> > 259307074bfcf1 Corey Minyard   2012-03-19  684  			return;
> > 259307074bfcf1 Corey Minyard   2012-03-19  685  	} else if (ssif_info->multi_pos) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  686  		/* Middle of multi-part read.  Start the next transaction. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  687  		int i;
> > 259307074bfcf1 Corey Minyard   2012-03-19  688  		unsigned char blocknum;
> > 259307074bfcf1 Corey Minyard   2012-03-19  689  
> > 259307074bfcf1 Corey Minyard   2012-03-19  690  		if (len == 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  691  			result = -EIO;
> > 259307074bfcf1 Corey Minyard   2012-03-19  692  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  693  				dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  694  					"Middle message with no data\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  695  
> > 259307074bfcf1 Corey Minyard   2012-03-19  696  			goto continue_op;
> > 259307074bfcf1 Corey Minyard   2012-03-19  697  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  698  
> > 3d69d43baa2749 Corey Minyard   2015-04-29  699  		blocknum = data[0];
> > 7d6380cd40f799 Corey Minyard   2018-11-16  700  		len--;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  701  		data++;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  702  
> > 7d6380cd40f799 Corey Minyard   2018-11-16  703  		if (blocknum != 0xff && len != 31) {
> > 7d6380cd40f799 Corey Minyard   2018-11-16  704  		    /* All blocks but the last must have 31 data bytes. */
> > 7d6380cd40f799 Corey Minyard   2018-11-16  705  			result = -EIO;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  706  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  707  				dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  708  					"Received middle message <31\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  709  
> > 7d6380cd40f799 Corey Minyard   2018-11-16  710  			goto continue_op;
> > 7d6380cd40f799 Corey Minyard   2018-11-16  711  		}
> > 7d6380cd40f799 Corey Minyard   2018-11-16  712  
> > 7d6380cd40f799 Corey Minyard   2018-11-16  713  		if (ssif_info->multi_len + len > IPMI_MAX_MSG_LENGTH) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  714  			/* Received message too big, abort the operation. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  715  			result = -E2BIG;
> > 259307074bfcf1 Corey Minyard   2012-03-19  716  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  717  				dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  718  					"Received message too big\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  719  
> > 259307074bfcf1 Corey Minyard   2012-03-19  720  			goto continue_op;
> > 259307074bfcf1 Corey Minyard   2012-03-19  721  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  722  
> > 3d69d43baa2749 Corey Minyard   2015-04-29  723  		for (i = 0; i < len; i++)
> > 7d6380cd40f799 Corey Minyard   2018-11-16  724  			ssif_info->data[i + ssif_info->multi_len] = data[i];
> > 259307074bfcf1 Corey Minyard   2012-03-19  725  		ssif_info->multi_len += len;
> > 259307074bfcf1 Corey Minyard   2012-03-19  726  		if (blocknum == 0xff) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  727  			/* End of read */
> > 259307074bfcf1 Corey Minyard   2012-03-19  728  			len = ssif_info->multi_len;
> > 259307074bfcf1 Corey Minyard   2012-03-19  729  			data = ssif_info->data;
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  730  		} else if (blocknum + 1 != ssif_info->multi_pos) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  731  			/*
> > 259307074bfcf1 Corey Minyard   2012-03-19  732  			 * Out of sequence block, just abort.  Block
> > 259307074bfcf1 Corey Minyard   2012-03-19  733  			 * numbers start at zero for the second block,
> > 259307074bfcf1 Corey Minyard   2012-03-19  734  			 * but multi_pos starts at one, so the +1.
> > 259307074bfcf1 Corey Minyard   2012-03-19  735  			 */
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  736  			if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  737  				dev_dbg(&ssif_info->client->dev,
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  738  					"Received message out of sequence, expected %u, got %u\n",
> > 55be8658c7e2fe Kamlakant Patel 2019-04-24  739  					ssif_info->multi_pos - 1, blocknum);
> > 259307074bfcf1 Corey Minyard   2012-03-19  740  			result = -EIO;
> > 259307074bfcf1 Corey Minyard   2012-03-19  741  		} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  742  			ssif_inc_stat(ssif_info, received_message_parts);
> > 259307074bfcf1 Corey Minyard   2012-03-19  743  
> > 259307074bfcf1 Corey Minyard   2012-03-19  744  			ssif_info->multi_pos++;
> > 259307074bfcf1 Corey Minyard   2012-03-19  745  
> > 259307074bfcf1 Corey Minyard   2012-03-19  746  			rv = ssif_i2c_send(ssif_info, msg_done_handler,
> > 259307074bfcf1 Corey Minyard   2012-03-19  747  					   I2C_SMBUS_READ,
> > 259307074bfcf1 Corey Minyard   2012-03-19  748  					   SSIF_IPMI_MULTI_PART_RESPONSE_MIDDLE,
> > 259307074bfcf1 Corey Minyard   2012-03-19  749  					   ssif_info->recv,
> > 259307074bfcf1 Corey Minyard   2012-03-19  750  					   I2C_SMBUS_BLOCK_DATA);
> > 259307074bfcf1 Corey Minyard   2012-03-19  751  			if (rv < 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  752  				if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
> > 83af41947c5cbd Corey Minyard   2018-11-27  753  					dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  754  						"Error from ssif_i2c_send\n");
> > 259307074bfcf1 Corey Minyard   2012-03-19  755  
> > 259307074bfcf1 Corey Minyard   2012-03-19  756  				result = -EIO;
> > 259307074bfcf1 Corey Minyard   2012-03-19  757  			} else
> > 259307074bfcf1 Corey Minyard   2012-03-19  758  				return;
> > 259307074bfcf1 Corey Minyard   2012-03-19  759  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  760  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  761  
> > 7d6380cd40f799 Corey Minyard   2018-11-16  762   continue_op:
> > 259307074bfcf1 Corey Minyard   2012-03-19  763  	if (result < 0) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  764  		ssif_inc_stat(ssif_info, receive_errors);
> > 259307074bfcf1 Corey Minyard   2012-03-19  765  	} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  766  		ssif_inc_stat(ssif_info, received_messages);
> > 259307074bfcf1 Corey Minyard   2012-03-19  767  		ssif_inc_stat(ssif_info, received_message_parts);
> > 259307074bfcf1 Corey Minyard   2012-03-19  768  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  769  
> > 259307074bfcf1 Corey Minyard   2012-03-19  770  	if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
> > 83af41947c5cbd Corey Minyard   2018-11-27  771  		dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  772  			"DONE 1: state = %d, result=%d\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  773  			ssif_info->ssif_state, result);
> > 259307074bfcf1 Corey Minyard   2012-03-19  774  
> > 259307074bfcf1 Corey Minyard   2012-03-19  775  	flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  776  	msg = ssif_info->curr_msg;
> > 259307074bfcf1 Corey Minyard   2012-03-19  777  	if (msg) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  778  		msg->rsp_size = len;
> > 259307074bfcf1 Corey Minyard   2012-03-19  779  		if (msg->rsp_size > IPMI_MAX_MSG_LENGTH)
> > 259307074bfcf1 Corey Minyard   2012-03-19  780  			msg->rsp_size = IPMI_MAX_MSG_LENGTH;
> > 259307074bfcf1 Corey Minyard   2012-03-19 @781  		memcpy(msg->rsp, data, msg->rsp_size);
> > 259307074bfcf1 Corey Minyard   2012-03-19  782  		ssif_info->curr_msg = NULL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  783  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  784  
> > 259307074bfcf1 Corey Minyard   2012-03-19  785  	switch (ssif_info->ssif_state) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  786  	case SSIF_NORMAL:
> > 259307074bfcf1 Corey Minyard   2012-03-19  787  		ipmi_ssif_unlock_cond(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  788  		if (!msg)
> > 259307074bfcf1 Corey Minyard   2012-03-19  789  			break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  790  
> > 259307074bfcf1 Corey Minyard   2012-03-19  791  		if (result < 0)
> > 259307074bfcf1 Corey Minyard   2012-03-19  792  			return_hosed_msg(ssif_info, msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  793  		else
> > 259307074bfcf1 Corey Minyard   2012-03-19  794  			deliver_recv_msg(ssif_info, msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  795  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  796  
> > 259307074bfcf1 Corey Minyard   2012-03-19  797  	case SSIF_GETTING_FLAGS:
> > 259307074bfcf1 Corey Minyard   2012-03-19  798  		/* We got the flags from the SSIF, now handle them. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  799  		if ((result < 0) || (len < 4) || (data[2] != 0)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  800  			/*
> > 259307074bfcf1 Corey Minyard   2012-03-19  801  			 * Error fetching flags, or invalid length,
> > 259307074bfcf1 Corey Minyard   2012-03-19  802  			 * just give up for now.
> > 259307074bfcf1 Corey Minyard   2012-03-19  803  			 */
> > 259307074bfcf1 Corey Minyard   2012-03-19  804  			ssif_info->ssif_state = SSIF_NORMAL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  805  			ipmi_ssif_unlock_cond(ssif_info, flags);
> > 83af41947c5cbd Corey Minyard   2018-11-27  806  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  807  				 "Error getting flags: %d %d, %x\n",
> > f002612b9d8661 Kamlakant Patel 2018-03-13  808  				 result, len, (len >= 3) ? data[2] : 0);
> > 259307074bfcf1 Corey Minyard   2012-03-19  809  		} else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
> > 259307074bfcf1 Corey Minyard   2012-03-19  810  			   || data[1] != IPMI_GET_MSG_FLAGS_CMD) {
> > 4495ec6d770e1b Corey Minyard   2017-06-30  811  			/*
> > 4495ec6d770e1b Corey Minyard   2017-06-30  812  			 * Don't abort here, maybe it was a queued
> > 4495ec6d770e1b Corey Minyard   2017-06-30  813  			 * response to a previous command.
> > 4495ec6d770e1b Corey Minyard   2017-06-30  814  			 */
> > 4495ec6d770e1b Corey Minyard   2017-06-30  815  			ipmi_ssif_unlock_cond(ssif_info, flags);
> > 83af41947c5cbd Corey Minyard   2018-11-27  816  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  817  				 "Invalid response getting flags: %x %x\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  818  				 data[0], data[1]);
> > 259307074bfcf1 Corey Minyard   2012-03-19  819  		} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  820  			ssif_inc_stat(ssif_info, flag_fetches);
> > 259307074bfcf1 Corey Minyard   2012-03-19  821  			ssif_info->msg_flags = data[3];
> > 259307074bfcf1 Corey Minyard   2012-03-19  822  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  823  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  824  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  825  
> > 259307074bfcf1 Corey Minyard   2012-03-19  826  	case SSIF_CLEARING_FLAGS:
> > 259307074bfcf1 Corey Minyard   2012-03-19  827  		/* We cleared the flags. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  828  		if ((result < 0) || (len < 3) || (data[2] != 0)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  829  			/* Error clearing flags */
> > 83af41947c5cbd Corey Minyard   2018-11-27  830  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  831  				 "Error clearing flags: %d %d, %x\n",
> > f002612b9d8661 Kamlakant Patel 2018-03-13  832  				 result, len, (len >= 3) ? data[2] : 0);
> > 259307074bfcf1 Corey Minyard   2012-03-19  833  		} else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
> > 259307074bfcf1 Corey Minyard   2012-03-19  834  			   || data[1] != IPMI_CLEAR_MSG_FLAGS_CMD) {
> > 83af41947c5cbd Corey Minyard   2018-11-27  835  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  836  				 "Invalid response clearing flags: %x %x\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  837  				 data[0], data[1]);
> > 259307074bfcf1 Corey Minyard   2012-03-19  838  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  839  		ssif_info->ssif_state = SSIF_NORMAL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  840  		ipmi_ssif_unlock_cond(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  841  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  842  
> > 259307074bfcf1 Corey Minyard   2012-03-19  843  	case SSIF_GETTING_EVENTS:
> > 259307074bfcf1 Corey Minyard   2012-03-19  844  		if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  845  			/* Error getting event, probably done. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  846  			msg->done(msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  847  
> > 259307074bfcf1 Corey Minyard   2012-03-19  848  			/* Take off the event flag. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  849  			ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  850  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  851  		} else if (msg->rsp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
> > 259307074bfcf1 Corey Minyard   2012-03-19  852  			   || msg->rsp[1] != IPMI_READ_EVENT_MSG_BUFFER_CMD) {
> > 83af41947c5cbd Corey Minyard   2018-11-27  853  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  854  				 "Invalid response getting events: %x %x\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  855  				 msg->rsp[0], msg->rsp[1]);
> > 259307074bfcf1 Corey Minyard   2012-03-19  856  			msg->done(msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  857  			/* Take off the event flag. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  858  			ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  859  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  860  		} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  861  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  862  			ssif_inc_stat(ssif_info, events);
> > 259307074bfcf1 Corey Minyard   2012-03-19  863  			deliver_recv_msg(ssif_info, msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  864  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  865  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  866  
> > 259307074bfcf1 Corey Minyard   2012-03-19  867  	case SSIF_GETTING_MESSAGES:
> > 259307074bfcf1 Corey Minyard   2012-03-19  868  		if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  869  			/* Error getting event, probably done. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  870  			msg->done(msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  871  
> > 259307074bfcf1 Corey Minyard   2012-03-19  872  			/* Take off the msg flag. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  873  			ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  874  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  875  		} else if (msg->rsp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
> > 259307074bfcf1 Corey Minyard   2012-03-19  876  			   || msg->rsp[1] != IPMI_GET_MSG_CMD) {
> > 83af41947c5cbd Corey Minyard   2018-11-27  877  			dev_warn(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  878  				 "Invalid response clearing flags: %x %x\n",
> > 259307074bfcf1 Corey Minyard   2012-03-19  879  				 msg->rsp[0], msg->rsp[1]);
> > 259307074bfcf1 Corey Minyard   2012-03-19  880  			msg->done(msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  881  
> > 259307074bfcf1 Corey Minyard   2012-03-19  882  			/* Take off the msg flag. */
> > 259307074bfcf1 Corey Minyard   2012-03-19  883  			ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
> > 259307074bfcf1 Corey Minyard   2012-03-19  884  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  885  		} else {
> > 259307074bfcf1 Corey Minyard   2012-03-19  886  			ssif_inc_stat(ssif_info, incoming_messages);
> > 259307074bfcf1 Corey Minyard   2012-03-19  887  			handle_flags(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  888  			deliver_recv_msg(ssif_info, msg);
> > 259307074bfcf1 Corey Minyard   2012-03-19  889  		}
> > 259307074bfcf1 Corey Minyard   2012-03-19  890  		break;
> > 259307074bfcf1 Corey Minyard   2012-03-19  891  	}
> > 259307074bfcf1 Corey Minyard   2012-03-19  892  
> > 259307074bfcf1 Corey Minyard   2012-03-19  893  	flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  894  	if (SSIF_IDLE(ssif_info) && !ssif_info->stopping) {
> > 259307074bfcf1 Corey Minyard   2012-03-19  895  		if (ssif_info->req_events)
> > 259307074bfcf1 Corey Minyard   2012-03-19  896  			start_event_fetch(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  897  		else if (ssif_info->req_flags)
> > 259307074bfcf1 Corey Minyard   2012-03-19  898  			start_flag_fetch(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  899  		else
> > 259307074bfcf1 Corey Minyard   2012-03-19  900  			start_next_msg(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  901  	} else
> > 259307074bfcf1 Corey Minyard   2012-03-19  902  		ipmi_ssif_unlock_cond(ssif_info, flags);
> > 259307074bfcf1 Corey Minyard   2012-03-19  903  
> > 259307074bfcf1 Corey Minyard   2012-03-19  904  	if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
> > 83af41947c5cbd Corey Minyard   2018-11-27  905  		dev_dbg(&ssif_info->client->dev,
> > 83af41947c5cbd Corey Minyard   2018-11-27  906  			"DONE 2: state = %d.\n", ssif_info->ssif_state);
> > 259307074bfcf1 Corey Minyard   2012-03-19  907  }
> > 259307074bfcf1 Corey Minyard   2012-03-19  908  
> > 
> > :::::: The code at line 781 was first introduced by commit
> > :::::: 259307074bfcf1ff88016e12c68f057aee6cb694 ipmi: Add SMBus interface driver (SSIF)
> > 
> > :::::: TO: Corey Minyard <cminyard@mvista.com>
> > :::::: CC: Corey Minyard <cminyard@mvista.com>
> > 
> > ---
> > 0-DAY kernel test infrastructure                 Open Source Technology Center
> > https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation
> 
> 
> 
> -- 
>   Best regards,
>     Oleksandr Natalenko (post-factum)
>     Senior Software Maintenance Engineer
> 


  reply	other threads:[~2019-12-23 16:45 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-21 20:34 [linux-next:master 4314/4896] drivers/char/ipmi/ipmi_ssif.c:781:3: note: in expansion of macro 'memcpy' kbuild test robot
2019-12-21 20:34 ` kbuild test robot
2019-12-23 11:10 ` Oleksandr Natalenko
2019-12-23 11:10   ` Oleksandr Natalenko
2019-12-23 16:45   ` Corey Minyard [this message]
2019-12-23 16:45     ` Corey Minyard
2019-12-23 20:54 ` Andrew Morton
2019-12-23 20:54   ` Andrew Morton
2019-12-23 23:37   ` minyard

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=20191223164512.GO7049@minyard.net \
    --to=cminyard@mvista.com \
    --cc=kbuild-all@lists.01.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.