diff --git a/drivers/firewire/fw-device.c b/drivers/firewire/fw-device.c
index 4877cdbc58cca8e7b5757234e9de81c57dec21de..15721a776cd44e3dd52edf67c3c8ed8ee6294e1d 100644
--- a/drivers/firewire/fw-device.c
+++ b/drivers/firewire/fw-device.c
@@ -562,8 +562,11 @@ static int update_unit(struct device *dev, void *data)
 	struct fw_unit *unit = fw_unit(dev);
 	struct fw_driver *driver = (struct fw_driver *)dev->driver;
 
-	if (is_fw_unit(dev) && driver != NULL && driver->update != NULL)
+	if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) {
+		down(&dev->sem);
 		driver->update(unit);
+		up(&dev->sem);
+	}
 
 	return 0;
 }