tree: https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git testing/next head: f463883ae099b7e98e8ea0a6b9c8dbd05217d94a commit: 4e4a058b2f048b009b7826e6404ec5133563417e [45/52] usb/gadget/NCM: Replace tasklet with softirq hrtimer config: x86_64-randconfig-x014-201743 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: git checkout 4e4a058b2f048b009b7826e6404ec5133563417e # save the attached .config to linux build tree make ARCH=x86_64
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:1109:10: error: 'HRTIMER_MODE_REL_SOFT'
>> undeclared (first use in this function)
HRTIMER_MODE_REL_SOFT);
^~~~~~~~~~~~~~~~~~~~~
drivers/usb/gadget/function/f_ncm.c:1109: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:1506:50: error: 'HRTIMER_MODE_REL_SOFT'
undeclared (first use in this function)
hrtimer_init(&ncm->task_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_SOFT);
^~~~~~~~~~~~~~~~~~~~~
vim +/HRTIMER_MODE_REL_SOFT +1109 drivers/usb/gadget/function/f_ncm.c
1015
1016 static struct sk_buff *ncm_wrap_ntb(struct gether *port,
1017 struct sk_buff *skb)
1018 {
1019 struct f_ncm *ncm = func_to_ncm(&port->func);
1020 struct sk_buff *skb2 = NULL;
1021 int ncb_len = 0;
1022 __le16 *ntb_data;
1023 __le16 *ntb_ndp;
1024 int dgram_pad;
1025
1026 unsigned max_size = ncm->port.fixed_in_len;
1027 const struct ndp_parser_opts *opts = ncm->parser_opts;
1028 const int ndp_align =
le16_to_cpu(ntb_parameters.wNdpInAlignment);
1029 const int div = le16_to_cpu(ntb_parameters.wNdpInDivisor);
1030 const int rem =
le16_to_cpu(ntb_parameters.wNdpInPayloadRemainder);
1031 const int dgram_idx_len = 2 * 2 * opts->dgram_item_len;
1032
1033 if (!skb && !ncm->skb_tx_data)
1034 return NULL;
1035
1036 if (skb) {
1037 /* Add the CRC if required up front */
1038 if (ncm->is_crc) {
1039 uint32_t crc;
1040 __le16 *crc_pos;
1041
1042 crc = ~crc32_le(~0,
1043 skb->data,
1044 skb->len);
1045 crc_pos = skb_put(skb, sizeof(uint32_t));
1046 put_unaligned_le32(crc, crc_pos);
1047 }
1048
1049 /* If the new skb is too big for the current NCM NTB
then
1050 * set the current stored skb to be sent now and clear
it
1051 * ready for new data.
1052 * NOTE: Assume maximum align for speed of calculation.
1053 */
1054 if (ncm->skb_tx_data
1055 && (ncm->ndp_dgram_count >= TX_MAX_NUM_DPE
1056 || (ncm->skb_tx_data->len +
1057 div + rem + skb->len +
1058 ncm->skb_tx_ndp->len + ndp_align + (2 *
dgram_idx_len))
1059 > max_size)) {
1060 skb2 = package_for_tx(ncm);
1061 if (!skb2)
1062 goto err;
1063 }
1064
1065 if (!ncm->skb_tx_data) {
1066 ncb_len = opts->nth_size;
1067 dgram_pad = ALIGN(ncb_len, div) + rem - ncb_len;
1068 ncb_len += dgram_pad;
1069
1070 /* Create a new skb for the NTH and datagrams.
*/
1071 ncm->skb_tx_data = alloc_skb(max_size,
GFP_ATOMIC);
1072 if (!ncm->skb_tx_data)
1073 goto err;
1074
1075 ncm->skb_tx_data->dev = ncm->netdev;
1076 ntb_data = skb_put_zero(ncm->skb_tx_data,
ncb_len);
1077 /* dwSignature */
1078 put_unaligned_le32(opts->nth_sign, ntb_data);
1079 ntb_data += 2;
1080 /* wHeaderLength */
1081 put_unaligned_le16(opts->nth_size, ntb_data++);
1082
1083 /* Allocate an skb for storing the NDP,
1084 * TX_MAX_NUM_DPE should easily suffice for a
1085 * 16k packet.
1086 */
1087 ncm->skb_tx_ndp = alloc_skb((int)(opts->ndp_size
1088 + opts->dpe_size
1089 * TX_MAX_NUM_DPE),
1090 GFP_ATOMIC);
1091 if (!ncm->skb_tx_ndp)
1092 goto err;
1093
1094 ncm->skb_tx_ndp->dev = ncm->netdev;
1095 ntb_ndp = skb_put(ncm->skb_tx_ndp,
opts->ndp_size);
1096 memset(ntb_ndp, 0, ncb_len);
1097 /* dwSignature */
1098 put_unaligned_le32(ncm->ndp_sign, ntb_ndp);
1099 ntb_ndp += 2;
1100
1101 /* There is always a zeroed entry */
1102 ncm->ndp_dgram_count = 1;
1103
1104 /* Note: we skip opts->next_ndp_index */
1105 }
1106
1107 /* Delay the timer. */
1108 hrtimer_start(&ncm->task_timer, TX_TIMEOUT_NSECS,
> 1109 HRTIMER_MODE_REL_SOFT);
1110
1111 /* Add the datagram position entries */
1112 ntb_ndp = skb_put_zero(ncm->skb_tx_ndp, dgram_idx_len);
1113
1114 ncb_len = ncm->skb_tx_data->len;
1115 dgram_pad = ALIGN(ncb_len, div) + rem - ncb_len;
1116 ncb_len += dgram_pad;
1117
1118 /* (d)wDatagramIndex */
1119 put_ncm(&ntb_ndp, opts->dgram_item_len, ncb_len);
1120 /* (d)wDatagramLength */
1121 put_ncm(&ntb_ndp, opts->dgram_item_len, skb->len);
1122 ncm->ndp_dgram_count++;
1123
1124 /* Add the new data to the skb */
1125 skb_put_zero(ncm->skb_tx_data, dgram_pad);
1126 skb_put_data(ncm->skb_tx_data, skb->data, skb->len);
1127 dev_consume_skb_any(skb);
1128 skb = NULL;
1129
1130 } else if (ncm->skb_tx_data && ncm->timer_force_tx) {
1131 /* If the tx was requested because of a timeout then
send */
1132 skb2 = package_for_tx(ncm);
1133 if (!skb2)
1134 goto err;
1135 }
1136
1137 return skb2;
1138
1139 err:
1140 ncm->netdev->stats.tx_dropped++;
1141
1142 if (skb)
1143 dev_kfree_skb_any(skb);
1144 if (ncm->skb_tx_data)
1145 dev_kfree_skb_any(ncm->skb_tx_data);
1146 if (ncm->skb_tx_ndp)
1147 dev_kfree_skb_any(ncm->skb_tx_ndp);
1148
1149 return NULL;
1150 }
1151
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip
