Messages in this thread Patch in this message | | | From | "Jakub W. Jozwicki" <> | Subject | [PATCH 2.6.25.10 1/2] libata: fix locking for kmap_atomic | Date | Sun, 13 Jul 2008 01:27:36 +0200 |
| |
Change locking surrounding kmap_atomic from local_irqsave to local_irqsave_nort. This fixes issues with PREEMPT_RT.
Signed-off-by: Jakub Jozwicki <jozwicki@aster.pl>
--- linux-2.6.25.10/drivers/ata/libata-core.c 2008-07-03 05:46:47.000000000 +0200 +++ linux-2.6.25.10-rt7/drivers/ata/libata-core.c 2008-07-12 23:59:33.132140258 +0200 @@ -5157,14 +5157,14 @@ unsigned long flags; /* FIXME: use a bounce buffer */ - local_irq_save(flags); + local_irq_save_nort(flags); buf = kmap_atomic(page, KM_IRQ0); /* do the actual data transfer */ ap->ops->data_xfer(qc->dev, buf + offset, qc->sect_size, do_write); kunmap_atomic(buf, KM_IRQ0); - local_irq_restore(flags); + local_irq_restore_nort(flags); } else { buf = page_address(page); ap->ops->data_xfer(qc->dev, buf + offset, qc->sect_size, do_write); @@ -5294,14 +5294,14 @@ unsigned long flags; /* FIXME: use bounce buffer */ - local_irq_save(flags); + local_irq_save_nort(flags); buf = kmap_atomic(page, KM_IRQ0); /* do the actual data transfer */ consumed = ap->ops->data_xfer(dev, buf + offset, count, rw); kunmap_atomic(buf, KM_IRQ0); - local_irq_restore(flags); + local_irq_restore_nort(flags); } else { buf = page_address(page); consumed = ap->ops->data_xfer(dev, buf + offset, count, rw);
| |