Re: [PATCH 5/8] ide-cd: remove handler wrappers

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

 



On Thursday 18 December 2008, Borislav Petkov wrote:> Remove cdrom_do_newpc_cont and cdrom_start_rw_cont wrappers and pass> cdrom_transfer_packet_command to ide_execute_command directly.> > There should be no functionality change resulting from this patch.> > Signed-off-by: Borislav Petkov <petkovbb@xxxxxxxxx>> --->  drivers/ide/ide-cd.c |  121 ++++++++++++++++++++------------------------------>  1 files changed, 48 insertions(+), 73 deletions(-)> > diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c> index 34981f5..f3c7cc3 100644> --- a/drivers/ide/ide-cd.c> +++ b/drivers/ide/ide-cd.c> @@ -511,48 +511,7 @@ end_request:>  	return 1;>  }>  > -/*> - * Set up the device registers for transferring a packet command on DEV,> - * expecting to later transfer XFERLEN bytes.  HANDLER is the routine> - * which actually transfers the command to the drive.  If this is a> - * drq_interrupt device, this routine will arrange for HANDLER to be> - * called when the interrupt from the drive arrives.  Otherwise, HANDLER> - * will be called immediately after the drive is prepared for the transfer.> - */> -static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,> -						  ide_handler_t *handler)> -{> -	ide_hwif_t *hwif = drive->hwif;> -	struct request *rq = hwif->hwgroup->rq;> -	int xferlen;> -> -	xferlen = ide_cd_get_xferlen(rq);> -> -	ide_debug_log(IDE_DBG_PC, "Call %s, xferlen: %d\n", __func__, xferlen);> -> -	/* FIXME: for Virtual DMA we must check harder */> -	if (drive->dma)> -		drive->dma = !hwif->dma_ops->dma_setup(drive);> -> -	/* set up the controller registers */> -	ide_pktcmd_tf_load(drive, IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL,> -			   xferlen, drive->dma);> -> -	if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) {> -		/* waiting for CDB interrupt, not DMA yet. */> -		if (drive->dma)> -			drive->waiting_for_dma = 0;> -> -		/* packet command */> -		ide_execute_command(drive, ATA_CMD_PACKET, handler,> -				    ATAPI_WAIT_PC, ide_cd_expiry);> -		return ide_started;> -	} else {> -		ide_execute_pkt_cmd(drive);> -> -		return (*handler) (drive);> -	}> -}> +static ide_startstop_t cdrom_newpc_intr(ide_drive_t *);>  >  /*>   * Send a packet command to DRIVE described by CMD_BUF and CMD_LEN. The device> @@ -561,11 +520,10 @@ static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,>   * there's data ready.>   */>  #define ATAPI_MIN_CDB_BYTES 12> -static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive,> -					  struct request *rq,> -					  ide_handler_t *handler)> +static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive)>  {>  	ide_hwif_t *hwif = drive->hwif;> +	struct request *rq = hwif->hwgroup->rq;>  	int cmd_len;>  	ide_startstop_t startstop;>  > @@ -592,7 +550,7 @@ static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive,>  	}>  >  	/* arm the interrupt handler */> -	ide_set_handler(drive, handler, rq->timeout, ide_cd_expiry);> +	ide_set_handler(drive, cdrom_newpc_intr, rq->timeout, ide_cd_expiry);>  >  	/* ATAPI commands get padded out to 12 bytes minimum */>  	cmd_len = COMMAND_SIZE(rq->cmd[0]);> @@ -610,6 +568,49 @@ static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive,>  }>  >  /*> + * Set up the device registers for transferring a packet command on DEV,> + * expecting to later transfer XFERLEN bytes.  HANDLER is the routine> + * which actually transfers the command to the drive.  If this is a> + * drq_interrupt device, this routine will arrange for HANDLER to be> + * called when the interrupt from the drive arrives.  Otherwise, HANDLER> + * will be called immediately after the drive is prepared for the transfer.> + */> +static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive)> +{> +	ide_hwif_t *hwif = drive->hwif;> +	struct request *rq = hwif->hwgroup->rq;> +	int xferlen;> +> +	xferlen = ide_cd_get_xferlen(rq);> +> +	ide_debug_log(IDE_DBG_PC, "Call %s, xferlen: %d\n", __func__, xferlen);> +> +	/* FIXME: for Virtual DMA we must check harder */> +	if (drive->dma)> +		drive->dma = !hwif->dma_ops->dma_setup(drive);> +> +	/* set up the controller registers */> +	ide_pktcmd_tf_load(drive, IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL,> +			   xferlen, drive->dma);> +> +	if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) {> +		/* waiting for CDB interrupt, not DMA yet. */> +		if (drive->dma)> +			drive->waiting_for_dma = 0;> +> +		/* packet command */> +		ide_execute_command(drive, ATA_CMD_PACKET,> +				    cdrom_transfer_packet_command,> +				    ATAPI_WAIT_PC, ide_cd_expiry);> +		return ide_started;> +	} else {> +		ide_execute_pkt_cmd(drive);> +> +		return cdrom_transfer_packet_command(drive);> +	}> +}> +> +/*>   * Check the contents of the interrupt reason register from the cdrom>   * and attempt to recover if there are problems.  Returns  0 if everything's>   * ok; nonzero if the request has been terminated.> @@ -680,8 +681,6 @@ static int ide_cd_check_transfer_size(ide_drive_t *drive, int len)>  	return 1;>  }>  > -static ide_startstop_t cdrom_newpc_intr(ide_drive_t *);> ->  static ide_startstop_t ide_cd_prepare_rw_request(ide_drive_t *drive,>  						 struct request *rq)>  {> @@ -724,20 +723,6 @@ static ide_startstop_t ide_cd_prepare_rw_request(ide_drive_t *drive,>  }>  >  /*> - * Routine to send a read/write packet command to the drive. This is usually> - * called directly from cdrom_start_{read,write}(). However, for drq_interrupt> - * devices, it is called from an interrupt when the drive is ready to accept> - * the command.> - */> -static ide_startstop_t cdrom_start_rw_cont(ide_drive_t *drive)> -{> -	struct request *rq = drive->hwif->hwgroup->rq;> -> -	/* send the command to the drive and return */> -	return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);> -}> -> -/*>   * Fix up a possibly partially-processed request so that we can start it over>   * entirely, or even put it back on the request queue.>   */> @@ -1126,13 +1111,6 @@ static ide_startstop_t cdrom_start_rw(ide_drive_t *drive, struct request *rq)>  	return ide_started;>  }>  > -static ide_startstop_t cdrom_do_newpc_cont(ide_drive_t *drive)> -{> -	struct request *rq = HWGROUP(drive)->rq;> -> -	return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);> -}> ->  static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)>  {>  > @@ -1177,7 +1155,6 @@ static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)>  static ide_startstop_t ide_cd_do_request(ide_drive_t *drive, struct request *rq,>  					sector_t block)>  {> -	ide_handler_t *fn;>  >  	ide_debug_log(IDE_DBG_RQ, "Call %s, rq->cmd[0]: 0x%x, ">  		      "rq->cmd_type: 0x%x, block: %llu\n",> @@ -1185,7 +1162,6 @@ static ide_startstop_t ide_cd_do_request(ide_drive_t *drive, struct request *rq,>  		      (unsigned long long)block);>  >  	if (blk_fs_request(rq)) {> -		fn = cdrom_start_rw_cont;>  >  		if (cdrom_start_rw(drive, rq) == ide_stopped)>  			return ide_stopped;> @@ -1194,7 +1170,6 @@ static ide_startstop_t ide_cd_do_request(ide_drive_t *drive, struct request *rq,>  			return ide_stopped;>  	} else if (blk_sense_request(rq) || blk_pc_request(rq) ||>  		   rq->cmd_type == REQ_TYPE_ATA_PC) {> -		fn = cdrom_do_newpc_cont;>  >  		if (!rq->timeout)>  			rq->timeout = ATAPI_WAIT_PC;> @@ -1210,7 +1185,7 @@ static ide_startstop_t ide_cd_do_request(ide_drive_t *drive, struct request *rq,>  		return ide_stopped;>  	}>  > -	return cdrom_start_packet_command(drive, fn);> +	return cdrom_start_packet_command(drive);>  }
There is no need to move cdrom_start_packet_command() around (especiallysince it goes away in patch #9/8) and not doing so allows to see changesto the function immediately.  Fixed in the merged patch version:
From: Borislav Petkov <petkovbb@xxxxxxxxxxxxxx>Subject: [PATCH 5/8] ide-cd: remove handler wrappers
Remove cdrom_do_newpc_cont and cdrom_start_rw_cont wrappers and passcdrom_transfer_packet_command to ide_execute_command directly.
There should be no functionality change resulting from this patch.
Signed-off-by: Borislav Petkov <petkovbb@xxxxxxxxx>[bart: don't move cdrom_start_packet_command() around, remove newlines]Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@xxxxxxxxx>--- drivers/ide/ide-cd.c |   49 +++++++++++-------------------------------------- 1 file changed, 11 insertions(+), 38 deletions(-)
Index: b/drivers/ide/ide-cd.c===================================================================--- a/drivers/ide/ide-cd.c+++ b/drivers/ide/ide-cd.c@@ -511,6 +511,9 @@ end_request: 	return 1; } +static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *);+static ide_startstop_t cdrom_newpc_intr(ide_drive_t *);+ /*  * Set up the device registers for transferring a packet command on DEV,  * expecting to later transfer XFERLEN bytes.  HANDLER is the routine@@ -519,8 +522,7 @@ end_request:  * called when the interrupt from the drive arrives.  Otherwise, HANDLER  * will be called immediately after the drive is prepared for the transfer.  */-static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,-						  ide_handler_t *handler)+static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive) { 	ide_hwif_t *hwif = drive->hwif; 	struct request *rq = hwif->hwgroup->rq;@@ -544,13 +546,14 @@ static ide_startstop_t cdrom_start_packe 			drive->waiting_for_dma = 0;  		/* packet command */-		ide_execute_command(drive, ATA_CMD_PACKET, handler,+		ide_execute_command(drive, ATA_CMD_PACKET,+				    cdrom_transfer_packet_command, 				    ATAPI_WAIT_PC, ide_cd_expiry); 		return ide_started; 	} else { 		ide_execute_pkt_cmd(drive); -		return (*handler) (drive);+		return cdrom_transfer_packet_command(drive); 	} } @@ -561,11 +564,10 @@ static ide_startstop_t cdrom_start_packe  * there's data ready.  */ #define ATAPI_MIN_CDB_BYTES 12-static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive,-					  struct request *rq,-					  ide_handler_t *handler)+static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive) { 	ide_hwif_t *hwif = drive->hwif;+	struct request *rq = hwif->hwgroup->rq; 	int cmd_len; 	ide_startstop_t startstop; @@ -592,7 +594,7 @@ static ide_startstop_t cdrom_transfer_pa 	}  	/* arm the interrupt handler */-	ide_set_handler(drive, handler, rq->timeout, ide_cd_expiry);+	ide_set_handler(drive, cdrom_newpc_intr, rq->timeout, ide_cd_expiry);  	/* ATAPI commands get padded out to 12 bytes minimum */ 	cmd_len = COMMAND_SIZE(rq->cmd[0]);@@ -680,8 +682,6 @@ static int ide_cd_check_transfer_size(id 	return 1; } -static ide_startstop_t cdrom_newpc_intr(ide_drive_t *);- static ide_startstop_t ide_cd_prepare_rw_request(ide_drive_t *drive, 						 struct request *rq) {@@ -724,20 +724,6 @@ static ide_startstop_t ide_cd_prepare_rw }  /*- * Routine to send a read/write packet command to the drive. This is usually- * called directly from cdrom_start_{read,write}(). However, for drq_interrupt- * devices, it is called from an interrupt when the drive is ready to accept- * the command.- */-static ide_startstop_t cdrom_start_rw_cont(ide_drive_t *drive)-{-	struct request *rq = drive->hwif->hwgroup->rq;--	/* send the command to the drive and return */-	return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);-}--/*  * Fix up a possibly partially-processed request so that we can start it over  * entirely, or even put it back on the request queue.  */@@ -1126,13 +1112,6 @@ static ide_startstop_t cdrom_start_rw(id 	return ide_started; } -static ide_startstop_t cdrom_do_newpc_cont(ide_drive_t *drive)-{-	struct request *rq = HWGROUP(drive)->rq;--	return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);-}- static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq) { @@ -1177,16 +1156,12 @@ static void cdrom_do_block_pc(ide_drive_ static ide_startstop_t ide_cd_do_request(ide_drive_t *drive, struct request *rq, 					sector_t block) {-	ide_handler_t *fn;- 	ide_debug_log(IDE_DBG_RQ, "Call %s, rq->cmd[0]: 0x%x, " 		      "rq->cmd_type: 0x%x, block: %llu\n", 		      __func__, rq->cmd[0], rq->cmd_type, 		      (unsigned long long)block);  	if (blk_fs_request(rq)) {-		fn = cdrom_start_rw_cont;- 		if (cdrom_start_rw(drive, rq) == ide_stopped) 			return ide_stopped; @@ -1194,8 +1169,6 @@ static ide_startstop_t ide_cd_do_request 			return ide_stopped; 	} else if (blk_sense_request(rq) || blk_pc_request(rq) || 		   rq->cmd_type == REQ_TYPE_ATA_PC) {-		fn = cdrom_do_newpc_cont;- 		if (!rq->timeout) 			rq->timeout = ATAPI_WAIT_PC; @@ -1210,7 +1183,7 @@ static ide_startstop_t ide_cd_do_request 		return ide_stopped; 	} -	return cdrom_start_packet_command(drive, fn);+	return cdrom_start_packet_command(drive); }  /*��.n��������+%������w��{.n�����{��'^�)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥


[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux