From f83a052f9a0b62318d4f6e9bdddf9fc0103ac908 Mon Sep 17 00:00:00 2001 From: Adam Goldman Date: Mon, 25 Mar 2024 07:37:25 +0900 Subject: firewire: core: option to log bus reset initiation Add a debug parameter to firewire-core, analogous to the one in firewire-ohci. When this is set to 1, log when we schedule, delay, or initiate a bus reset. Since FireWire bus resets can originate from any node on the bus, specific logging of the resets we initiate provides additional insight. Signed-off-by: Adam Goldman Signed-off-by: Takashi Sakamoto --- drivers/firewire/core.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers/firewire/core.h') diff --git a/drivers/firewire/core.h b/drivers/firewire/core.h index 95c10f3d2282..ff96e5456b5d 100644 --- a/drivers/firewire/core.h +++ b/drivers/firewire/core.h @@ -238,6 +238,10 @@ static inline bool is_next_generation(int new_generation, int old_generation) /* OHCI-1394's default upper bound for physical DMA: 4 GB */ #define FW_MAX_PHYSICAL_RANGE (1ULL << 32) +#define FW_CORE_PARAM_DEBUG_BUSRESETS 1 + +extern int fw_core_param_debug; + void fw_core_handle_request(struct fw_card *card, struct fw_packet *request); void fw_core_handle_response(struct fw_card *card, struct fw_packet *packet); int fw_get_response_length(struct fw_request *request); -- cgit v1.2.3-59-g8ed1b From c5deb01849688fd5d9dd5113e81a7426b78bf02c Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Sun, 28 Apr 2024 16:13:44 +0900 Subject: firewire: core: obsolete tcode check macros with inline functions This commit declares the helper functions to check tcode to obsolete the functional macros. Link: https://lore.kernel.org/r/20240428071347.409202-7-o-takashi@sakamocchi.jp Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-transaction.c | 4 ++-- drivers/firewire/core.h | 21 ++++++++++++++------- drivers/firewire/ohci.c | 6 +++--- 3 files changed, 19 insertions(+), 12 deletions(-) (limited to 'drivers/firewire/core.h') diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-transaction.c index a113f801cf33..45ea15342ab8 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -972,7 +972,7 @@ void fw_core_handle_request(struct fw_card *card, struct fw_packet *p) if (p->ack != ACK_PENDING && p->ack != ACK_COMPLETE) return; - if (TCODE_IS_LINK_INTERNAL(async_header_get_tcode(p->header))) { + if (tcode_is_link_internal(async_header_get_tcode(p->header))) { fw_cdev_handle_phy_packet(card, p); return; } @@ -1109,7 +1109,7 @@ static void handle_topology_map(struct fw_card *card, struct fw_request *request { int start; - if (!TCODE_IS_READ_REQUEST(tcode)) { + if (!tcode_is_read_request(tcode)) { fw_send_response(card, request, RCODE_TYPE_ERROR); return; } diff --git a/drivers/firewire/core.h b/drivers/firewire/core.h index ff96e5456b5d..5097c7a270b4 100644 --- a/drivers/firewire/core.h +++ b/drivers/firewire/core.h @@ -225,13 +225,20 @@ static inline bool is_next_generation(int new_generation, int old_generation) #define TCODE_LINK_INTERNAL 0xe -#define TCODE_IS_READ_REQUEST(tcode) (((tcode) & ~1) == 4) -#define TCODE_IS_BLOCK_PACKET(tcode) (((tcode) & 1) != 0) -#define TCODE_IS_LINK_INTERNAL(tcode) ((tcode) == TCODE_LINK_INTERNAL) -#define TCODE_IS_REQUEST(tcode) (((tcode) & 2) == 0) -#define TCODE_IS_RESPONSE(tcode) (((tcode) & 2) != 0) -#define TCODE_HAS_REQUEST_DATA(tcode) (((tcode) & 12) != 4) -#define TCODE_HAS_RESPONSE_DATA(tcode) (((tcode) & 12) != 0) +static inline bool tcode_is_read_request(unsigned int tcode) +{ + return (tcode & ~1u) == 4u; +} + +static inline bool tcode_is_block_packet(unsigned int tcode) +{ + return (tcode & 1u) != 0u; +} + +static inline bool tcode_is_link_internal(unsigned int tcode) +{ + return (tcode == TCODE_LINK_INTERNAL); +} #define LOCAL_BUS 0xffc0 diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index c2d3dc7fbe6e..c8891aa70a51 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -1382,7 +1382,7 @@ static int at_context_queue_packet(struct context *ctx, (packet->header[0] & 0xffff0000)); header[2] = cpu_to_le32(packet->header[2]); - if (TCODE_IS_BLOCK_PACKET(tcode)) + if (tcode_is_block_packet(tcode)) header[3] = cpu_to_le32(packet->header[3]); else header[3] = (__force __le32) packet->header[3]; @@ -1570,7 +1570,7 @@ static void handle_local_rom(struct fw_ohci *ohci, int tcode, length, i; tcode = async_header_get_tcode(packet->header); - if (TCODE_IS_BLOCK_PACKET(tcode)) + if (tcode_is_block_packet(tcode)) length = async_header_get_data_length(packet->header); else length = 4; @@ -1579,7 +1579,7 @@ static void handle_local_rom(struct fw_ohci *ohci, if (i + length > CONFIG_ROM_SIZE) { fw_fill_response(&response, packet->header, RCODE_ADDRESS_ERROR, NULL, 0); - } else if (!TCODE_IS_READ_REQUEST(tcode)) { + } else if (!tcode_is_read_request(tcode)) { fw_fill_response(&response, packet->header, RCODE_TYPE_ERROR, NULL, 0); } else { -- cgit v1.2.3-59-g8ed1b From 01d860427f67fd4b797ae616a2adb57263baeee9 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Wed, 1 May 2024 16:32:37 +0900 Subject: Revert "firewire: core: option to log bus reset initiation" This reverts commit 6732491243045f5a7e1995b4be5f3c964b579ebd. The former commit adds some alternative tracepoints events to replace the reverted kernel log messages. Link: https://lore.kernel.org/r/20240501073238.72769-5-o-takashi@sakamocchi.jp Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-card.c | 10 ---------- drivers/firewire/core-transaction.c | 7 ------- drivers/firewire/core.h | 4 ---- 3 files changed, 21 deletions(-) (limited to 'drivers/firewire/core.h') diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c index 5d43acf45a7d..127d87e3a153 100644 --- a/drivers/firewire/core-card.c +++ b/drivers/firewire/core-card.c @@ -224,10 +224,6 @@ static int reset_bus(struct fw_card *card, bool short_reset) trace_bus_reset_initiate(card->generation, short_reset); - if (unlikely(fw_core_param_debug & FW_CORE_PARAM_DEBUG_BUSRESETS)) - fw_notice(card, "initiating %s bus reset\n", - short_reset ? "short" : "long"); - return card->driver->update_phy_reg(card, reg, 0, bit); } @@ -235,10 +231,6 @@ void fw_schedule_bus_reset(struct fw_card *card, bool delayed, bool short_reset) { trace_bus_reset_schedule(card->generation, short_reset); - if (unlikely(fw_core_param_debug & FW_CORE_PARAM_DEBUG_BUSRESETS)) - fw_notice(card, "scheduling %s bus reset\n", - short_reset ? "short" : "long"); - /* We don't try hard to sort out requests of long vs. short resets. */ card->br_short = short_reset; @@ -259,8 +251,6 @@ static void br_work(struct work_struct *work) time_before64(get_jiffies_64(), card->reset_jiffies + 2 * HZ)) { trace_bus_reset_postpone(card->generation, card->br_short); - if (unlikely(fw_core_param_debug & FW_CORE_PARAM_DEBUG_BUSRESETS)) - fw_notice(card, "delaying bus reset\n"); if (!queue_delayed_work(fw_workqueue, &card->br_work, 2 * HZ)) fw_card_put(card); return; diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-transaction.c index d3eefbf23663..571fdff65c2b 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -1390,12 +1390,5 @@ static void __exit fw_core_cleanup(void) idr_destroy(&fw_device_idr); } -int fw_core_param_debug; -module_param_named(debug, fw_core_param_debug, int, 0644); -MODULE_PARM_DESC(debug, "Verbose logging (default = 0" - ", bus resets = " __stringify(FW_CORE_PARAM_DEBUG_BUSRESETS) - ")"); - - module_init(fw_core_init); module_exit(fw_core_cleanup); diff --git a/drivers/firewire/core.h b/drivers/firewire/core.h index 5097c7a270b4..7c36d2628e37 100644 --- a/drivers/firewire/core.h +++ b/drivers/firewire/core.h @@ -245,10 +245,6 @@ static inline bool tcode_is_link_internal(unsigned int tcode) /* OHCI-1394's default upper bound for physical DMA: 4 GB */ #define FW_MAX_PHYSICAL_RANGE (1ULL << 32) -#define FW_CORE_PARAM_DEBUG_BUSRESETS 1 - -extern int fw_core_param_debug; - void fw_core_handle_request(struct fw_card *card, struct fw_packet *request); void fw_core_handle_response(struct fw_card *card, struct fw_packet *packet); int fw_get_response_length(struct fw_request *request); -- cgit v1.2.3-59-g8ed1b