spi-topcliff-pch: fix to use list_for_each_entry_safe() when delete list items

Since we will remove items off the list using list_del_init() we need
to use a safe version of the list_for_each_entry() macro aptly named
list_for_each_entry_safe().

Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
Signed-off-by: Mark Brown <broonie@sirena.org.uk>
This commit is contained in:
Wei Yongjun 2013-04-27 14:06:00 +08:00 committed by Mark Brown
parent 0113f22ee4
commit cd8d984f0d

View File

@ -615,7 +615,7 @@ static void pch_spi_set_tx(struct pch_spi_data *data, int *bpw)
int size; int size;
u32 n_writes; u32 n_writes;
int j; int j;
struct spi_message *pmsg; struct spi_message *pmsg, *tmp;
const u8 *tx_buf; const u8 *tx_buf;
const u16 *tx_sbuf; const u16 *tx_sbuf;
@ -656,7 +656,7 @@ static void pch_spi_set_tx(struct pch_spi_data *data, int *bpw)
if (!data->pkt_rx_buff) { if (!data->pkt_rx_buff) {
/* flush queue and set status of all transfers to -ENOMEM */ /* flush queue and set status of all transfers to -ENOMEM */
dev_err(&data->master->dev, "%s :kzalloc failed\n", __func__); dev_err(&data->master->dev, "%s :kzalloc failed\n", __func__);
list_for_each_entry(pmsg, data->queue.next, queue) { list_for_each_entry_safe(pmsg, tmp, data->queue.next, queue) {
pmsg->status = -ENOMEM; pmsg->status = -ENOMEM;
if (pmsg->complete != 0) if (pmsg->complete != 0)
@ -703,7 +703,7 @@ static void pch_spi_set_tx(struct pch_spi_data *data, int *bpw)
static void pch_spi_nomore_transfer(struct pch_spi_data *data) static void pch_spi_nomore_transfer(struct pch_spi_data *data)
{ {
struct spi_message *pmsg; struct spi_message *pmsg, *tmp;
dev_dbg(&data->master->dev, "%s called\n", __func__); dev_dbg(&data->master->dev, "%s called\n", __func__);
/* Invoke complete callback /* Invoke complete callback
* [To the spi core..indicating end of transfer] */ * [To the spi core..indicating end of transfer] */
@ -740,7 +740,7 @@ static void pch_spi_nomore_transfer(struct pch_spi_data *data)
dev_dbg(&data->master->dev, dev_dbg(&data->master->dev,
"%s suspend/remove initiated, flushing queue\n", "%s suspend/remove initiated, flushing queue\n",
__func__); __func__);
list_for_each_entry(pmsg, data->queue.next, queue) { list_for_each_entry_safe(pmsg, tmp, data->queue.next, queue) {
pmsg->status = -EIO; pmsg->status = -EIO;
if (pmsg->complete) if (pmsg->complete)
@ -1187,7 +1187,7 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
static void pch_spi_process_messages(struct work_struct *pwork) static void pch_spi_process_messages(struct work_struct *pwork)
{ {
struct spi_message *pmsg; struct spi_message *pmsg, *tmp;
struct pch_spi_data *data; struct pch_spi_data *data;
int bpw; int bpw;
@ -1199,7 +1199,7 @@ static void pch_spi_process_messages(struct work_struct *pwork)
if (data->board_dat->suspend_sts || (data->status == STATUS_EXITING)) { if (data->board_dat->suspend_sts || (data->status == STATUS_EXITING)) {
dev_dbg(&data->master->dev, "%s suspend/remove initiated," dev_dbg(&data->master->dev, "%s suspend/remove initiated,"
"flushing queue\n", __func__); "flushing queue\n", __func__);
list_for_each_entry(pmsg, data->queue.next, queue) { list_for_each_entry_safe(pmsg, tmp, data->queue.next, queue) {
pmsg->status = -EIO; pmsg->status = -EIO;
if (pmsg->complete != 0) { if (pmsg->complete != 0) {