aboutsummaryrefslogtreecommitdiff
path: root/drivers/ieee1394/nodemgr.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-02-24 15:39:54 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2009-02-24 15:39:54 -0800
commita792cd12cf07cf77c7d1d41b46b4f8327ecf82d0 (patch)
tree27acf59615245ac2b990fc45e99ce91775767e41 /drivers/ieee1394/nodemgr.c
parent4daa0682af15b24e9d66ccde3a5d502682e572d8 (diff)
parente73bf9f135fe1e5db646e668676d22af3008e0c0 (diff)
Merge branch 'firedtv-merge' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6
* 'firedtv-merge' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6: firedtv: dvb_frontend_info for FireDTV S2, fix "frequency limits undefined" error firedtv: massive refactoring firedtv: rename files, variables, functions from firesat to firedtv firedtv: Use DEFINE_SPINLOCK firedtv: fix registration - adapter number could only be zero firedtv: use length_field() of PMT as length firedtv: fix returned struct for ca_info firedtv: cleanups and minor fixes ieee1394: remove superfluous assertions ieee1394: inherit ud vendor_id from node vendor_id ieee1394: add hpsb_node_read() and hpsb_node_lock() ieee1394: use correct barrier types between accesses of nodeid and generation firesat: copyrights, rename to firedtv, API conversions, fix remote control input firesat: avc resend firesat: update isochronous interface, add CI support firesat: add DVB-S support for DVB-S2 devices firesat: fix DVB-S2 device recognition DVB: add firesat driver
Diffstat (limited to 'drivers/ieee1394/nodemgr.c')
-rw-r--r--drivers/ieee1394/nodemgr.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c
index 906c5a98d81..53aada5bbe1 100644
--- a/drivers/ieee1394/nodemgr.c
+++ b/drivers/ieee1394/nodemgr.c
@@ -971,6 +971,9 @@ static struct unit_directory *nodemgr_process_unit_directory
ud->ud_kv = ud_kv;
ud->id = (*id)++;
+ /* inherit vendor_id from root directory if none exists in unit dir */
+ ud->vendor_id = ne->vendor_id;
+
csr1212_for_each_dir_entry(ne->csr, kv, ud_kv, dentry) {
switch (kv->key.id) {
case CSR1212_KV_ID_VENDOR:
@@ -1265,7 +1268,8 @@ static void nodemgr_update_node(struct node_entry *ne, struct csr1212_csr *csr,
csr1212_destroy_csr(csr);
}
- /* Mark the node current */
+ /* Finally, mark the node current */
+ smp_wmb();
ne->generation = generation;
if (ne->in_limbo) {
@@ -1798,7 +1802,7 @@ void hpsb_node_fill_packet(struct node_entry *ne, struct hpsb_packet *packet)
{
packet->host = ne->host;
packet->generation = ne->generation;
- barrier();
+ smp_rmb();
packet->node_id = ne->nodeid;
}
@@ -1807,7 +1811,7 @@ int hpsb_node_write(struct node_entry *ne, u64 addr,
{
unsigned int generation = ne->generation;
- barrier();
+ smp_rmb();
return hpsb_write(ne->host, ne->nodeid, generation,
addr, buffer, length);
}