Lines Matching refs:fmsg

33 	struct devlink_fmsg *fmsg;  in devlink_fmsg_alloc()  local
35 fmsg = kzalloc_obj(*fmsg); 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()
728 static void devlink_fmsg_err_if_binary(struct devlink_fmsg *fmsg) in devlink_fmsg_err_if_binary() argument
730 if (!fmsg->err && fmsg->putting_binary) in devlink_fmsg_err_if_binary()
731 fmsg->err = -EINVAL; in devlink_fmsg_err_if_binary()
734 static void devlink_fmsg_nest_common(struct devlink_fmsg *fmsg, int attrtype) in devlink_fmsg_nest_common() argument
738 if (fmsg->err) in devlink_fmsg_nest_common()
743 fmsg->err = -ENOMEM; in devlink_fmsg_nest_common()
748 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_nest_common()
751 void devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg) in devlink_fmsg_obj_nest_start() argument
753 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_obj_nest_start()
754 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_OBJ_NEST_START); in devlink_fmsg_obj_nest_start()
758 static void devlink_fmsg_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_nest_end() argument
760 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_nest_end()
761 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_NEST_END); in devlink_fmsg_nest_end()
764 void devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_obj_nest_end() argument
766 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_obj_nest_end()
772 static void devlink_fmsg_put_name(struct devlink_fmsg *fmsg, const char *name) in devlink_fmsg_put_name() argument
776 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_put_name()
777 if (fmsg->err) in devlink_fmsg_put_name()
781 fmsg->err = -EMSGSIZE; in devlink_fmsg_put_name()
787 fmsg->err = -ENOMEM; in devlink_fmsg_put_name()
795 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_put_name()
798 void devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name) in devlink_fmsg_pair_nest_start() argument
800 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_pair_nest_start()
801 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_PAIR_NEST_START); in devlink_fmsg_pair_nest_start()
802 devlink_fmsg_put_name(fmsg, name); in devlink_fmsg_pair_nest_start()
806 void devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_pair_nest_end() argument
808 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_pair_nest_end()
812 void devlink_fmsg_arr_pair_nest_start(struct devlink_fmsg *fmsg, in devlink_fmsg_arr_pair_nest_start() argument
815 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_arr_pair_nest_start()
816 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_ARR_NEST_START); in devlink_fmsg_arr_pair_nest_start()
820 void devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_arr_pair_nest_end() argument
822 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_arr_pair_nest_end()
823 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_arr_pair_nest_end()
827 void devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg, in devlink_fmsg_binary_pair_nest_start() argument
830 devlink_fmsg_arr_pair_nest_start(fmsg, name); in devlink_fmsg_binary_pair_nest_start()
831 fmsg->putting_binary = true; in devlink_fmsg_binary_pair_nest_start()
835 void devlink_fmsg_binary_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_binary_pair_nest_end() argument
837 if (fmsg->err) in devlink_fmsg_binary_pair_nest_end()
840 if (!fmsg->putting_binary) in devlink_fmsg_binary_pair_nest_end()
841 fmsg->err = -EINVAL; in devlink_fmsg_binary_pair_nest_end()
843 fmsg->putting_binary = false; in devlink_fmsg_binary_pair_nest_end()
844 devlink_fmsg_arr_pair_nest_end(fmsg); in devlink_fmsg_binary_pair_nest_end()
848 static void devlink_fmsg_put_value(struct devlink_fmsg *fmsg, in devlink_fmsg_put_value() argument
854 if (fmsg->err) in devlink_fmsg_put_value()
858 fmsg->err = -EMSGSIZE; in devlink_fmsg_put_value()
864 fmsg->err = -ENOMEM; in devlink_fmsg_put_value()
872 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_put_value()
875 static void devlink_fmsg_bool_put(struct devlink_fmsg *fmsg, bool value) in devlink_fmsg_bool_put() argument
877 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_bool_put()
878 devlink_fmsg_put_value(fmsg, &value, sizeof(value), in devlink_fmsg_bool_put()
882 static void devlink_fmsg_u8_put(struct devlink_fmsg *fmsg, u8 value) in devlink_fmsg_u8_put() argument
884 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u8_put()
885 devlink_fmsg_put_value(fmsg, &value, sizeof(value), in devlink_fmsg_u8_put()
889 void devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value) in devlink_fmsg_u32_put() argument
891 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u32_put()
892 devlink_fmsg_put_value(fmsg, &value, sizeof(value), in devlink_fmsg_u32_put()
897 static void devlink_fmsg_u64_put(struct devlink_fmsg *fmsg, u64 value) in devlink_fmsg_u64_put() argument
899 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u64_put()
900 devlink_fmsg_put_value(fmsg, &value, sizeof(value), in devlink_fmsg_u64_put()
904 void devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value) in devlink_fmsg_string_put() argument
906 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_string_put()
907 devlink_fmsg_put_value(fmsg, value, strlen(value) + 1, in devlink_fmsg_string_put()
912 void devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value, in devlink_fmsg_binary_put() argument
915 if (!fmsg->err && !fmsg->putting_binary) in devlink_fmsg_binary_put()
916 fmsg->err = -EINVAL; in devlink_fmsg_binary_put()
918 devlink_fmsg_put_value(fmsg, value, value_len, in devlink_fmsg_binary_put()
923 void devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_bool_pair_put() argument
926 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_bool_pair_put()
927 devlink_fmsg_bool_put(fmsg, value); in devlink_fmsg_bool_pair_put()
928 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_bool_pair_put()
932 void devlink_fmsg_u8_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u8_pair_put() argument
935 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u8_pair_put()
936 devlink_fmsg_u8_put(fmsg, value); in devlink_fmsg_u8_pair_put()
937 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u8_pair_put()
941 void devlink_fmsg_u32_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u32_pair_put() argument
944 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u32_pair_put()
945 devlink_fmsg_u32_put(fmsg, value); in devlink_fmsg_u32_pair_put()
946 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u32_pair_put()
950 void devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u64_pair_put() argument
953 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u64_pair_put()
954 devlink_fmsg_u64_put(fmsg, value); in devlink_fmsg_u64_pair_put()
955 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u64_pair_put()
959 void devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_string_pair_put() argument
962 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_string_pair_put()
963 devlink_fmsg_string_put(fmsg, value); in devlink_fmsg_string_pair_put()
964 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_string_pair_put()
968 void devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_binary_pair_put() argument
974 devlink_fmsg_binary_pair_nest_start(fmsg, name); in devlink_fmsg_binary_pair_put()
981 devlink_fmsg_binary_put(fmsg, value + offset, data_size); in devlink_fmsg_binary_pair_put()
984 devlink_fmsg_binary_pair_nest_end(fmsg); in devlink_fmsg_binary_pair_put()
985 fmsg->putting_binary = false; in devlink_fmsg_binary_pair_put()
1017 devlink_fmsg_prepare_skb(struct devlink_fmsg *fmsg, struct sk_buff *skb, in devlink_fmsg_prepare_skb() argument
1029 list_for_each_entry(item, &fmsg->item_list, list) { in devlink_fmsg_prepare_skb()
1067 static int devlink_fmsg_snd(struct devlink_fmsg *fmsg, in devlink_fmsg_snd() argument
1078 if (fmsg->err) in devlink_fmsg_snd()
1079 return fmsg->err; in devlink_fmsg_snd()
1095 err = devlink_fmsg_prepare_skb(fmsg, skb, &index); in devlink_fmsg_snd()
1124 static int devlink_fmsg_dumpit(struct devlink_fmsg *fmsg, struct sk_buff *skb, in devlink_fmsg_dumpit() argument
1134 if (fmsg->err) in devlink_fmsg_dumpit()
1135 return fmsg->err; in devlink_fmsg_dumpit()
1144 err = devlink_fmsg_prepare_skb(fmsg, skb, &index); in devlink_fmsg_dumpit()
1162 struct devlink_fmsg *fmsg; in devlink_nl_health_reporter_diagnose_doit() local
1172 fmsg = devlink_fmsg_alloc(); in devlink_nl_health_reporter_diagnose_doit()
1173 if (!fmsg) in devlink_nl_health_reporter_diagnose_doit()
1176 devlink_fmsg_obj_nest_start(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1178 err = reporter->ops->diagnose(reporter, fmsg, info->extack); in devlink_nl_health_reporter_diagnose_doit()
1182 devlink_fmsg_obj_nest_end(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1184 err = devlink_fmsg_snd(fmsg, info, in devlink_nl_health_reporter_diagnose_doit()
1188 devlink_fmsg_free(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1293 void devlink_fmsg_dump_skb(struct devlink_fmsg *fmsg, const struct sk_buff *skb) in devlink_fmsg_dump_skb() argument
1302 devlink_fmsg_pair_nest_start(fmsg, "skb"); in devlink_fmsg_dump_skb()
1303 devlink_fmsg_obj_nest_start(fmsg); in devlink_fmsg_dump_skb()
1304 devlink_fmsg_put(fmsg, "actual len", skb->len); in devlink_fmsg_dump_skb()
1305 devlink_fmsg_put(fmsg, "head len", skb_headlen(skb)); in devlink_fmsg_dump_skb()
1306 devlink_fmsg_put(fmsg, "data len", skb->data_len); in devlink_fmsg_dump_skb()
1307 devlink_fmsg_put(fmsg, "tail len", skb_tailroom(skb)); in devlink_fmsg_dump_skb()
1308 devlink_fmsg_put(fmsg, "MAC", has_mac ? skb->mac_header : -1); in devlink_fmsg_dump_skb()
1309 devlink_fmsg_put(fmsg, "MAC len", in devlink_fmsg_dump_skb()
1311 devlink_fmsg_put(fmsg, "network hdr", skb->network_header); in devlink_fmsg_dump_skb()
1312 devlink_fmsg_put(fmsg, "network hdr len", in devlink_fmsg_dump_skb()
1314 devlink_fmsg_put(fmsg, "transport hdr", in devlink_fmsg_dump_skb()
1316 devlink_fmsg_put(fmsg, "csum", (__force u32)skb->csum); in devlink_fmsg_dump_skb()
1317 devlink_fmsg_put(fmsg, "csum_ip_summed", (u8)skb->ip_summed); in devlink_fmsg_dump_skb()
1318 devlink_fmsg_put(fmsg, "csum_complete_sw", !!skb->csum_complete_sw); in devlink_fmsg_dump_skb()
1319 devlink_fmsg_put(fmsg, "csum_valid", !!skb->csum_valid); in devlink_fmsg_dump_skb()
1320 devlink_fmsg_put(fmsg, "csum_level", (u8)skb->csum_level); in devlink_fmsg_dump_skb()
1321 devlink_fmsg_put(fmsg, "sw_hash", !!skb->sw_hash); in devlink_fmsg_dump_skb()
1322 devlink_fmsg_put(fmsg, "l4_hash", !!skb->l4_hash); in devlink_fmsg_dump_skb()
1323 devlink_fmsg_put(fmsg, "proto", ntohs(skb->protocol)); in devlink_fmsg_dump_skb()
1324 devlink_fmsg_put(fmsg, "pkt_type", (u8)skb->pkt_type); in devlink_fmsg_dump_skb()
1325 devlink_fmsg_put(fmsg, "iif", skb->skb_iif); in devlink_fmsg_dump_skb()
1328 devlink_fmsg_pair_nest_start(fmsg, "sk"); in devlink_fmsg_dump_skb()
1329 devlink_fmsg_obj_nest_start(fmsg); in devlink_fmsg_dump_skb()
1330 devlink_fmsg_put(fmsg, "family", sk->sk_type); in devlink_fmsg_dump_skb()
1331 devlink_fmsg_put(fmsg, "type", sk->sk_type); in devlink_fmsg_dump_skb()
1332 devlink_fmsg_put(fmsg, "proto", sk->sk_protocol); in devlink_fmsg_dump_skb()
1333 devlink_fmsg_obj_nest_end(fmsg); in devlink_fmsg_dump_skb()
1334 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_dump_skb()
1337 devlink_fmsg_obj_nest_end(fmsg); in devlink_fmsg_dump_skb()
1338 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_dump_skb()
1340 devlink_fmsg_pair_nest_start(fmsg, "shinfo"); in devlink_fmsg_dump_skb()
1341 devlink_fmsg_obj_nest_start(fmsg); in devlink_fmsg_dump_skb()
1342 devlink_fmsg_put(fmsg, "tx_flags", sh->tx_flags); in devlink_fmsg_dump_skb()
1343 devlink_fmsg_put(fmsg, "nr_frags", sh->nr_frags); in devlink_fmsg_dump_skb()
1344 devlink_fmsg_put(fmsg, "gso_size", sh->gso_size); in devlink_fmsg_dump_skb()
1345 devlink_fmsg_put(fmsg, "gso_type", sh->gso_type); in devlink_fmsg_dump_skb()
1346 devlink_fmsg_put(fmsg, "gso_segs", sh->gso_segs); in devlink_fmsg_dump_skb()
1347 devlink_fmsg_obj_nest_end(fmsg); in devlink_fmsg_dump_skb()
1348 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_dump_skb()