tree: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git master head: 981467033a37d916649647fa3afe1fe99bba1817 commit: 6c5657d085ae8c13a8565b98e6a23fe68f0bede4 [1709/1739] bnxt_en: Add support for ethtool get dump. config: ia64-allmodconfig (attached as .config) compiler: ia64-linux-gcc (GCC) 8.1.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 6c5657d085ae8c13a8565b98e6a23fe68f0bede4 # save the attached .config to linux build tree GCC_VERSION=8.1.0 make.cross ARCH=ia64
All warnings (new ones prefixed by >>): In function 'bnxt_fill_coredump_record', inlined from 'bnxt_get_coredump' at drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c:2980:3: >> drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c:2863:2: warning: 'strncpy' >> output truncated before terminating nul copying as many bytes from a string >> as its length [-Wstringop-truncation] strncpy(record->system_name, utsname()->nodename, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ strlen(utsname()->nodename)); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +/strncpy +2863 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2846 2847 static void 2848 bnxt_fill_coredump_record(struct bnxt *bp, struct bnxt_coredump_record *record, 2849 time64_t start, s16 start_utc, u16 total_segs, 2850 int status) 2851 { 2852 time64_t end = ktime_get_real_seconds(); 2853 u32 os_ver_major = 0, os_ver_minor = 0; 2854 struct tm tm; 2855 2856 time64_to_tm(start, 0, &tm); 2857 memset(record, 0, sizeof(*record)); 2858 strcpy(record->signature, "cOrE"); 2859 record->flags = 0; 2860 record->low_version = 0; 2861 record->high_version = 1; 2862 record->asic_state = 0; > 2863 strncpy(record->system_name, utsname()->nodename, 2864 strlen(utsname()->nodename)); 2865 record->year = cpu_to_le16(tm.tm_year); 2866 record->month = cpu_to_le16(tm.tm_mon); 2867 record->day = cpu_to_le16(tm.tm_mday); 2868 record->hour = cpu_to_le16(tm.tm_hour); 2869 record->minute = cpu_to_le16(tm.tm_min); 2870 record->second = cpu_to_le16(tm.tm_sec); 2871 record->utc_bias = cpu_to_le16(start_utc); 2872 strcpy(record->commandline, "ethtool -w"); 2873 record->total_segments = cpu_to_le32(total_segs); 2874 2875 sscanf(utsname()->release, "%u.%u", &os_ver_major, &os_ver_minor); 2876 record->os_ver_major = cpu_to_le32(os_ver_major); 2877 record->os_ver_minor = cpu_to_le32(os_ver_minor); 2878 2879 strcpy(record->os_name, utsname()->sysname); 2880 time64_to_tm(end, 0, &tm); 2881 record->end_year = cpu_to_le16(tm.tm_year + 1900); 2882 record->end_month = cpu_to_le16(tm.tm_mon + 1); 2883 record->end_day = cpu_to_le16(tm.tm_mday); 2884 record->end_hour = cpu_to_le16(tm.tm_hour); 2885 record->end_minute = cpu_to_le16(tm.tm_min); 2886 record->end_second = cpu_to_le16(tm.tm_sec); 2887 record->end_utc_bias = cpu_to_le16(sys_tz.tz_minuteswest * 60); 2888 record->asic_id1 = cpu_to_le32(bp->chip_num << 16 | 2889 bp->ver_resp.chip_rev << 8 | 2890 bp->ver_resp.chip_metal); 2891 record->asic_id2 = 0; 2892 record->coredump_status = cpu_to_le32(status); 2893 record->ioctl_low_version = 0; 2894 record->ioctl_high_version = 0; 2895 } 2896 2897 static int bnxt_get_coredump(struct bnxt *bp, void *buf, u32 *dump_len) 2898 { 2899 u32 ver_get_resp_len = sizeof(struct hwrm_ver_get_output); 2900 struct coredump_segment_record *seg_record = NULL; 2901 u32 offset = 0, seg_hdr_len, seg_record_len; 2902 struct bnxt_coredump_segment_hdr seg_hdr; 2903 struct bnxt_coredump_record coredump_rec; 2904 struct bnxt_coredump coredump = {NULL}; 2905 time64_t start_time; 2906 u16 start_utc; 2907 int rc = 0, i; 2908 2909 start_time = ktime_get_real_seconds(); 2910 start_utc = sys_tz.tz_minuteswest * 60; 2911 seg_hdr_len = sizeof(seg_hdr); 2912 2913 /* First segment should be hwrm_ver_get response */ 2914 *dump_len = seg_hdr_len + ver_get_resp_len; 2915 if (buf) { 2916 bnxt_fill_coredump_seg_hdr(bp, &seg_hdr, NULL, ver_get_resp_len, 2917 0, 0, 0); 2918 memcpy(buf + offset, &seg_hdr, seg_hdr_len); 2919 offset += seg_hdr_len; 2920 memcpy(buf + offset, &bp->ver_resp, ver_get_resp_len); 2921 offset += ver_get_resp_len; 2922 } 2923 2924 rc = bnxt_hwrm_dbg_coredump_list(bp, &coredump); 2925 if (rc) { 2926 netdev_err(bp->dev, "Failed to get coredump segment list\n"); 2927 goto err; 2928 } 2929 2930 *dump_len += seg_hdr_len * coredump.total_segs; 2931 2932 seg_record = (struct coredump_segment_record *)coredump.data; 2933 seg_record_len = sizeof(*seg_record); 2934 2935 for (i = 0; i < coredump.total_segs; i++) { 2936 u16 comp_id = le16_to_cpu(seg_record->component_id); 2937 u16 seg_id = le16_to_cpu(seg_record->segment_id); 2938 u32 duration = 0, seg_len = 0; 2939 unsigned long start, end; 2940 2941 start = jiffies; 2942 2943 rc = bnxt_hwrm_dbg_coredump_initiate(bp, comp_id, seg_id); 2944 if (rc) { 2945 netdev_err(bp->dev, 2946 "Failed to initiate coredump for seg = %d\n", 2947 seg_record->segment_id); 2948 goto next_seg; 2949 } 2950 2951 /* Write segment data into the buffer */ 2952 rc = bnxt_hwrm_dbg_coredump_retrieve(bp, comp_id, seg_id, 2953 &seg_len, buf, 2954 offset + seg_hdr_len); 2955 if (rc) 2956 netdev_err(bp->dev, 2957 "Failed to retrieve coredump for seg = %d\n", 2958 seg_record->segment_id); 2959 2960 next_seg: 2961 end = jiffies; 2962 duration = jiffies_to_msecs(end - start); 2963 bnxt_fill_coredump_seg_hdr(bp, &seg_hdr, seg_record, seg_len, 2964 rc, duration, 0); 2965 2966 if (buf) { 2967 /* Write segment header into the buffer */ 2968 memcpy(buf + offset, &seg_hdr, seg_hdr_len); 2969 offset += seg_hdr_len + seg_len; 2970 } 2971 2972 *dump_len += seg_len; 2973 seg_record = 2974 (struct coredump_segment_record *)((u8 *)seg_record + 2975 seg_record_len); 2976 } 2977 2978 err: 2979 if (buf) { > 2980 bnxt_fill_coredump_record(bp, &coredump_rec, start_time, 2981 start_utc, coredump.total_segs + 1, 2982 rc); 2983 memcpy(buf + offset, &coredump_rec, sizeof(coredump_rec)); 2984 } 2985 kfree(coredump.data); 2986 *dump_len += sizeof(coredump_rec); 2987 2988 return rc; 2989 } 2990 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip