Lines Matching refs:nt

193 static void netconsole_target_get(struct netconsole_target *nt)  in netconsole_target_get()  argument
195 if (config_item_name(&nt->group.cg_item)) in netconsole_target_get()
196 config_group_get(&nt->group); in netconsole_target_get()
199 static void netconsole_target_put(struct netconsole_target *nt) in netconsole_target_put() argument
201 if (config_item_name(&nt->group.cg_item)) in netconsole_target_put()
202 config_group_put(&nt->group); in netconsole_target_put()
220 static void netconsole_target_get(struct netconsole_target *nt) in netconsole_target_get() argument
224 static void netconsole_target_put(struct netconsole_target *nt) in netconsole_target_put() argument
228 static void populate_configfs_item(struct netconsole_target *nt, in populate_configfs_item() argument
239 struct netconsole_target *nt; in alloc_and_init() local
241 nt = kzalloc(sizeof(*nt), GFP_KERNEL); in alloc_and_init()
242 if (!nt) in alloc_and_init()
243 return nt; in alloc_and_init()
246 nt->extended = true; in alloc_and_init()
248 nt->release = true; in alloc_and_init()
250 nt->np.name = "netconsole"; in alloc_and_init()
251 strscpy(nt->np.dev_name, "eth0", IFNAMSIZ); in alloc_and_init()
252 nt->np.local_port = 6665; in alloc_and_init()
253 nt->np.remote_port = 6666; in alloc_and_init()
254 eth_broadcast_addr(nt->np.remote_mac); in alloc_and_init()
256 return nt; in alloc_and_init()
264 struct netconsole_target *nt, *tmp; in netconsole_process_cleanups_core() local
271 list_for_each_entry_safe(nt, tmp, &target_cleanup_list, list) { in netconsole_process_cleanups_core()
273 WARN_ON_ONCE(nt->enabled); in netconsole_process_cleanups_core()
274 do_netpoll_cleanup(&nt->np); in netconsole_process_cleanups_core()
279 list_move(&nt->list, &target_list); in netconsole_process_cleanups_core()
399 struct netconsole_target *nt = to_target(item); in local_ip_show() local
401 if (nt->np.ipv6) in local_ip_show()
402 return sysfs_emit(buf, "%pI6c\n", &nt->np.local_ip.in6); in local_ip_show()
404 return sysfs_emit(buf, "%pI4\n", &nt->np.local_ip); in local_ip_show()
409 struct netconsole_target *nt = to_target(item); in remote_ip_show() local
411 if (nt->np.ipv6) in remote_ip_show()
412 return sysfs_emit(buf, "%pI6c\n", &nt->np.remote_ip.in6); in remote_ip_show()
414 return sysfs_emit(buf, "%pI4\n", &nt->np.remote_ip); in remote_ip_show()
432 struct netconsole_target *nt = to_target(item); in transmit_errors_show() local
437 start = u64_stats_fetch_begin(&nt->stats.syncp); in transmit_errors_show()
438 xmit_drop_count = u64_stats_read(&nt->stats.xmit_drop_count); in transmit_errors_show()
439 enomem_count = u64_stats_read(&nt->stats.enomem_count); in transmit_errors_show()
440 } while (u64_stats_fetch_retry(&nt->stats.syncp, start)); in transmit_errors_show()
448 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_cpu_nr_enabled_show() local
452 cpu_nr_enabled = !!(nt->sysdata_fields & SYSDATA_CPU_NR); in sysdata_cpu_nr_enabled_show()
462 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_taskname_enabled_show() local
466 taskname_enabled = !!(nt->sysdata_fields & SYSDATA_TASKNAME); in sysdata_taskname_enabled_show()
475 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_release_enabled_show() local
479 release_enabled = !!(nt->sysdata_fields & SYSDATA_TASKNAME); in sysdata_release_enabled_show()
490 struct netconsole_target *nt; in unregister_netcons_consoles() local
495 list_for_each_entry(nt, &target_list, list) { in unregister_netcons_consoles()
496 if (nt->extended) in unregister_netcons_consoles()
515 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_msgid_enabled_show() local
519 msgid_enabled = !!(nt->sysdata_fields & SYSDATA_MSGID); in sysdata_msgid_enabled_show()
535 struct netconsole_target *nt = to_target(item); in enabled_store() local
546 if (enabled == nt->enabled) { in enabled_store()
548 nt->enabled ? "started" : "stopped"); in enabled_store()
553 if (nt->release && !nt->extended) { in enabled_store()
558 if (nt->extended && !console_is_registered(&netconsole_ext)) { in enabled_store()
566 if (!nt->extended && !console_is_registered(&netconsole)) { in enabled_store()
575 netconsole_print_banner(&nt->np); in enabled_store()
577 ret = netpoll_setup(&nt->np); in enabled_store()
581 nt->enabled = true; in enabled_store()
590 nt->enabled = false; in enabled_store()
594 list_move(&nt->list, &target_cleanup_list); in enabled_store()
614 struct netconsole_target *nt = to_target(item); in release_store() local
619 if (nt->enabled) { in release_store()
621 config_item_name(&nt->group.cg_item)); in release_store()
630 nt->release = release; in release_store()
641 struct netconsole_target *nt = to_target(item); in extended_store() local
646 if (nt->enabled) { in extended_store()
648 config_item_name(&nt->group.cg_item)); in extended_store()
657 nt->extended = extended; in extended_store()
667 struct netconsole_target *nt = to_target(item); in dev_name_store() local
670 if (nt->enabled) { in dev_name_store()
672 config_item_name(&nt->group.cg_item)); in dev_name_store()
677 strscpy(nt->np.dev_name, buf, IFNAMSIZ); in dev_name_store()
678 trim_newline(nt->np.dev_name, IFNAMSIZ); in dev_name_store()
687 struct netconsole_target *nt = to_target(item); in local_port_store() local
691 if (nt->enabled) { in local_port_store()
693 config_item_name(&nt->group.cg_item)); in local_port_store()
697 ret = kstrtou16(buf, 10, &nt->np.local_port); in local_port_store()
709 struct netconsole_target *nt = to_target(item); in remote_port_store() local
713 if (nt->enabled) { in remote_port_store()
715 config_item_name(&nt->group.cg_item)); in remote_port_store()
719 ret = kstrtou16(buf, 10, &nt->np.remote_port); in remote_port_store()
731 struct netconsole_target *nt = to_target(item); in local_ip_store() local
735 if (nt->enabled) { in local_ip_store()
737 config_item_name(&nt->group.cg_item)); in local_ip_store()
744 if (in6_pton(buf, count, nt->np.local_ip.in6.s6_addr, -1, &end) > 0) { in local_ip_store()
749 nt->np.ipv6 = true; in local_ip_store()
753 if (!nt->np.ipv6) in local_ip_store()
754 nt->np.local_ip.ip = in_aton(buf); in local_ip_store()
768 struct netconsole_target *nt = to_target(item); in remote_ip_store() local
772 if (nt->enabled) { in remote_ip_store()
774 config_item_name(&nt->group.cg_item)); in remote_ip_store()
781 if (in6_pton(buf, count, nt->np.remote_ip.in6.s6_addr, -1, &end) > 0) { in remote_ip_store()
786 nt->np.ipv6 = true; in remote_ip_store()
790 if (!nt->np.ipv6) in remote_ip_store()
791 nt->np.remote_ip.ip = in_aton(buf); in remote_ip_store()
807 static size_t count_extradata_entries(struct netconsole_target *nt) in count_extradata_entries() argument
812 entries = list_count_nodes(&nt->userdata_group.cg_children); in count_extradata_entries()
814 if (nt->sysdata_fields & SYSDATA_CPU_NR) in count_extradata_entries()
816 if (nt->sysdata_fields & SYSDATA_TASKNAME) in count_extradata_entries()
818 if (nt->sysdata_fields & SYSDATA_RELEASE) in count_extradata_entries()
820 if (nt->sysdata_fields & SYSDATA_MSGID) in count_extradata_entries()
829 struct netconsole_target *nt = to_target(item); in remote_mac_store() local
834 if (nt->enabled) { in remote_mac_store()
836 config_item_name(&nt->group.cg_item)); in remote_mac_store()
844 memcpy(nt->np.remote_mac, remote_mac, ETH_ALEN); in remote_mac_store()
884 static void update_userdata(struct netconsole_target *nt) in update_userdata() argument
890 nt->userdata_length = 0; in update_userdata()
891 nt->extradata_complete[0] = 0; in update_userdata()
893 list_for_each(entry, &nt->userdata_group.cg_children) { in update_userdata()
912 complete_idx += scnprintf(&nt->extradata_complete[complete_idx], in update_userdata()
916 nt->userdata_length = strnlen(nt->extradata_complete, in update_userdata()
917 sizeof(nt->extradata_complete)); in update_userdata()
924 struct netconsole_target *nt; in userdatum_value_store() local
939 nt = userdata_to_target(ud); in userdatum_value_store()
940 update_userdata(nt); in userdatum_value_store()
951 static void disable_sysdata_feature(struct netconsole_target *nt, in disable_sysdata_feature() argument
954 nt->sysdata_fields &= ~feature; in disable_sysdata_feature()
955 nt->extradata_complete[nt->userdata_length] = 0; in disable_sysdata_feature()
961 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_msgid_enabled_store() local
970 curr = !!(nt->sysdata_fields & SYSDATA_MSGID); in sysdata_msgid_enabled_store()
975 count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) { in sysdata_msgid_enabled_store()
981 nt->sysdata_fields |= SYSDATA_MSGID; in sysdata_msgid_enabled_store()
983 disable_sysdata_feature(nt, SYSDATA_MSGID); in sysdata_msgid_enabled_store()
995 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_release_enabled_store() local
1004 curr = !!(nt->sysdata_fields & SYSDATA_RELEASE); in sysdata_release_enabled_store()
1009 count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) { in sysdata_release_enabled_store()
1015 nt->sysdata_fields |= SYSDATA_RELEASE; in sysdata_release_enabled_store()
1017 disable_sysdata_feature(nt, SYSDATA_RELEASE); in sysdata_release_enabled_store()
1029 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_taskname_enabled_store() local
1038 curr = !!(nt->sysdata_fields & SYSDATA_TASKNAME); in sysdata_taskname_enabled_store()
1043 count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) { in sysdata_taskname_enabled_store()
1049 nt->sysdata_fields |= SYSDATA_TASKNAME; in sysdata_taskname_enabled_store()
1051 disable_sysdata_feature(nt, SYSDATA_TASKNAME); in sysdata_taskname_enabled_store()
1064 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_cpu_nr_enabled_store() local
1073 curr = !!(nt->sysdata_fields & SYSDATA_CPU_NR); in sysdata_cpu_nr_enabled_store()
1079 count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) { in sysdata_cpu_nr_enabled_store()
1088 nt->sysdata_fields |= SYSDATA_CPU_NR; in sysdata_cpu_nr_enabled_store()
1094 disable_sysdata_feature(nt, SYSDATA_CPU_NR); in sysdata_cpu_nr_enabled_store()
1132 struct netconsole_target *nt; in userdatum_make_item() local
1140 nt = userdata_to_target(ud); in userdatum_make_item()
1141 if (count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) in userdatum_make_item()
1154 struct netconsole_target *nt; in userdatum_drop() local
1158 nt = userdata_to_target(ud); in userdatum_drop()
1161 update_userdata(nt); in userdatum_drop()
1232 static void init_target_config_group(struct netconsole_target *nt, in init_target_config_group() argument
1235 config_group_init_type_name(&nt->group, name, &netconsole_target_type); in init_target_config_group()
1236 config_group_init_type_name(&nt->userdata_group, "userdata", in init_target_config_group()
1238 configfs_add_default_group(&nt->userdata_group, &nt->group); in init_target_config_group()
1243 struct netconsole_target *nt, *ret = NULL; in find_cmdline_target() local
1247 list_for_each_entry(nt, &target_list, list) { in find_cmdline_target()
1248 if (!strcmp(nt->group.cg_item.ci_name, name)) { in find_cmdline_target()
1249 ret = nt; in find_cmdline_target()
1265 struct netconsole_target *nt; in make_netconsole_target() local
1274 nt = find_cmdline_target(name); in make_netconsole_target()
1275 if (nt) { in make_netconsole_target()
1276 init_target_config_group(nt, name); in make_netconsole_target()
1277 return &nt->group; in make_netconsole_target()
1281 nt = alloc_and_init(); in make_netconsole_target()
1282 if (!nt) in make_netconsole_target()
1286 init_target_config_group(nt, name); in make_netconsole_target()
1290 list_add(&nt->list, &target_list); in make_netconsole_target()
1293 return &nt->group; in make_netconsole_target()
1300 struct netconsole_target *nt = to_target(item); in drop_netconsole_target() local
1303 list_del(&nt->list); in drop_netconsole_target()
1310 if (nt->enabled) in drop_netconsole_target()
1311 netpoll_cleanup(&nt->np); in drop_netconsole_target()
1313 config_item_put(&nt->group.cg_item); in drop_netconsole_target()
1336 static void populate_configfs_item(struct netconsole_target *nt, in populate_configfs_item() argument
1343 init_target_config_group(nt, target_name); in populate_configfs_item()
1346 static int sysdata_append_cpu_nr(struct netconsole_target *nt, int offset) in sysdata_append_cpu_nr() argument
1349 return scnprintf(&nt->extradata_complete[offset], in sysdata_append_cpu_nr()
1354 static int sysdata_append_taskname(struct netconsole_target *nt, int offset) in sysdata_append_taskname() argument
1356 return scnprintf(&nt->extradata_complete[offset], in sysdata_append_taskname()
1361 static int sysdata_append_release(struct netconsole_target *nt, int offset) in sysdata_append_release() argument
1363 return scnprintf(&nt->extradata_complete[offset], in sysdata_append_release()
1368 static int sysdata_append_msgid(struct netconsole_target *nt, int offset) in sysdata_append_msgid() argument
1370 wrapping_assign_add(nt->msgcounter, 1); in sysdata_append_msgid()
1371 return scnprintf(&nt->extradata_complete[offset], in sysdata_append_msgid()
1373 nt->msgcounter); in sysdata_append_msgid()
1380 static int prepare_extradata(struct netconsole_target *nt) in prepare_extradata() argument
1387 extradata_len = nt->userdata_length; in prepare_extradata()
1389 if (!nt->sysdata_fields) in prepare_extradata()
1392 if (nt->sysdata_fields & SYSDATA_CPU_NR) in prepare_extradata()
1393 extradata_len += sysdata_append_cpu_nr(nt, extradata_len); in prepare_extradata()
1394 if (nt->sysdata_fields & SYSDATA_TASKNAME) in prepare_extradata()
1395 extradata_len += sysdata_append_taskname(nt, extradata_len); in prepare_extradata()
1396 if (nt->sysdata_fields & SYSDATA_RELEASE) in prepare_extradata()
1397 extradata_len += sysdata_append_release(nt, extradata_len); in prepare_extradata()
1398 if (nt->sysdata_fields & SYSDATA_MSGID) in prepare_extradata()
1399 extradata_len += sysdata_append_msgid(nt, extradata_len); in prepare_extradata()
1408 static int prepare_extradata(struct netconsole_target *nt) in prepare_extradata() argument
1419 struct netconsole_target *nt, *tmp; in netconsole_netdev_event() local
1429 list_for_each_entry_safe(nt, tmp, &target_list, list) { in netconsole_netdev_event()
1430 netconsole_target_get(nt); in netconsole_netdev_event()
1431 if (nt->np.dev == dev) { in netconsole_netdev_event()
1434 strscpy(nt->np.dev_name, dev->name, IFNAMSIZ); in netconsole_netdev_event()
1439 nt->enabled = false; in netconsole_netdev_event()
1440 list_move(&nt->list, &target_cleanup_list); in netconsole_netdev_event()
1444 netconsole_target_put(nt); in netconsole_netdev_event()
1490 static void send_udp(struct netconsole_target *nt, const char *msg, int len) in send_udp() argument
1492 int result = netpoll_send_udp(&nt->np, msg, len); in send_udp()
1496 u64_stats_update_begin(&nt->stats.syncp); in send_udp()
1497 u64_stats_inc(&nt->stats.xmit_drop_count); in send_udp()
1498 u64_stats_update_end(&nt->stats.syncp); in send_udp()
1500 u64_stats_update_begin(&nt->stats.syncp); in send_udp()
1501 u64_stats_inc(&nt->stats.enomem_count); in send_udp()
1502 u64_stats_update_end(&nt->stats.syncp); in send_udp()
1507 static void send_msg_no_fragmentation(struct netconsole_target *nt, in send_msg_no_fragmentation() argument
1516 extradata = nt->extradata_complete; in send_msg_no_fragmentation()
1522 scnprintf(nt->buf, MAX_PRINT_CHUNK, "%s,%s", release, msg); in send_msg_no_fragmentation()
1525 memcpy(nt->buf, msg, msg_len); in send_msg_no_fragmentation()
1529 msg_len += scnprintf(&nt->buf[msg_len], in send_msg_no_fragmentation()
1533 send_udp(nt, nt->buf, msg_len); in send_msg_no_fragmentation()
1544 static void send_fragmented_body(struct netconsole_target *nt, in send_fragmented_body() argument
1553 extradata = nt->extradata_complete; in send_fragmented_body()
1574 this_header += scnprintf(nt->buf + this_header, in send_fragmented_body()
1585 memcpy(nt->buf + this_header, msgbody + offset, in send_fragmented_body()
1620 memcpy(nt->buf + this_header + this_offset, in send_fragmented_body()
1626 send_udp(nt, nt->buf, this_header + this_offset); in send_fragmented_body()
1631 static void send_msg_fragmented(struct netconsole_target *nt, in send_msg_fragmented() argument
1654 append_release(nt->buf); in send_msg_fragmented()
1657 memcpy(nt->buf + release_len, msg, header_len); in send_msg_fragmented()
1663 send_fragmented_body(nt, msgbody, header_len, msgbody_len, in send_msg_fragmented()
1677 static void send_ext_msg_udp(struct netconsole_target *nt, const char *msg, in send_ext_msg_udp() argument
1683 extradata_len = prepare_extradata(nt); in send_ext_msg_udp()
1685 if (nt->release) in send_ext_msg_udp()
1689 return send_msg_no_fragmentation(nt, msg, msg_len, release_len); in send_ext_msg_udp()
1691 return send_msg_fragmented(nt, msg, msg_len, release_len, in send_ext_msg_udp()
1698 struct netconsole_target *nt; in write_ext_msg() local
1705 list_for_each_entry(nt, &target_list, list) in write_ext_msg()
1706 if (nt->extended && nt->enabled && netif_running(nt->np.dev)) in write_ext_msg()
1707 send_ext_msg_udp(nt, msg, len); in write_ext_msg()
1715 struct netconsole_target *nt; in write_msg() local
1725 list_for_each_entry(nt, &target_list, list) { in write_msg()
1726 if (!nt->extended && nt->enabled && netif_running(nt->np.dev)) { in write_msg()
1736 send_udp(nt, tmp, frag); in write_msg()
1863 struct netconsole_target *nt; in alloc_param_target() local
1866 nt = alloc_and_init(); in alloc_param_target()
1867 if (!nt) { in alloc_param_target()
1873 nt->extended = true; in alloc_param_target()
1878 if (!nt->extended) { in alloc_param_target()
1883 nt->release = true; in alloc_param_target()
1888 err = netconsole_parser_cmdline(&nt->np, target_config); in alloc_param_target()
1892 err = netpoll_setup(&nt->np); in alloc_param_target()
1902 nt->enabled = true; in alloc_param_target()
1904 populate_configfs_item(nt, cmdline_count); in alloc_param_target()
1906 return nt; in alloc_param_target()
1909 kfree(nt); in alloc_param_target()
1914 static void free_param_target(struct netconsole_target *nt) in free_param_target() argument
1916 netpoll_cleanup(&nt->np); in free_param_target()
1917 kfree(nt); in free_param_target()
1935 struct netconsole_target *nt, *tmp; in init_netconsole() local
1944 nt = alloc_param_target(target_config, count); in init_netconsole()
1945 if (IS_ERR(nt)) { in init_netconsole()
1948 err = PTR_ERR(nt); in init_netconsole()
1952 if (nt->extended) { in init_netconsole()
1961 list_add(&nt->list, &target_list); in init_netconsole()
1994 list_for_each_entry_safe(nt, tmp, &target_list, list) { in init_netconsole()
1995 list_del(&nt->list); in init_netconsole()
1996 free_param_target(nt); in init_netconsole()
2004 struct netconsole_target *nt, *tmp; in cleanup_netconsole() local
2021 list_for_each_entry_safe(nt, tmp, &target_list, list) { in cleanup_netconsole()
2022 list_del(&nt->list); in cleanup_netconsole()
2023 free_param_target(nt); in cleanup_netconsole()