mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alessandro Menezes <alessandroasm@gmail.com>
To: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	stable@vger.kernel.org, Hans Verkuil <hverkuil@kernel.org>,
	ye xingchen <ye.xingchen@zte.com.cn>,
	Alessandro Menezes <alessandroasm@gmail.com>
Subject: [PATCH] Revert "media: siano: Convert to use sysfs_emit_at() API"
Date: Sun, 30 Aug 2026 13:23:30 -0400	[thread overview]
Message-ID: <20260830172330.3395671-1-alessandroasm@gmail.com> (raw)

This reverts commit 2f7d0c94396e ("media: siano: Convert to use
sysfs_emit_at() API").

sysfs_emit_at() may only be used from sysfs show() methods, where the
destination is the page-sized, page-aligned buffer that sysfs passes to
the callback.  It enforces that at runtime:

	if (WARN(!buf || offset_in_page(buf) || at < 0 || at >= PAGE_SIZE,
		 "invalid sysfs_emit_at: buf:%p at:%d\n", buf, at))
		return 0;

smsdvb has no show() method.  The converted functions format statistics
into smsdvb_debugfs.stats_data, a plain char[PAGE_SIZE] member of a
kmalloc()'d struct, which reaches userspace through debugfs via
simple_read_from_buffer().  The preceding kref and spinlock_t place
stats_data at offset 8 in the object, and the object itself is 4136
bytes, so it is served from the kmalloc-8192 cache with a page-aligned
base.  offset_in_page(stats_data) is therefore always 8, never 0, and
every one of the 104 converted calls trips the WARN and returns 0
without writing anything:

  WARNING: fs/sysfs/file.c:781 at sysfs_emit_at+0x59/0xd0
  invalid sysfs_emit_at: buf:00000000fb2f86e6 at:0
   smsdvb_print_isdb_stats_ex+0x459/0x650 [smsdvb]
   smsdvb_update_isdbt_stats_ex+0x34/0x6e0 [smsdvb]
   smsdvb_onresponse+0x2bc/0x6a0 [smsdvb]
   smsusb_onresponse+0x117/0x230 [smsusb]

The statistics are formatted from the USB completion handler, so this
fires from interrupt context on every statistics response the device
sends, and the debugfs stats file is permanently empty.

Note the buffer cannot be realigned the way commit 8f48ba303dfb
("drm/amdgpu: fix sysfs_emit/sysfs_emit_at warnings(v2)") handled the
same warning: there the buffer really was a sysfs page that had been
advanced past its start, so walking back to the page boundary was valid.
Here it is not a page at all, and backing the pointer up by
offset_in_page() would land on the struct's own kref and spinlock.

scnprintf() is the correct interface for formatting into a
driver-private buffer, and was the deliberate choice here since commit
af72bc8cd6ab ("media: siano: Use scnprintf() for avoiding potential
buffer overflow").

Fixes: 2f7d0c94396e ("media: siano: Convert to use sysfs_emit_at() API")
Cc: stable@vger.kernel.org
Signed-off-by: Alessandro Menezes <alessandroasm@gmail.com>
---
Tested on 7.0.0-30-generic with a Siano MDTV receiver (USB 187f:0600,
ISDB-T).  Before: reading
/sys/kernel/debug/usb/smsdvb/<dev>/stats returns nothing and each
statistics response from the device adds a WARN.  After: the file
contains the full per-layer ISDB-T statistics and no WARN is logged.

offsetof()/sizeof() above were measured on that kernel, not inferred.

--- a/drivers/media/common/siano/smsdvb-debugfs.c
+++ b/drivers/media/common/siano/smsdvb-debugfs.c
@@ -45,48 +45,89 @@
 
 	buf = debug_data->stats_data;
 
-	n += sysfs_emit_at(buf, n, "is_rf_locked = %d\n", p->is_rf_locked);
-	n += sysfs_emit_at(buf, n, "is_demod_locked = %d\n", p->is_demod_locked);
-	n += sysfs_emit_at(buf, n, "is_external_lna_on = %d\n", p->is_external_lna_on);
-	n += sysfs_emit_at(buf, n, "SNR = %d\n", p->SNR);
-	n += sysfs_emit_at(buf, n, "ber = %d\n", p->ber);
-	n += sysfs_emit_at(buf, n, "FIB_CRC = %d\n", p->FIB_CRC);
-	n += sysfs_emit_at(buf, n, "ts_per = %d\n", p->ts_per);
-	n += sysfs_emit_at(buf, n, "MFER = %d\n", p->MFER);
-	n += sysfs_emit_at(buf, n, "RSSI = %d\n", p->RSSI);
-	n += sysfs_emit_at(buf, n, "in_band_pwr = %d\n", p->in_band_pwr);
-	n += sysfs_emit_at(buf, n, "carrier_offset = %d\n", p->carrier_offset);
-	n += sysfs_emit_at(buf, n, "modem_state = %d\n", p->modem_state);
-	n += sysfs_emit_at(buf, n, "frequency = %d\n", p->frequency);
-	n += sysfs_emit_at(buf, n, "bandwidth = %d\n", p->bandwidth);
-	n += sysfs_emit_at(buf, n, "transmission_mode = %d\n", p->transmission_mode);
-	n += sysfs_emit_at(buf, n, "modem_state = %d\n", p->modem_state);
-	n += sysfs_emit_at(buf, n, "guard_interval = %d\n", p->guard_interval);
-	n += sysfs_emit_at(buf, n, "code_rate = %d\n", p->code_rate);
-	n += sysfs_emit_at(buf, n, "lp_code_rate = %d\n", p->lp_code_rate);
-	n += sysfs_emit_at(buf, n, "hierarchy = %d\n", p->hierarchy);
-	n += sysfs_emit_at(buf, n, "constellation = %d\n", p->constellation);
-	n += sysfs_emit_at(buf, n, "burst_size = %d\n", p->burst_size);
-	n += sysfs_emit_at(buf, n, "burst_duration = %d\n", p->burst_duration);
-	n += sysfs_emit_at(buf, n, "burst_cycle_time = %d\n", p->burst_cycle_time);
-	n += sysfs_emit_at(buf, n, "calc_burst_cycle_time = %d\n", p->calc_burst_cycle_time);
-	n += sysfs_emit_at(buf, n, "num_of_rows = %d\n", p->num_of_rows);
-	n += sysfs_emit_at(buf, n, "num_of_padd_cols = %d\n", p->num_of_padd_cols);
-	n += sysfs_emit_at(buf, n, "num_of_punct_cols = %d\n", p->num_of_punct_cols);
-	n += sysfs_emit_at(buf, n, "error_ts_packets = %d\n", p->error_ts_packets);
-	n += sysfs_emit_at(buf, n, "total_ts_packets = %d\n", p->total_ts_packets);
-	n += sysfs_emit_at(buf, n, "num_of_valid_mpe_tlbs = %d\n", p->num_of_valid_mpe_tlbs);
-	n += sysfs_emit_at(buf, n, "num_of_invalid_mpe_tlbs = %d\n", p->num_of_invalid_mpe_tlbs);
-	n += sysfs_emit_at(buf, n, "num_of_corrected_mpe_tlbs = %d\n",
-			   p->num_of_corrected_mpe_tlbs);
-	n += sysfs_emit_at(buf, n, "ber_error_count = %d\n", p->ber_error_count);
-	n += sysfs_emit_at(buf, n, "ber_bit_count = %d\n", p->ber_bit_count);
-	n += sysfs_emit_at(buf, n, "sms_to_host_tx_errors = %d\n", p->sms_to_host_tx_errors);
-	n += sysfs_emit_at(buf, n, "pre_ber = %d\n", p->pre_ber);
-	n += sysfs_emit_at(buf, n, "cell_id = %d\n", p->cell_id);
-	n += sysfs_emit_at(buf, n, "dvbh_srv_ind_hp = %d\n", p->dvbh_srv_ind_hp);
-	n += sysfs_emit_at(buf, n, "dvbh_srv_ind_lp = %d\n", p->dvbh_srv_ind_lp);
-	n += sysfs_emit_at(buf, n, "num_mpe_received = %d\n", p->num_mpe_received);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "is_rf_locked = %d\n", p->is_rf_locked);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "is_demod_locked = %d\n", p->is_demod_locked);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "is_external_lna_on = %d\n", p->is_external_lna_on);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "SNR = %d\n", p->SNR);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "ber = %d\n", p->ber);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "FIB_CRC = %d\n", p->FIB_CRC);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "ts_per = %d\n", p->ts_per);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "MFER = %d\n", p->MFER);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "RSSI = %d\n", p->RSSI);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "in_band_pwr = %d\n", p->in_band_pwr);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "carrier_offset = %d\n", p->carrier_offset);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "modem_state = %d\n", p->modem_state);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "frequency = %d\n", p->frequency);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "bandwidth = %d\n", p->bandwidth);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "transmission_mode = %d\n", p->transmission_mode);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "modem_state = %d\n", p->modem_state);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "guard_interval = %d\n", p->guard_interval);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "code_rate = %d\n", p->code_rate);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "lp_code_rate = %d\n", p->lp_code_rate);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "hierarchy = %d\n", p->hierarchy);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "constellation = %d\n", p->constellation);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "burst_size = %d\n", p->burst_size);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "burst_duration = %d\n", p->burst_duration);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "burst_cycle_time = %d\n", p->burst_cycle_time);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "calc_burst_cycle_time = %d\n",
+		      p->calc_burst_cycle_time);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "num_of_rows = %d\n", p->num_of_rows);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "num_of_padd_cols = %d\n", p->num_of_padd_cols);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "num_of_punct_cols = %d\n", p->num_of_punct_cols);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "error_ts_packets = %d\n", p->error_ts_packets);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "total_ts_packets = %d\n", p->total_ts_packets);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "num_of_valid_mpe_tlbs = %d\n", p->num_of_valid_mpe_tlbs);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "num_of_invalid_mpe_tlbs = %d\n", p->num_of_invalid_mpe_tlbs);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "num_of_corrected_mpe_tlbs = %d\n", p->num_of_corrected_mpe_tlbs);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "ber_error_count = %d\n", p->ber_error_count);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "ber_bit_count = %d\n", p->ber_bit_count);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "sms_to_host_tx_errors = %d\n", p->sms_to_host_tx_errors);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "pre_ber = %d\n", p->pre_ber);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "cell_id = %d\n", p->cell_id);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "dvbh_srv_ind_hp = %d\n", p->dvbh_srv_ind_hp);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "dvbh_srv_ind_lp = %d\n", p->dvbh_srv_ind_lp);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "num_mpe_received = %d\n", p->num_mpe_received);
 
 	debug_data->stats_count = n;
 	spin_unlock(&debug_data->lock);
@@ -107,49 +148,78 @@
 
 	buf = debug_data->stats_data;
 
-	n += sysfs_emit_at(buf, n, "statistics_type = %d\t", p->statistics_type);
-	n += sysfs_emit_at(buf, n, "full_size = %d\n", p->full_size);
-
-	n += sysfs_emit_at(buf, n, "is_rf_locked = %d\t\t", p->is_rf_locked);
-	n += sysfs_emit_at(buf, n, "is_demod_locked = %d\t", p->is_demod_locked);
-	n += sysfs_emit_at(buf, n, "is_external_lna_on = %d\n", p->is_external_lna_on);
-	n += sysfs_emit_at(buf, n, "SNR = %d dB\t\t", p->SNR);
-	n += sysfs_emit_at(buf, n, "RSSI = %d dBm\t\t", p->RSSI);
-	n += sysfs_emit_at(buf, n, "in_band_pwr = %d dBm\n", p->in_band_pwr);
-	n += sysfs_emit_at(buf, n, "carrier_offset = %d\t", p->carrier_offset);
-	n += sysfs_emit_at(buf, n, "bandwidth = %d\t\t", p->bandwidth);
-	n += sysfs_emit_at(buf, n, "frequency = %d Hz\n", p->frequency);
-	n += sysfs_emit_at(buf, n, "transmission_mode = %d\t", p->transmission_mode);
-	n += sysfs_emit_at(buf, n, "modem_state = %d\t\t", p->modem_state);
-	n += sysfs_emit_at(buf, n, "guard_interval = %d\n", p->guard_interval);
-	n += sysfs_emit_at(buf, n, "system_type = %d\t\t", p->system_type);
-	n += sysfs_emit_at(buf, n, "partial_reception = %d\t", p->partial_reception);
-	n += sysfs_emit_at(buf, n, "num_of_layers = %d\n", p->num_of_layers);
-	n += sysfs_emit_at(buf, n, "sms_to_host_tx_errors = %d\n", p->sms_to_host_tx_errors);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "statistics_type = %d\t", p->statistics_type);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "full_size = %d\n", p->full_size);
+
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "is_rf_locked = %d\t\t", p->is_rf_locked);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "is_demod_locked = %d\t", p->is_demod_locked);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "is_external_lna_on = %d\n", p->is_external_lna_on);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "SNR = %d dB\t\t", p->SNR);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "RSSI = %d dBm\t\t", p->RSSI);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "in_band_pwr = %d dBm\n", p->in_band_pwr);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "carrier_offset = %d\t", p->carrier_offset);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "bandwidth = %d\t\t", p->bandwidth);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "frequency = %d Hz\n", p->frequency);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "transmission_mode = %d\t", p->transmission_mode);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "modem_state = %d\t\t", p->modem_state);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "guard_interval = %d\n", p->guard_interval);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "system_type = %d\t\t", p->system_type);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "partial_reception = %d\t", p->partial_reception);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "num_of_layers = %d\n", p->num_of_layers);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "sms_to_host_tx_errors = %d\n", p->sms_to_host_tx_errors);
 
 	for (i = 0; i < 3; i++) {
 		if (p->layer_info[i].number_of_segments < 1 ||
 		    p->layer_info[i].number_of_segments > 13)
 			continue;
 
-		n += sysfs_emit_at(buf, n, "\nLayer %d\n", i);
-		n += sysfs_emit_at(buf, n, "\tcode_rate = %d\t", p->layer_info[i].code_rate);
-		n += sysfs_emit_at(buf, n, "constellation = %d\n", p->layer_info[i].constellation);
-		n += sysfs_emit_at(buf, n, "\tber = %-5d\t", p->layer_info[i].ber);
-		n += sysfs_emit_at(buf, n, "\tber_error_count = %-5d\t",
-				   p->layer_info[i].ber_error_count);
-		n += sysfs_emit_at(buf, n, "ber_bit_count = %-5d\n",
-				   p->layer_info[i].ber_bit_count);
-		n += sysfs_emit_at(buf, n, "\tpre_ber = %-5d\t", p->layer_info[i].pre_ber);
-		n += sysfs_emit_at(buf, n, "\tts_per = %-5d\n", p->layer_info[i].ts_per);
-		n += sysfs_emit_at(buf, n, "\terror_ts_packets = %-5d\t",
-				   p->layer_info[i].error_ts_packets);
-		n += sysfs_emit_at(buf, n, "total_ts_packets = %-5d\t",
-				   p->layer_info[i].total_ts_packets);
-		n += sysfs_emit_at(buf, n, "ti_ldepth_i = %d\n", p->layer_info[i].ti_ldepth_i);
-		n += sysfs_emit_at(buf, n, "\tnumber_of_segments = %d\t",
-				   p->layer_info[i].number_of_segments);
-		n += sysfs_emit_at(buf, n, "tmcc_errors = %d\n", p->layer_info[i].tmcc_errors);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\nLayer %d\n", i);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\tcode_rate = %d\t",
+			      p->layer_info[i].code_rate);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "constellation = %d\n",
+			      p->layer_info[i].constellation);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\tber = %-5d\t",
+			      p->layer_info[i].ber);
+		n += scnprintf(&buf[n], PAGE_SIZE - n,
+			      "\tber_error_count = %-5d\t",
+			      p->layer_info[i].ber_error_count);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "ber_bit_count = %-5d\n",
+			      p->layer_info[i].ber_bit_count);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\tpre_ber = %-5d\t",
+			      p->layer_info[i].pre_ber);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\tts_per = %-5d\n",
+			      p->layer_info[i].ts_per);
+		n += scnprintf(&buf[n], PAGE_SIZE - n,
+			      "\terror_ts_packets = %-5d\t",
+			      p->layer_info[i].error_ts_packets);
+		n += scnprintf(&buf[n], PAGE_SIZE - n,
+			      "total_ts_packets = %-5d\t",
+			      p->layer_info[i].total_ts_packets);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "ti_ldepth_i = %d\n",
+			      p->layer_info[i].ti_ldepth_i);
+		n += scnprintf(&buf[n], PAGE_SIZE - n,
+			      "\tnumber_of_segments = %d\t",
+			      p->layer_info[i].number_of_segments);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "tmcc_errors = %d\n",
+			      p->layer_info[i].tmcc_errors);
 	}
 
 	debug_data->stats_count = n;
@@ -171,50 +241,80 @@
 
 	buf = debug_data->stats_data;
 
-	n += sysfs_emit_at(buf, n, "statistics_type = %d\t", p->statistics_type);
-	n += sysfs_emit_at(buf, n, "full_size = %d\n", p->full_size);
-
-	n += sysfs_emit_at(buf, n, "is_rf_locked = %d\t\t", p->is_rf_locked);
-	n += sysfs_emit_at(buf, n, "is_demod_locked = %d\t", p->is_demod_locked);
-	n += sysfs_emit_at(buf, n, "is_external_lna_on = %d\n", p->is_external_lna_on);
-	n += sysfs_emit_at(buf, n, "SNR = %d dB\t\t", p->SNR);
-	n += sysfs_emit_at(buf, n, "RSSI = %d dBm\t\t", p->RSSI);
-	n += sysfs_emit_at(buf, n, "in_band_pwr = %d dBm\n", p->in_band_pwr);
-	n += sysfs_emit_at(buf, n, "carrier_offset = %d\t", p->carrier_offset);
-	n += sysfs_emit_at(buf, n, "bandwidth = %d\t\t", p->bandwidth);
-	n += sysfs_emit_at(buf, n, "frequency = %d Hz\n", p->frequency);
-	n += sysfs_emit_at(buf, n, "transmission_mode = %d\t", p->transmission_mode);
-	n += sysfs_emit_at(buf, n, "modem_state = %d\t\t", p->modem_state);
-	n += sysfs_emit_at(buf, n, "guard_interval = %d\n", p->guard_interval);
-	n += sysfs_emit_at(buf, n, "system_type = %d\t\t", p->system_type);
-	n += sysfs_emit_at(buf, n, "partial_reception = %d\t", p->partial_reception);
-	n += sysfs_emit_at(buf, n, "num_of_layers = %d\n", p->num_of_layers);
-	n += sysfs_emit_at(buf, n, "segment_number = %d\t", p->segment_number);
-	n += sysfs_emit_at(buf, n, "tune_bw = %d\n", p->tune_bw);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "statistics_type = %d\t", p->statistics_type);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "full_size = %d\n", p->full_size);
+
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "is_rf_locked = %d\t\t", p->is_rf_locked);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "is_demod_locked = %d\t", p->is_demod_locked);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "is_external_lna_on = %d\n", p->is_external_lna_on);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "SNR = %d dB\t\t", p->SNR);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "RSSI = %d dBm\t\t", p->RSSI);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "in_band_pwr = %d dBm\n", p->in_band_pwr);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "carrier_offset = %d\t", p->carrier_offset);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "bandwidth = %d\t\t", p->bandwidth);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "frequency = %d Hz\n", p->frequency);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "transmission_mode = %d\t", p->transmission_mode);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "modem_state = %d\t\t", p->modem_state);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "guard_interval = %d\n", p->guard_interval);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "system_type = %d\t\t", p->system_type);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "partial_reception = %d\t", p->partial_reception);
+	n += scnprintf(&buf[n], PAGE_SIZE - n,
+		      "num_of_layers = %d\n", p->num_of_layers);
+	n += scnprintf(&buf[n], PAGE_SIZE - n, "segment_number = %d\t",
+		      p->segment_number);
+	n += scnprintf(&buf[n], PAGE_SIZE - n, "tune_bw = %d\n",
+		      p->tune_bw);
 
 	for (i = 0; i < 3; i++) {
 		if (p->layer_info[i].number_of_segments < 1 ||
 		    p->layer_info[i].number_of_segments > 13)
 			continue;
 
-		n += sysfs_emit_at(buf, n, "\nLayer %d\n", i);
-		n += sysfs_emit_at(buf, n, "\tcode_rate = %d\t", p->layer_info[i].code_rate);
-		n += sysfs_emit_at(buf, n, "constellation = %d\n", p->layer_info[i].constellation);
-		n += sysfs_emit_at(buf, n, "\tber = %-5d\t", p->layer_info[i].ber);
-		n += sysfs_emit_at(buf, n, "\tber_error_count = %-5d\t",
-				   p->layer_info[i].ber_error_count);
-		n += sysfs_emit_at(buf, n, "ber_bit_count = %-5d\n",
-				   p->layer_info[i].ber_bit_count);
-		n += sysfs_emit_at(buf, n, "\tpre_ber = %-5d\t", p->layer_info[i].pre_ber);
-		n += sysfs_emit_at(buf, n, "\tts_per = %-5d\n", p->layer_info[i].ts_per);
-		n += sysfs_emit_at(buf, n, "\terror_ts_packets = %-5d\t",
-				   p->layer_info[i].error_ts_packets);
-		n += sysfs_emit_at(buf, n, "total_ts_packets = %-5d\t",
-				   p->layer_info[i].total_ts_packets);
-		n += sysfs_emit_at(buf, n, "ti_ldepth_i = %d\n", p->layer_info[i].ti_ldepth_i);
-		n += sysfs_emit_at(buf, n, "\tnumber_of_segments = %d\t",
-				   p->layer_info[i].number_of_segments);
-		n += sysfs_emit_at(buf, n, "tmcc_errors = %d\n", p->layer_info[i].tmcc_errors);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\nLayer %d\n", i);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\tcode_rate = %d\t",
+			      p->layer_info[i].code_rate);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "constellation = %d\n",
+			      p->layer_info[i].constellation);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\tber = %-5d\t",
+			      p->layer_info[i].ber);
+		n += scnprintf(&buf[n], PAGE_SIZE - n,
+			      "\tber_error_count = %-5d\t",
+			      p->layer_info[i].ber_error_count);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "ber_bit_count = %-5d\n",
+			      p->layer_info[i].ber_bit_count);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\tpre_ber = %-5d\t",
+			      p->layer_info[i].pre_ber);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "\tts_per = %-5d\n",
+			      p->layer_info[i].ts_per);
+		n += scnprintf(&buf[n], PAGE_SIZE - n,
+			      "\terror_ts_packets = %-5d\t",
+			      p->layer_info[i].error_ts_packets);
+		n += scnprintf(&buf[n], PAGE_SIZE - n,
+			      "total_ts_packets = %-5d\t",
+			      p->layer_info[i].total_ts_packets);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "ti_ldepth_i = %d\n",
+			      p->layer_info[i].ti_ldepth_i);
+		n += scnprintf(&buf[n], PAGE_SIZE - n,
+			      "\tnumber_of_segments = %d\t",
+			      p->layer_info[i].number_of_segments);
+		n += scnprintf(&buf[n], PAGE_SIZE - n, "tmcc_errors = %d\n",
+			      p->layer_info[i].tmcc_errors);
 	}
 
 
-- 
2.43.0


             reply	other threads:[~2026-08-30 17:24 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-30 17:23 Alessandro Menezes [this message]
2026-09-01  1:21 ` Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260830172330.3395671-1-alessandroasm@gmail.com \
    --to=alessandroasm@gmail.com \
    --cc=hverkuil@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=ye.xingchen@zte.com.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®