|
@@ -1164,13 +1164,12 @@ static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
|
|
|
if (rq->bio || ((rq->cmd_type == REQ_TYPE_ATA_PC) && rq->data_len)) {
|
|
|
struct request_queue *q = drive->queue;
|
|
|
unsigned int alignment;
|
|
|
- unsigned long addr;
|
|
|
- unsigned long stack_mask = ~(THREAD_SIZE - 1);
|
|
|
+ char *buf;
|
|
|
|
|
|
if (rq->bio)
|
|
|
- addr = (unsigned long)bio_data(rq->bio);
|
|
|
+ buf = bio_data(rq->bio);
|
|
|
else
|
|
|
- addr = (unsigned long)rq->data;
|
|
|
+ buf = rq->data;
|
|
|
|
|
|
info->dma = drive->using_dma;
|
|
|
|
|
@@ -1181,11 +1180,8 @@ static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
|
|
|
* separate masks.
|
|
|
*/
|
|
|
alignment = queue_dma_alignment(q) | q->dma_pad_mask;
|
|
|
- if (addr & alignment || rq->data_len & alignment)
|
|
|
- info->dma = 0;
|
|
|
-
|
|
|
- if (!((addr & stack_mask) ^
|
|
|
- ((unsigned long)current->stack & stack_mask)))
|
|
|
+ if ((unsigned long)buf & alignment || rq->data_len & alignment
|
|
|
+ || object_is_on_stack(buf))
|
|
|
info->dma = 0;
|
|
|
}
|
|
|
}
|