Lines Matching refs:fmsg

33 	struct devlink_fmsg *fmsg;  in devlink_fmsg_alloc()  local
35 fmsg = kzalloc(sizeof(*fmsg), GFP_KERNEL); in devlink_fmsg_alloc()
36 if (!fmsg) in devlink_fmsg_alloc()
39 INIT_LIST_HEAD(&fmsg->item_list); in devlink_fmsg_alloc()
41 return fmsg; in devlink_fmsg_alloc()
44 static void devlink_fmsg_free(struct devlink_fmsg *fmsg) in devlink_fmsg_free() argument
48 list_for_each_entry_safe(item, tmp, &fmsg->item_list, list) { in devlink_fmsg_free()
52 kfree(fmsg); in devlink_fmsg_free()
675 static void devlink_fmsg_err_if_binary(struct devlink_fmsg *fmsg) in devlink_fmsg_err_if_binary() argument
677 if (!fmsg->err && fmsg->putting_binary) in devlink_fmsg_err_if_binary()
678 fmsg->err = -EINVAL; in devlink_fmsg_err_if_binary()
681 static void devlink_fmsg_nest_common(struct devlink_fmsg *fmsg, int attrtype) in devlink_fmsg_nest_common() argument
685 if (fmsg->err) in devlink_fmsg_nest_common()
690 fmsg->err = -ENOMEM; in devlink_fmsg_nest_common()
695 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_nest_common()
698 void devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg) in devlink_fmsg_obj_nest_start() argument
700 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_obj_nest_start()
701 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_OBJ_NEST_START); in devlink_fmsg_obj_nest_start()
705 static void devlink_fmsg_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_nest_end() argument
707 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_nest_end()
708 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_NEST_END); in devlink_fmsg_nest_end()
711 void devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_obj_nest_end() argument
713 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_obj_nest_end()
719 static void devlink_fmsg_put_name(struct devlink_fmsg *fmsg, const char *name) in devlink_fmsg_put_name() argument
723 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_put_name()
724 if (fmsg->err) in devlink_fmsg_put_name()
728 fmsg->err = -EMSGSIZE; in devlink_fmsg_put_name()
734 fmsg->err = -ENOMEM; in devlink_fmsg_put_name()
742 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_put_name()
745 void devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name) in devlink_fmsg_pair_nest_start() argument
747 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_pair_nest_start()
748 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_PAIR_NEST_START); in devlink_fmsg_pair_nest_start()
749 devlink_fmsg_put_name(fmsg, name); in devlink_fmsg_pair_nest_start()
753 void devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_pair_nest_end() argument
755 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_pair_nest_end()
759 void devlink_fmsg_arr_pair_nest_start(struct devlink_fmsg *fmsg, in devlink_fmsg_arr_pair_nest_start() argument
762 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_arr_pair_nest_start()
763 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_ARR_NEST_START); in devlink_fmsg_arr_pair_nest_start()
767 void devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_arr_pair_nest_end() argument
769 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_arr_pair_nest_end()
770 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_arr_pair_nest_end()
774 void devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg, in devlink_fmsg_binary_pair_nest_start() argument
777 devlink_fmsg_arr_pair_nest_start(fmsg, name); in devlink_fmsg_binary_pair_nest_start()
778 fmsg->putting_binary = true; in devlink_fmsg_binary_pair_nest_start()
782 void devlink_fmsg_binary_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_binary_pair_nest_end() argument
784 if (fmsg->err) in devlink_fmsg_binary_pair_nest_end()
787 if (!fmsg->putting_binary) in devlink_fmsg_binary_pair_nest_end()
788 fmsg->err = -EINVAL; in devlink_fmsg_binary_pair_nest_end()
790 fmsg->putting_binary = false; in devlink_fmsg_binary_pair_nest_end()
791 devlink_fmsg_arr_pair_nest_end(fmsg); in devlink_fmsg_binary_pair_nest_end()
795 static void devlink_fmsg_put_value(struct devlink_fmsg *fmsg, in devlink_fmsg_put_value() argument
801 if (fmsg->err) in devlink_fmsg_put_value()
805 fmsg->err = -EMSGSIZE; in devlink_fmsg_put_value()
811 fmsg->err = -ENOMEM; in devlink_fmsg_put_value()
819 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_put_value()
822 static void devlink_fmsg_bool_put(struct devlink_fmsg *fmsg, bool value) in devlink_fmsg_bool_put() argument
824 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_bool_put()
825 devlink_fmsg_put_value(fmsg, &value, sizeof(value), in devlink_fmsg_bool_put()
829 static void devlink_fmsg_u8_put(struct devlink_fmsg *fmsg, u8 value) in devlink_fmsg_u8_put() argument
831 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u8_put()
832 devlink_fmsg_put_value(fmsg, &value, sizeof(value), in devlink_fmsg_u8_put()
836 void devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value) in devlink_fmsg_u32_put() argument
838 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u32_put()
839 devlink_fmsg_put_value(fmsg, &value, sizeof(value), in devlink_fmsg_u32_put()
844 static void devlink_fmsg_u64_put(struct devlink_fmsg *fmsg, u64 value) in devlink_fmsg_u64_put() argument
846 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u64_put()
847 devlink_fmsg_put_value(fmsg, &value, sizeof(value), in devlink_fmsg_u64_put()
851 void devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value) in devlink_fmsg_string_put() argument
853 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_string_put()
854 devlink_fmsg_put_value(fmsg, value, strlen(value) + 1, in devlink_fmsg_string_put()
859 void devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value, in devlink_fmsg_binary_put() argument
862 if (!fmsg->err && !fmsg->putting_binary) in devlink_fmsg_binary_put()
863 fmsg->err = -EINVAL; in devlink_fmsg_binary_put()
865 devlink_fmsg_put_value(fmsg, value, value_len, in devlink_fmsg_binary_put()
870 void devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_bool_pair_put() argument
873 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_bool_pair_put()
874 devlink_fmsg_bool_put(fmsg, value); in devlink_fmsg_bool_pair_put()
875 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_bool_pair_put()
879 void devlink_fmsg_u8_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u8_pair_put() argument
882 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u8_pair_put()
883 devlink_fmsg_u8_put(fmsg, value); in devlink_fmsg_u8_pair_put()
884 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u8_pair_put()
888 void devlink_fmsg_u32_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u32_pair_put() argument
891 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u32_pair_put()
892 devlink_fmsg_u32_put(fmsg, value); in devlink_fmsg_u32_pair_put()
893 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u32_pair_put()
897 void devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u64_pair_put() argument
900 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u64_pair_put()
901 devlink_fmsg_u64_put(fmsg, value); in devlink_fmsg_u64_pair_put()
902 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u64_pair_put()
906 void devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_string_pair_put() argument
909 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_string_pair_put()
910 devlink_fmsg_string_put(fmsg, value); in devlink_fmsg_string_pair_put()
911 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_string_pair_put()
915 void devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_binary_pair_put() argument
921 devlink_fmsg_binary_pair_nest_start(fmsg, name); in devlink_fmsg_binary_pair_put()
928 devlink_fmsg_binary_put(fmsg, value + offset, data_size); in devlink_fmsg_binary_pair_put()
931 devlink_fmsg_binary_pair_nest_end(fmsg); in devlink_fmsg_binary_pair_put()
932 fmsg->putting_binary = false; in devlink_fmsg_binary_pair_put()
964 devlink_fmsg_prepare_skb(struct devlink_fmsg *fmsg, struct sk_buff *skb, in devlink_fmsg_prepare_skb() argument
976 list_for_each_entry(item, &fmsg->item_list, list) { in devlink_fmsg_prepare_skb()
1014 static int devlink_fmsg_snd(struct devlink_fmsg *fmsg, in devlink_fmsg_snd() argument
1025 if (fmsg->err) in devlink_fmsg_snd()
1026 return fmsg->err; in devlink_fmsg_snd()
1042 err = devlink_fmsg_prepare_skb(fmsg, skb, &index); in devlink_fmsg_snd()
1071 static int devlink_fmsg_dumpit(struct devlink_fmsg *fmsg, struct sk_buff *skb, in devlink_fmsg_dumpit() argument
1081 if (fmsg->err) in devlink_fmsg_dumpit()
1082 return fmsg->err; in devlink_fmsg_dumpit()
1091 err = devlink_fmsg_prepare_skb(fmsg, skb, &index); in devlink_fmsg_dumpit()
1109 struct devlink_fmsg *fmsg; in devlink_nl_health_reporter_diagnose_doit() local
1119 fmsg = devlink_fmsg_alloc(); in devlink_nl_health_reporter_diagnose_doit()
1120 if (!fmsg) in devlink_nl_health_reporter_diagnose_doit()
1123 devlink_fmsg_obj_nest_start(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1125 err = reporter->ops->diagnose(reporter, fmsg, info->extack); in devlink_nl_health_reporter_diagnose_doit()
1129 devlink_fmsg_obj_nest_end(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1131 err = devlink_fmsg_snd(fmsg, info, in devlink_nl_health_reporter_diagnose_doit()
1135 devlink_fmsg_free(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1240 void devlink_fmsg_dump_skb(struct devlink_fmsg *fmsg, const struct sk_buff *skb) in devlink_fmsg_dump_skb() argument
1249 devlink_fmsg_pair_nest_start(fmsg, "skb"); in devlink_fmsg_dump_skb()
1250 devlink_fmsg_obj_nest_start(fmsg); in devlink_fmsg_dump_skb()
1251 devlink_fmsg_put(fmsg, "actual len", skb->len); in devlink_fmsg_dump_skb()
1252 devlink_fmsg_put(fmsg, "head len", skb_headlen(skb)); in devlink_fmsg_dump_skb()
1253 devlink_fmsg_put(fmsg, "data len", skb->data_len); in devlink_fmsg_dump_skb()
1254 devlink_fmsg_put(fmsg, "tail len", skb_tailroom(skb)); in devlink_fmsg_dump_skb()
1255 devlink_fmsg_put(fmsg, "MAC", has_mac ? skb->mac_header : -1); in devlink_fmsg_dump_skb()
1256 devlink_fmsg_put(fmsg, "MAC len", in devlink_fmsg_dump_skb()
1258 devlink_fmsg_put(fmsg, "network hdr", skb->network_header); in devlink_fmsg_dump_skb()
1259 devlink_fmsg_put(fmsg, "network hdr len", in devlink_fmsg_dump_skb()
1261 devlink_fmsg_put(fmsg, "transport hdr", in devlink_fmsg_dump_skb()
1263 devlink_fmsg_put(fmsg, "csum", (__force u32)skb->csum); in devlink_fmsg_dump_skb()
1264 devlink_fmsg_put(fmsg, "csum_ip_summed", (u8)skb->ip_summed); in devlink_fmsg_dump_skb()
1265 devlink_fmsg_put(fmsg, "csum_complete_sw", !!skb->csum_complete_sw); in devlink_fmsg_dump_skb()
1266 devlink_fmsg_put(fmsg, "csum_valid", !!skb->csum_valid); in devlink_fmsg_dump_skb()
1267 devlink_fmsg_put(fmsg, "csum_level", (u8)skb->csum_level); in devlink_fmsg_dump_skb()
1268 devlink_fmsg_put(fmsg, "sw_hash", !!skb->sw_hash); in devlink_fmsg_dump_skb()
1269 devlink_fmsg_put(fmsg, "l4_hash", !!skb->l4_hash); in devlink_fmsg_dump_skb()
1270 devlink_fmsg_put(fmsg, "proto", ntohs(skb->protocol)); in devlink_fmsg_dump_skb()
1271 devlink_fmsg_put(fmsg, "pkt_type", (u8)skb->pkt_type); in devlink_fmsg_dump_skb()
1272 devlink_fmsg_put(fmsg, "iif", skb->skb_iif); in devlink_fmsg_dump_skb()
1275 devlink_fmsg_pair_nest_start(fmsg, "sk"); in devlink_fmsg_dump_skb()
1276 devlink_fmsg_obj_nest_start(fmsg); in devlink_fmsg_dump_skb()
1277 devlink_fmsg_put(fmsg, "family", sk->sk_type); in devlink_fmsg_dump_skb()
1278 devlink_fmsg_put(fmsg, "type", sk->sk_type); in devlink_fmsg_dump_skb()
1279 devlink_fmsg_put(fmsg, "proto", sk->sk_protocol); in devlink_fmsg_dump_skb()
1280 devlink_fmsg_obj_nest_end(fmsg); in devlink_fmsg_dump_skb()
1281 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_dump_skb()
1284 devlink_fmsg_obj_nest_end(fmsg); in devlink_fmsg_dump_skb()
1285 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_dump_skb()
1287 devlink_fmsg_pair_nest_start(fmsg, "shinfo"); in devlink_fmsg_dump_skb()
1288 devlink_fmsg_obj_nest_start(fmsg); in devlink_fmsg_dump_skb()
1289 devlink_fmsg_put(fmsg, "tx_flags", sh->tx_flags); in devlink_fmsg_dump_skb()
1290 devlink_fmsg_put(fmsg, "nr_frags", sh->nr_frags); in devlink_fmsg_dump_skb()
1291 devlink_fmsg_put(fmsg, "gso_size", sh->gso_size); in devlink_fmsg_dump_skb()
1292 devlink_fmsg_put(fmsg, "gso_type", sh->gso_type); in devlink_fmsg_dump_skb()
1293 devlink_fmsg_put(fmsg, "gso_segs", sh->gso_segs); in devlink_fmsg_dump_skb()
1294 devlink_fmsg_obj_nest_end(fmsg); in devlink_fmsg_dump_skb()
1295 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_dump_skb()