Patch "soundwire: fix enumeration completion" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    soundwire: fix enumeration completion

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     soundwire-fix-enumeration-completion.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e1113254203f45ff4ec287caaad5528220dad9d3
Author: Johan Hovold <johan+linaro@xxxxxxxxxx>
Date:   Wed Jul 5 14:30:11 2023 +0200

    soundwire: fix enumeration completion
    
    [ Upstream commit c40d6b3249b11d60e09d81530588f56233d9aa44 ]
    
    The soundwire subsystem uses two completion structures that allow
    drivers to wait for soundwire device to become enumerated on the bus and
    initialised by their drivers, respectively.
    
    The code implementing the signalling is currently broken as it does not
    signal all current and future waiters and also uses the wrong
    reinitialisation function, which can potentially lead to memory
    corruption if there are still waiters on the queue.
    
    Not signalling future waiters specifically breaks sound card probe
    deferrals as codec drivers can not tell that the soundwire device is
    already attached when being reprobed. Some codec runtime PM
    implementations suffer from similar problems as waiting for enumeration
    during resume can also timeout despite the device already having been
    enumerated.
    
    Fixes: fb9469e54fa7 ("soundwire: bus: fix race condition with enumeration_complete signaling")
    Fixes: a90def068127 ("soundwire: bus: fix race condition with initialization_complete signaling")
    Cc: stable@xxxxxxxxxxxxxxx      # 5.7
    Cc: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
    Cc: Rander Wang <rander.wang@xxxxxxxxxxxxxxx>
    Signed-off-by: Johan Hovold <johan+linaro@xxxxxxxxxx>
    Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20230705123018.30903-2-johan+linaro@xxxxxxxxxx
    Signed-off-by: Vinod Koul <vkoul@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c
index cc4cca0325b98..230a3250f3154 100644
--- a/drivers/soundwire/bus.c
+++ b/drivers/soundwire/bus.c
@@ -828,8 +828,8 @@ static void sdw_modify_slave_status(struct sdw_slave *slave,
 			"%s: initializing enumeration and init completion for Slave %d\n",
 			__func__, slave->dev_num);
 
-		init_completion(&slave->enumeration_complete);
-		init_completion(&slave->initialization_complete);
+		reinit_completion(&slave->enumeration_complete);
+		reinit_completion(&slave->initialization_complete);
 
 	} else if ((status == SDW_SLAVE_ATTACHED) &&
 		   (slave->status == SDW_SLAVE_UNATTACHED)) {
@@ -837,7 +837,7 @@ static void sdw_modify_slave_status(struct sdw_slave *slave,
 			"%s: signaling enumeration completion for Slave %d\n",
 			__func__, slave->dev_num);
 
-		complete(&slave->enumeration_complete);
+		complete_all(&slave->enumeration_complete);
 	}
 	slave->status = status;
 	mutex_unlock(&bus->bus_lock);
@@ -1840,7 +1840,7 @@ int sdw_handle_slave_status(struct sdw_bus *bus,
 				"%s: signaling initialization completion for Slave %d\n",
 				__func__, slave->dev_num);
 
-			complete(&slave->initialization_complete);
+			complete_all(&slave->initialization_complete);
 
 			/*
 			 * If the manager became pm_runtime active, the peripherals will be



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux