All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] firewire: core: use more outbound tlabels
@ 2009-06-14  9:44 Stefan Richter
       [not found] ` <20090614103656.GT6540@sliepen.org>
  0 siblings, 1 reply; 2+ messages in thread
From: Stefan Richter @ 2009-06-14  9:44 UTC (permalink / raw)
  To: linux1394-devel; +Cc: linux-kernel

This appears to be a typo.  Tlabel is a 6 bits wide datum; we should
wrap it after 63 rather than 31.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
---
 drivers/firewire/core-transaction.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: b/drivers/firewire/core-transaction.c
===================================================================
--- a/drivers/firewire/core-transaction.c
+++ b/drivers/firewire/core-transaction.c
@@ -294,7 +294,7 @@ void fw_send_request(struct fw_card *car
 		return;
 	}
 
-	card->current_tlabel = (card->current_tlabel + 1) & 0x1f;
+	card->current_tlabel = (card->current_tlabel + 1) & 0x3f;
 	card->tlabel_mask |= (1 << tlabel);
 
 	t->node_id = destination_id;

-- 
Stefan Richter
-=====-==--= -==- -===-
http://arcgraph.de/sr/


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH update] firewire: core: use more outbound tlabels
       [not found]   ` <4A34D871.7030708@s5r6.in-berlin.de>
@ 2009-06-14 11:23     ` Stefan Richter
  0 siblings, 0 replies; 2+ messages in thread
From: Stefan Richter @ 2009-06-14 11:23 UTC (permalink / raw)
  To: linux1394-devel; +Cc: linux-kernel, Guus Sliepen

Tlabel is a 6 bits wide datum.  Wrap it after 63 rather than 31 for more
safety against transaction label exhaustion and potential responders'
transaction layer bugs.  (As noted by Guus Sliepen, this change requires
an expansion of tlabel_mask to 64 bits.)

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
---
 drivers/firewire/core-transaction.c |    8 ++++----
 include/linux/firewire.h            |    3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

Index: b/drivers/firewire/core-transaction.c
===================================================================
--- a/drivers/firewire/core-transaction.c
+++ b/drivers/firewire/core-transaction.c
@@ -82,7 +82,7 @@ static int close_transaction(struct fw_t
 	list_for_each_entry(t, &card->transaction_list, link) {
 		if (t == transaction) {
 			list_del(&t->link);
-			card->tlabel_mask &= ~(1 << t->tlabel);
+			card->tlabel_mask &= ~(1ULL << t->tlabel);
 			break;
 		}
 	}
@@ -288,14 +288,14 @@ void fw_send_request(struct fw_card *car
 	spin_lock_irqsave(&card->lock, flags);
 
 	tlabel = card->current_tlabel;
-	if (card->tlabel_mask & (1 << tlabel)) {
+	if (card->tlabel_mask & (1ULL << tlabel)) {
 		spin_unlock_irqrestore(&card->lock, flags);
 		callback(card, RCODE_SEND_ERROR, NULL, 0, callback_data);
 		return;
 	}
 
-	card->current_tlabel = (card->current_tlabel + 1) & 0x1f;
-	card->tlabel_mask |= (1 << tlabel);
+	card->current_tlabel = (card->current_tlabel + 1) & 0x3f;
+	card->tlabel_mask |= (1ULL << tlabel);
 
 	t->node_id = destination_id;
 	t->tlabel = tlabel;
Index: b/include/linux/firewire.h
===================================================================
--- a/include/linux/firewire.h
+++ b/include/linux/firewire.h
@@ -98,7 +98,8 @@ struct fw_card {
 
 	int node_id;
 	int generation;
-	int current_tlabel, tlabel_mask;
+	int current_tlabel;
+	u64 tlabel_mask;
 	struct list_head transaction_list;
 	struct timer_list flush_timer;
 	unsigned long reset_jiffies;

-- 
Stefan Richter
-=====-==--= -==- -===-
http://arcgraph.de/sr/


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-06-14 11:24 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-14  9:44 [PATCH] firewire: core: use more outbound tlabels Stefan Richter
     [not found] ` <20090614103656.GT6540@sliepen.org>
     [not found]   ` <4A34D871.7030708@s5r6.in-berlin.de>
2009-06-14 11:23     ` [PATCH update] " Stefan Richter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.