tree:   https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git 
testing/next
head:   4929fb631d4cedc385910fd998518e22bd71d680
commit: 562d8eeed9a6bb9ca3370a3f75d96f0e7ba0a059 [6/16] usb/gadget/NCM: Replace 
tasklet with softirq hrtimer
config: i386-randconfig-x073-201749 (attached as .config)
compiler: gcc-7 (Debian 7.2.0-12) 7.2.1 20171025
reproduce:
        git checkout 562d8eeed9a6bb9ca3370a3f75d96f0e7ba0a059
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   drivers/usb/gadget/function/f_ncm.c: In function 'ncm_wrap_ntb':
>> drivers/usb/gadget/function/f_ncm.c:1105:10: error: 'HRTIMER_MODE_REL_SOFT' 
>> undeclared (first use in this function); did you mean 'HRTIMER_MODE_REL'?
             HRTIMER_MODE_REL_SOFT);
             ^~~~~~~~~~~~~~~~~~~~~
             HRTIMER_MODE_REL
   drivers/usb/gadget/function/f_ncm.c:1105:10: note: each undeclared 
identifier is reported only once for each function it appears in
   drivers/usb/gadget/function/f_ncm.c: In function 'ncm_bind':
   drivers/usb/gadget/function/f_ncm.c:1502:50: error: 'HRTIMER_MODE_REL_SOFT' 
undeclared (first use in this function); did you mean 'HRTIMER_MODE_REL'?
     hrtimer_init(&ncm->task_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_SOFT);
                                                     ^~~~~~~~~~~~~~~~~~~~~
                                                     HRTIMER_MODE_REL

vim +1105 drivers/usb/gadget/function/f_ncm.c

  1011  
  1012  static struct sk_buff *ncm_wrap_ntb(struct gether *port,
  1013                                      struct sk_buff *skb)
  1014  {
  1015          struct f_ncm    *ncm = func_to_ncm(&port->func);
  1016          struct sk_buff  *skb2 = NULL;
  1017          int             ncb_len = 0;
  1018          __le16          *ntb_data;
  1019          __le16          *ntb_ndp;
  1020          int             dgram_pad;
  1021  
  1022          unsigned        max_size = ncm->port.fixed_in_len;
  1023          const struct ndp_parser_opts *opts = ncm->parser_opts;
  1024          const int ndp_align = 
le16_to_cpu(ntb_parameters.wNdpInAlignment);
  1025          const int div = le16_to_cpu(ntb_parameters.wNdpInDivisor);
  1026          const int rem = 
le16_to_cpu(ntb_parameters.wNdpInPayloadRemainder);
  1027          const int dgram_idx_len = 2 * 2 * opts->dgram_item_len;
  1028  
  1029          if (!skb && !ncm->skb_tx_data)
  1030                  return NULL;
  1031  
  1032          if (skb) {
  1033                  /* Add the CRC if required up front */
  1034                  if (ncm->is_crc) {
  1035                          uint32_t        crc;
  1036                          __le16          *crc_pos;
  1037  
  1038                          crc = ~crc32_le(~0,
  1039                                          skb->data,
  1040                                          skb->len);
  1041                          crc_pos = skb_put(skb, sizeof(uint32_t));
  1042                          put_unaligned_le32(crc, crc_pos);
  1043                  }
  1044  
  1045                  /* If the new skb is too big for the current NCM NTB 
then
  1046                   * set the current stored skb to be sent now and clear 
it
  1047                   * ready for new data.
  1048                   * NOTE: Assume maximum align for speed of calculation.
  1049                   */
  1050                  if (ncm->skb_tx_data
  1051                      && (ncm->ndp_dgram_count >= TX_MAX_NUM_DPE
  1052                      || (ncm->skb_tx_data->len +
  1053                      div + rem + skb->len +
  1054                      ncm->skb_tx_ndp->len + ndp_align + (2 * 
dgram_idx_len))
  1055                      > max_size)) {
  1056                          skb2 = package_for_tx(ncm);
  1057                          if (!skb2)
  1058                                  goto err;
  1059                  }
  1060  
  1061                  if (!ncm->skb_tx_data) {
  1062                          ncb_len = opts->nth_size;
  1063                          dgram_pad = ALIGN(ncb_len, div) + rem - ncb_len;
  1064                          ncb_len += dgram_pad;
  1065  
  1066                          /* Create a new skb for the NTH and datagrams. 
*/
  1067                          ncm->skb_tx_data = alloc_skb(max_size, 
GFP_ATOMIC);
  1068                          if (!ncm->skb_tx_data)
  1069                                  goto err;
  1070  
  1071                          ncm->skb_tx_data->dev = ncm->netdev;
  1072                          ntb_data = skb_put_zero(ncm->skb_tx_data, 
ncb_len);
  1073                          /* dwSignature */
  1074                          put_unaligned_le32(opts->nth_sign, ntb_data);
  1075                          ntb_data += 2;
  1076                          /* wHeaderLength */
  1077                          put_unaligned_le16(opts->nth_size, ntb_data++);
  1078  
  1079                          /* Allocate an skb for storing the NDP,
  1080                           * TX_MAX_NUM_DPE should easily suffice for a
  1081                           * 16k packet.
  1082                           */
  1083                          ncm->skb_tx_ndp = alloc_skb((int)(opts->ndp_size
  1084                                                      + opts->dpe_size
  1085                                                      * TX_MAX_NUM_DPE),
  1086                                                      GFP_ATOMIC);
  1087                          if (!ncm->skb_tx_ndp)
  1088                                  goto err;
  1089  
  1090                          ncm->skb_tx_ndp->dev = ncm->netdev;
  1091                          ntb_ndp = skb_put(ncm->skb_tx_ndp, 
opts->ndp_size);
  1092                          memset(ntb_ndp, 0, ncb_len);
  1093                          /* dwSignature */
  1094                          put_unaligned_le32(ncm->ndp_sign, ntb_ndp);
  1095                          ntb_ndp += 2;
  1096  
  1097                          /* There is always a zeroed entry */
  1098                          ncm->ndp_dgram_count = 1;
  1099  
  1100                          /* Note: we skip opts->next_ndp_index */
  1101                  }
  1102  
  1103                  /* Delay the timer. */
  1104                  hrtimer_start(&ncm->task_timer, TX_TIMEOUT_NSECS,
> 1105                                HRTIMER_MODE_REL_SOFT);
  1106  
  1107                  /* Add the datagram position entries */
  1108                  ntb_ndp = skb_put_zero(ncm->skb_tx_ndp, dgram_idx_len);
  1109  
  1110                  ncb_len = ncm->skb_tx_data->len;
  1111                  dgram_pad = ALIGN(ncb_len, div) + rem - ncb_len;
  1112                  ncb_len += dgram_pad;
  1113  
  1114                  /* (d)wDatagramIndex */
  1115                  put_ncm(&ntb_ndp, opts->dgram_item_len, ncb_len);
  1116                  /* (d)wDatagramLength */
  1117                  put_ncm(&ntb_ndp, opts->dgram_item_len, skb->len);
  1118                  ncm->ndp_dgram_count++;
  1119  
  1120                  /* Add the new data to the skb */
  1121                  skb_put_zero(ncm->skb_tx_data, dgram_pad);
  1122                  skb_put_data(ncm->skb_tx_data, skb->data, skb->len);
  1123                  dev_consume_skb_any(skb);
  1124                  skb = NULL;
  1125  
  1126          } else if (ncm->skb_tx_data && ncm->timer_force_tx) {
  1127                  /* If the tx was requested because of a timeout then 
send */
  1128                  skb2 = package_for_tx(ncm);
  1129                  if (!skb2)
  1130                          goto err;
  1131          }
  1132  
  1133          return skb2;
  1134  
  1135  err:
  1136          ncm->netdev->stats.tx_dropped++;
  1137  
  1138          if (skb)
  1139                  dev_kfree_skb_any(skb);
  1140          if (ncm->skb_tx_data)
  1141                  dev_kfree_skb_any(ncm->skb_tx_data);
  1142          if (ncm->skb_tx_ndp)
  1143                  dev_kfree_skb_any(ncm->skb_tx_ndp);
  1144  
  1145          return NULL;
  1146  }
  1147  

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

Attachment: .config.gz
Description: application/gzip

Reply via email to