Re: [PATCH 2/2] sata_vsc: clean up vsc_sata_interrupt

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

 



Hello,

On Tue, Feb 20, 2007 at 06:21:32PM -0700, Dan Williams wrote:
> @@ -149,9 +145,9 @@ static void vsc_intr_mask_update(struct ata_port *ap, u8 ctl)
>  		VSC_SATA_INT_MASK_OFFSET + ap->port_no;
>  	mask = readb(mask_addr);
>  	if (ctl & ATA_NIEN)
> -		mask |= 0x80;
> +		mask = 0xff;
>  	else
> -		mask &= 0x7F;
> +		mask = 0x0;
>  	writeb(mask, mask_addr);

Wouldn't it be better to listen for SATA error interrupt
(e.g. hotplug) even during polling commands?

> @@ -290,59 +286,35 @@ static irqreturn_t vsc_sata_interrupt (int irq, void *dev_instance)
>  	struct ata_host *host = dev_instance;
>  	unsigned int i;
>  	unsigned int handled = 0;
> -	u32 int_status;
> +	u32 status;
>  
> -	spin_lock(&host->lock);
> +	status = readl(host->iomap[VSC_MMIO_BAR] + VSC_SATA_INT_STAT_OFFSET);
>  
> -	int_status = readl(host->iomap[VSC_MMIO_BAR] +
> -			   VSC_SATA_INT_STAT_OFFSET);
> -
> -	for (i = 0; i < host->n_ports; i++) {
> -		if (int_status & ((u32) 0xFF << (8 * i))) {
> -			struct ata_port *ap;
> +	if (status == 0xffffffff) {
> +		printk(KERN_ERR DRV_NAME ": IRQ status == 0xffffffff, "
> +			"PCI fault or device removal?\n");
> +		goto out;
> +	} else if (!status)
> +		goto out;

I think unlikely() here will be helpful.  e.g.

	if (unlikely(status == 0 || status == 0xffffffff)) {
		/* blah blah */
		goto out;
	}

Thanks.

-- 
tejun
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[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