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
>
next prev parent 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.