Hi Ganapathi,

[auto build test ERROR on v4.6-rc1]
[also build test ERROR on next-20160401]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:    
https://github.com/0day-ci/linux/commits/Amitkumar-Karwar/Bluetooth-hci_uart-Support-firmware-download-for-Marvell/20160331-200638
config: x86_64-randconfig-s0-04022220 (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

>> drivers/bluetooth/hci_mrvl.c:136:33: error: array type has incomplete 
>> element type 'struct h4_recv_pkt'
    static const struct h4_recv_pkt mrvl_recv_pkts[] = {
                                    ^
>> drivers/bluetooth/hci_mrvl.c:137:4: error: 'H4_RECV_ACL' undeclared here 
>> (not in a function)
     { H4_RECV_ACL,   .recv = hci_recv_frame },
       ^
>> drivers/bluetooth/hci_mrvl.c:137:19: error: field name not in record or 
>> union initializer
     { H4_RECV_ACL,   .recv = hci_recv_frame },
                      ^
   drivers/bluetooth/hci_mrvl.c:137:19: note: (near initialization for 
'mrvl_recv_pkts')
>> drivers/bluetooth/hci_mrvl.c:138:4: error: 'H4_RECV_SCO' undeclared here 
>> (not in a function)
     { H4_RECV_SCO,   .recv = hci_recv_frame },
       ^
   drivers/bluetooth/hci_mrvl.c:138:19: error: field name not in record or 
union initializer
     { H4_RECV_SCO,   .recv = hci_recv_frame },
                      ^
   drivers/bluetooth/hci_mrvl.c:138:19: note: (near initialization for 
'mrvl_recv_pkts')
>> drivers/bluetooth/hci_mrvl.c:139:4: error: 'H4_RECV_EVENT' undeclared here 
>> (not in a function)
     { H4_RECV_EVENT, .recv = hci_recv_frame },
       ^
   drivers/bluetooth/hci_mrvl.c:139:19: error: field name not in record or 
union initializer
     { H4_RECV_EVENT, .recv = hci_recv_frame },
                      ^
   drivers/bluetooth/hci_mrvl.c:139:19: note: (near initialization for 
'mrvl_recv_pkts')
   drivers/bluetooth/hci_mrvl.c: In function 'mrvl_recv':
>> drivers/bluetooth/hci_mrvl.c:244:17: error: implicit declaration of function 
>> 'h4_recv_buf' [-Werror=implicit-function-declaration]
     mrvl->rx_skb = h4_recv_buf(hu->hdev, mrvl->rx_skb, data, count,
                    ^
   In file included from include/linux/thread_info.h:11:0,
                    from arch/x86/include/asm/preempt.h:6,
                    from include/linux/preempt.h:59,
                    from include/linux/spinlock.h:50,
                    from include/linux/seqlock.h:35,
                    from include/linux/time.h:5,
                    from include/linux/stat.h:18,
                    from include/linux/module.h:10,
                    from drivers/bluetooth/hci_mrvl.c:22:
>> include/linux/bug.h:34:45: error: bit-field '<anonymous>' width not an 
>> integer constant
    #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
                                                ^
   include/linux/compiler-gcc.h:64:28: note: in expansion of macro 
'BUILD_BUG_ON_ZERO'
    #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
                               ^
   include/linux/kernel.h:54:59: note: in expansion of macro '__must_be_array'
    #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + 
__must_be_array(arr))
                                                              ^
>> drivers/bluetooth/hci_mrvl.c:245:24: note: in expansion of macro 'ARRAY_SIZE'
           mrvl_recv_pkts, ARRAY_SIZE(mrvl_recv_pkts));
                           ^
   drivers/bluetooth/hci_mrvl.c: At top level:
>> drivers/bluetooth/hci_mrvl.c:136:33: warning: 'mrvl_recv_pkts' defined but 
>> not used [-Wunused-variable]
    static const struct h4_recv_pkt mrvl_recv_pkts[] = {
                                    ^
   cc1: some warnings being treated as errors

vim +136 drivers/bluetooth/hci_mrvl.c

   130          memcpy(skb_push(skb, 1), &hci_skb_pkt_type(skb), 1);
   131          skb_queue_tail(&mrvl->txq, skb);
   132  
   133          return 0;
   134  }
   135  
 > 136  static const struct h4_recv_pkt mrvl_recv_pkts[] = {
 > 137          { H4_RECV_ACL,   .recv = hci_recv_frame },
 > 138          { H4_RECV_SCO,   .recv = hci_recv_frame },
 > 139          { H4_RECV_EVENT, .recv = hci_recv_frame },
   140  };
   141  
   142  /* Send ACK/NAK to the device */
   143  static void mrvl_send_ack(struct hci_uart *hu, unsigned char ack)
   144  {
   145          struct tty_struct *tty = hu->tty;
   146  
   147          tty->ops->write(tty, &ack, sizeof(ack));
   148  }
   149  
   150  /* Validate the feedback data from device */
   151  static void mrvl_pkt_complete(struct hci_uart *hu, struct sk_buff *skb)
   152  {
   153          struct mrvl_data *mrvl = hu->priv;
   154          struct fw_data *fw_data = mrvl->fwdata;
   155          u8 buf[MRVL_FW_HDR_LEN];
   156          u16 lhs, rhs;
   157  
   158          memcpy(buf, skb->data, skb->len);
   159  
   160          lhs = le16_to_cpu(*((__le16 *)(&buf[1])));
   161          rhs = le16_to_cpu(*((__le16 *)(&buf[3])));
   162          if ((lhs ^ rhs) == 0xffff) {
   163                  mrvl_send_ack(hu, MRVL_ACK);
   164                  fw_data->wait_fw = 1;
   165                  fw_data->next_len = lhs;
   166                  /*firmware download is done, send the last ack*/
   167                  if (!lhs)
   168                          fw_data->last_ack = 1;
   169  
   170                  if (unlikely(fw_data->expected_ack == 
MRVL_HDR_CHIP_VER)) {
   171                          fw_data->chip_id = *((u8 *)(&buf[1]));
   172                          fw_data->chip_rev = *((u8 *)(&buf[2]));
   173                  }
   174                  wake_up_interruptible(&fw_data->init_wait_q);
   175          } else {
   176                  mrvl_send_ack(hu, MRVL_NAK);
   177          }
   178  }
   179  
   180  /* This function receives data from the uart device during firmware 
download.
   181   * Driver expects 5 bytes of data as per the protocal in the below 
format:
   182   * <HEADER><BYTE_1><BYTE_2><BYTE_3><BYTE_4>
   183   * BYTE_3 and BYTE_4 are compliment of BYTE_1 an BYTE_2. Data can come 
in chunks
   184   * of any length. If length received is < 5, accumulate the data in an 
array,
   185   * until we have a sequence of 5 bytes, starting with the expected 
HEADER. If
   186   * the length received is > 5  bytes, then get the first 5 bytes, 
starting with
   187   * the HEADER and process the same, ignoring the rest of the bytes as 
per the
   188   * protocal.
   189   */
   190  static struct sk_buff *mrvl_process_fw_data(struct hci_uart *hu,
   191                                              struct sk_buff *skb,
   192                                              u8 *buf, int count)
   193  {
   194          struct mrvl_data *mrvl = hu->priv;
   195          struct fw_data *fw_data = mrvl->fwdata;
   196          int i = 0, len;
   197  
   198          if (!skb) {
   199                  while (buf[i] != fw_data->expected_ack && i < count)
   200                          i++;
   201                  if (i == count)
   202                          return ERR_PTR(-EILSEQ);
   203  
   204                  skb = bt_skb_alloc(MRVL_FW_HDR_LEN, GFP_KERNEL);
   205          }
   206  
   207          if (!skb)
   208                  return ERR_PTR(-ENOMEM);
   209  
   210          len = count - i;
   211          memcpy(skb_put(skb, len), &buf[i], len);
   212  
   213          if (skb->len == MRVL_FW_HDR_LEN) {
   214                  mrvl_pkt_complete(hu, skb);
   215                  kfree_skb(skb);
   216                  skb = NULL;
   217          }
   218  
   219          return skb;
   220  }
   221  
   222  /* Receive data */
   223  static int mrvl_recv(struct hci_uart *hu, const void *data, int count)
   224  {
   225          struct mrvl_data *mrvl = hu->priv;
   226  
   227          if (test_bit(HCI_UART_DNLD_FW, &mrvl->flags)) {
   228                  mrvl->fwdata->skb = mrvl_process_fw_data(hu, 
mrvl->fwdata->skb,
   229                                                           (u8 *)data, 
count);
   230                  if (IS_ERR(mrvl->fwdata->skb)) {
   231                          int err = PTR_ERR(mrvl->fwdata->skb);
   232  
   233                          bt_dev_err(hu->hdev,
   234                                     "Receive firmware data failed (%d)", 
err);
   235                          mrvl->fwdata->skb = NULL;
   236                          return err;
   237                  }
   238                  return 0;
   239          }
   240  
   241          if (!test_bit(HCI_UART_REGISTERED, &hu->flags))
   242                  return -EUNATCH;
   243  
 > 244          mrvl->rx_skb = h4_recv_buf(hu->hdev, mrvl->rx_skb, data, count,
 > 245                                     mrvl_recv_pkts, 
 > ARRAY_SIZE(mrvl_recv_pkts));
   246          if (IS_ERR(mrvl->rx_skb)) {
   247                  int err = PTR_ERR(mrvl->rx_skb);
   248  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: Binary data

Reply via email to