diff options
-rw-r--r-- | Documentation/spi/spi-summary | 15 | ||||
-rw-r--r-- | drivers/acpi/processor_core.c | 2 | ||||
-rw-r--r-- | drivers/acpi/thermal.c | 2 | ||||
-rw-r--r-- | drivers/block/ub.c | 38 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0002.c | 1 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0020.c | 1 | ||||
-rw-r--r-- | drivers/spi/spi_bfin5xx.c | 17 | ||||
-rw-r--r-- | mm/memcontrol.c | 9 | ||||
-rw-r--r-- | sound/pci/es1968.c | 14 |
9 files changed, 72 insertions, 27 deletions
diff --git a/Documentation/spi/spi-summary b/Documentation/spi/spi-summary index 8861e47e5a2d..6d5f18143c50 100644 --- a/Documentation/spi/spi-summary +++ b/Documentation/spi/spi-summary | |||
@@ -116,6 +116,13 @@ low order bit. So when a chip's timing diagram shows the clock | |||
116 | starting low (CPOL=0) and data stabilized for sampling during the | 116 | starting low (CPOL=0) and data stabilized for sampling during the |
117 | trailing clock edge (CPHA=1), that's SPI mode 1. | 117 | trailing clock edge (CPHA=1), that's SPI mode 1. |
118 | 118 | ||
119 | Note that the clock mode is relevant as soon as the chipselect goes | ||
120 | active. So the master must set the clock to inactive before selecting | ||
121 | a slave, and the slave can tell the chosen polarity by sampling the | ||
122 | clock level when its select line goes active. That's why many devices | ||
123 | support for example both modes 0 and 3: they don't care about polarity, | ||
124 | and alway clock data in/out on rising clock edges. | ||
125 | |||
119 | 126 | ||
120 | How do these driver programming interfaces work? | 127 | How do these driver programming interfaces work? |
121 | ------------------------------------------------ | 128 | ------------------------------------------------ |
@@ -379,8 +386,14 @@ any more such messages. | |||
379 | + when bidirectional reads and writes start ... by how its | 386 | + when bidirectional reads and writes start ... by how its |
380 | sequence of spi_transfer requests is arranged; | 387 | sequence of spi_transfer requests is arranged; |
381 | 388 | ||
389 | + which I/O buffers are used ... each spi_transfer wraps a | ||
390 | buffer for each transfer direction, supporting full duplex | ||
391 | (two pointers, maybe the same one in both cases) and half | ||
392 | duplex (one pointer is NULL) transfers; | ||
393 | |||
382 | + optionally defining short delays after transfers ... using | 394 | + optionally defining short delays after transfers ... using |
383 | the spi_transfer.delay_usecs setting; | 395 | the spi_transfer.delay_usecs setting (this delay can be the |
396 | only protocol effect, if the buffer length is zero); | ||
384 | 397 | ||
385 | + whether the chipselect becomes inactive after a transfer and | 398 | + whether the chipselect becomes inactive after a transfer and |
386 | any delay ... by using the spi_transfer.cs_change flag; | 399 | any delay ... by using the spi_transfer.cs_change flag; |
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index 36a68fa114e3..a825b431b64f 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c | |||
@@ -822,7 +822,7 @@ static int acpi_processor_remove(struct acpi_device *device, int type) | |||
822 | } | 822 | } |
823 | 823 | ||
824 | processors[pr->id] = NULL; | 824 | processors[pr->id] = NULL; |
825 | 825 | processor_device_array[pr->id] = NULL; | |
826 | kfree(pr); | 826 | kfree(pr); |
827 | 827 | ||
828 | return 0; | 828 | return 0; |
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c index c4e00ac8ea85..1bcecc7dd2ca 100644 --- a/drivers/acpi/thermal.c +++ b/drivers/acpi/thermal.c | |||
@@ -1125,7 +1125,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz) | |||
1125 | tz->trips.active[i].flags.valid; i++, trips++); | 1125 | tz->trips.active[i].flags.valid; i++, trips++); |
1126 | tz->thermal_zone = thermal_zone_device_register("ACPI thermal zone", | 1126 | tz->thermal_zone = thermal_zone_device_register("ACPI thermal zone", |
1127 | trips, tz, &acpi_thermal_zone_ops); | 1127 | trips, tz, &acpi_thermal_zone_ops); |
1128 | if (!tz->thermal_zone) | 1128 | if (IS_ERR(tz->thermal_zone)) |
1129 | return -ENODEV; | 1129 | return -ENODEV; |
1130 | 1130 | ||
1131 | result = sysfs_create_link(&tz->device->dev.kobj, | 1131 | result = sysfs_create_link(&tz->device->dev.kobj, |
diff --git a/drivers/block/ub.c b/drivers/block/ub.c index c452e2d355ee..27bfe72aab59 100644 --- a/drivers/block/ub.c +++ b/drivers/block/ub.c | |||
@@ -8,6 +8,7 @@ | |||
8 | * and is not licensed separately. See file COPYING for details. | 8 | * and is not licensed separately. See file COPYING for details. |
9 | * | 9 | * |
10 | * TODO (sorted by decreasing priority) | 10 | * TODO (sorted by decreasing priority) |
11 | * -- Return sense now that rq allows it (we always auto-sense anyway). | ||
11 | * -- set readonly flag for CDs, set removable flag for CF readers | 12 | * -- set readonly flag for CDs, set removable flag for CF readers |
12 | * -- do inquiry and verify we got a disk and not a tape (for LUN mismatch) | 13 | * -- do inquiry and verify we got a disk and not a tape (for LUN mismatch) |
13 | * -- verify the 13 conditions and do bulk resets | 14 | * -- verify the 13 conditions and do bulk resets |
@@ -359,7 +360,8 @@ static void ub_cmd_build_block(struct ub_dev *sc, struct ub_lun *lun, | |||
359 | static void ub_cmd_build_packet(struct ub_dev *sc, struct ub_lun *lun, | 360 | static void ub_cmd_build_packet(struct ub_dev *sc, struct ub_lun *lun, |
360 | struct ub_scsi_cmd *cmd, struct ub_request *urq); | 361 | struct ub_scsi_cmd *cmd, struct ub_request *urq); |
361 | static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd); | 362 | static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd); |
362 | static void ub_end_rq(struct request *rq, unsigned int status); | 363 | static void ub_end_rq(struct request *rq, unsigned int status, |
364 | unsigned int cmd_len); | ||
363 | static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun, | 365 | static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun, |
364 | struct ub_request *urq, struct ub_scsi_cmd *cmd); | 366 | struct ub_request *urq, struct ub_scsi_cmd *cmd); |
365 | static int ub_submit_scsi(struct ub_dev *sc, struct ub_scsi_cmd *cmd); | 367 | static int ub_submit_scsi(struct ub_dev *sc, struct ub_scsi_cmd *cmd); |
@@ -642,13 +644,13 @@ static int ub_request_fn_1(struct ub_lun *lun, struct request *rq) | |||
642 | 644 | ||
643 | if (atomic_read(&sc->poison)) { | 645 | if (atomic_read(&sc->poison)) { |
644 | blkdev_dequeue_request(rq); | 646 | blkdev_dequeue_request(rq); |
645 | ub_end_rq(rq, DID_NO_CONNECT << 16); | 647 | ub_end_rq(rq, DID_NO_CONNECT << 16, blk_rq_bytes(rq)); |
646 | return 0; | 648 | return 0; |
647 | } | 649 | } |
648 | 650 | ||
649 | if (lun->changed && !blk_pc_request(rq)) { | 651 | if (lun->changed && !blk_pc_request(rq)) { |
650 | blkdev_dequeue_request(rq); | 652 | blkdev_dequeue_request(rq); |
651 | ub_end_rq(rq, SAM_STAT_CHECK_CONDITION); | 653 | ub_end_rq(rq, SAM_STAT_CHECK_CONDITION, blk_rq_bytes(rq)); |
652 | return 0; | 654 | return 0; |
653 | } | 655 | } |
654 | 656 | ||
@@ -701,7 +703,7 @@ static int ub_request_fn_1(struct ub_lun *lun, struct request *rq) | |||
701 | 703 | ||
702 | drop: | 704 | drop: |
703 | ub_put_cmd(lun, cmd); | 705 | ub_put_cmd(lun, cmd); |
704 | ub_end_rq(rq, DID_ERROR << 16); | 706 | ub_end_rq(rq, DID_ERROR << 16, blk_rq_bytes(rq)); |
705 | return 0; | 707 | return 0; |
706 | } | 708 | } |
707 | 709 | ||
@@ -770,6 +772,7 @@ static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd) | |||
770 | struct ub_request *urq = cmd->back; | 772 | struct ub_request *urq = cmd->back; |
771 | struct request *rq; | 773 | struct request *rq; |
772 | unsigned int scsi_status; | 774 | unsigned int scsi_status; |
775 | unsigned int cmd_len; | ||
773 | 776 | ||
774 | rq = urq->rq; | 777 | rq = urq->rq; |
775 | 778 | ||
@@ -779,8 +782,18 @@ static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd) | |||
779 | rq->data_len = 0; | 782 | rq->data_len = 0; |
780 | else | 783 | else |
781 | rq->data_len -= cmd->act_len; | 784 | rq->data_len -= cmd->act_len; |
785 | scsi_status = 0; | ||
786 | } else { | ||
787 | if (cmd->act_len != cmd->len) { | ||
788 | if ((cmd->key == MEDIUM_ERROR || | ||
789 | cmd->key == UNIT_ATTENTION) && | ||
790 | ub_rw_cmd_retry(sc, lun, urq, cmd) == 0) | ||
791 | return; | ||
792 | scsi_status = SAM_STAT_CHECK_CONDITION; | ||
793 | } else { | ||
794 | scsi_status = 0; | ||
795 | } | ||
782 | } | 796 | } |
783 | scsi_status = 0; | ||
784 | } else { | 797 | } else { |
785 | if (blk_pc_request(rq)) { | 798 | if (blk_pc_request(rq)) { |
786 | /* UB_SENSE_SIZE is smaller than SCSI_SENSE_BUFFERSIZE */ | 799 | /* UB_SENSE_SIZE is smaller than SCSI_SENSE_BUFFERSIZE */ |
@@ -801,14 +814,17 @@ static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd) | |||
801 | 814 | ||
802 | urq->rq = NULL; | 815 | urq->rq = NULL; |
803 | 816 | ||
817 | cmd_len = cmd->len; | ||
804 | ub_put_cmd(lun, cmd); | 818 | ub_put_cmd(lun, cmd); |
805 | ub_end_rq(rq, scsi_status); | 819 | ub_end_rq(rq, scsi_status, cmd_len); |
806 | blk_start_queue(lun->disk->queue); | 820 | blk_start_queue(lun->disk->queue); |
807 | } | 821 | } |
808 | 822 | ||
809 | static void ub_end_rq(struct request *rq, unsigned int scsi_status) | 823 | static void ub_end_rq(struct request *rq, unsigned int scsi_status, |
824 | unsigned int cmd_len) | ||
810 | { | 825 | { |
811 | int error; | 826 | int error; |
827 | long rqlen; | ||
812 | 828 | ||
813 | if (scsi_status == 0) { | 829 | if (scsi_status == 0) { |
814 | error = 0; | 830 | error = 0; |
@@ -816,8 +832,12 @@ static void ub_end_rq(struct request *rq, unsigned int scsi_status) | |||
816 | error = -EIO; | 832 | error = -EIO; |
817 | rq->errors = scsi_status; | 833 | rq->errors = scsi_status; |
818 | } | 834 | } |
819 | if (__blk_end_request(rq, error, blk_rq_bytes(rq))) | 835 | rqlen = blk_rq_bytes(rq); /* Oddly enough, this is the residue. */ |
820 | BUG(); | 836 | if (__blk_end_request(rq, error, cmd_len)) { |
837 | printk(KERN_WARNING DRV_NAME | ||
838 | ": __blk_end_request blew, %s-cmd total %u rqlen %ld\n", | ||
839 | blk_pc_request(rq)? "pc": "fs", cmd_len, rqlen); | ||
840 | } | ||
821 | } | 841 | } |
822 | 842 | ||
823 | static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun, | 843 | static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun, |
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c index d072e87ce4e2..458d477614d6 100644 --- a/drivers/mtd/chips/cfi_cmdset_0002.c +++ b/drivers/mtd/chips/cfi_cmdset_0002.c | |||
@@ -1763,6 +1763,7 @@ static void cfi_amdstd_sync (struct mtd_info *mtd) | |||
1763 | 1763 | ||
1764 | default: | 1764 | default: |
1765 | /* Not an idle state */ | 1765 | /* Not an idle state */ |
1766 | set_current_state(TASK_UNINTERRUPTIBLE); | ||
1766 | add_wait_queue(&chip->wq, &wait); | 1767 | add_wait_queue(&chip->wq, &wait); |
1767 | 1768 | ||
1768 | spin_unlock(chip->mutex); | 1769 | spin_unlock(chip->mutex); |
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c index b344ff858b2d..492e2ab27420 100644 --- a/drivers/mtd/chips/cfi_cmdset_0020.c +++ b/drivers/mtd/chips/cfi_cmdset_0020.c | |||
@@ -1015,6 +1015,7 @@ static void cfi_staa_sync (struct mtd_info *mtd) | |||
1015 | 1015 | ||
1016 | default: | 1016 | default: |
1017 | /* Not an idle state */ | 1017 | /* Not an idle state */ |
1018 | set_current_state(TASK_UNINTERRUPTIBLE); | ||
1018 | add_wait_queue(&chip->wq, &wait); | 1019 | add_wait_queue(&chip->wq, &wait); |
1019 | 1020 | ||
1020 | spin_unlock_bh(chip->mutex); | 1021 | spin_unlock_bh(chip->mutex); |
diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c index d853fceb6bf0..6635e15e5a7a 100644 --- a/drivers/spi/spi_bfin5xx.c +++ b/drivers/spi/spi_bfin5xx.c | |||
@@ -713,8 +713,8 @@ static void pump_transfers(unsigned long data) | |||
713 | } else { | 713 | } else { |
714 | drv_data->len = transfer->len; | 714 | drv_data->len = transfer->len; |
715 | } | 715 | } |
716 | dev_dbg(&drv_data->pdev->dev, "transfer: ", | 716 | dev_dbg(&drv_data->pdev->dev, |
717 | "drv_data->write is %p, chip->write is %p, null_wr is %p\n", | 717 | "transfer: drv_data->write is %p, chip->write is %p, null_wr is %p\n", |
718 | drv_data->write, chip->write, null_writer); | 718 | drv_data->write, chip->write, null_writer); |
719 | 719 | ||
720 | /* speed and width has been set on per message */ | 720 | /* speed and width has been set on per message */ |
@@ -1294,6 +1294,12 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev) | |||
1294 | goto out_error_queue_alloc; | 1294 | goto out_error_queue_alloc; |
1295 | } | 1295 | } |
1296 | 1296 | ||
1297 | status = peripheral_request_list(drv_data->pin_req, DRV_NAME); | ||
1298 | if (status != 0) { | ||
1299 | dev_err(&pdev->dev, ": Requesting Peripherals failed\n"); | ||
1300 | goto out_error_queue_alloc; | ||
1301 | } | ||
1302 | |||
1297 | /* Register with the SPI framework */ | 1303 | /* Register with the SPI framework */ |
1298 | platform_set_drvdata(pdev, drv_data); | 1304 | platform_set_drvdata(pdev, drv_data); |
1299 | status = spi_register_master(master); | 1305 | status = spi_register_master(master); |
@@ -1302,12 +1308,6 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev) | |||
1302 | goto out_error_queue_alloc; | 1308 | goto out_error_queue_alloc; |
1303 | } | 1309 | } |
1304 | 1310 | ||
1305 | status = peripheral_request_list(drv_data->pin_req, DRV_NAME); | ||
1306 | if (status != 0) { | ||
1307 | dev_err(&pdev->dev, ": Requesting Peripherals failed\n"); | ||
1308 | goto out_error; | ||
1309 | } | ||
1310 | |||
1311 | dev_info(dev, "%s, Version %s, regs_base@%p, dma channel@%d\n", | 1311 | dev_info(dev, "%s, Version %s, regs_base@%p, dma channel@%d\n", |
1312 | DRV_DESC, DRV_VERSION, drv_data->regs_base, | 1312 | DRV_DESC, DRV_VERSION, drv_data->regs_base, |
1313 | drv_data->dma_channel); | 1313 | drv_data->dma_channel); |
@@ -1319,7 +1319,6 @@ out_error_no_dma_ch: | |||
1319 | iounmap((void *) drv_data->regs_base); | 1319 | iounmap((void *) drv_data->regs_base); |
1320 | out_error_ioremap: | 1320 | out_error_ioremap: |
1321 | out_error_get_res: | 1321 | out_error_get_res: |
1322 | out_error: | ||
1323 | spi_master_put(master); | 1322 | spi_master_put(master); |
1324 | 1323 | ||
1325 | return status; | 1324 | return status; |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 23b5fa4cabd8..2e0bfc93484b 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -978,7 +978,7 @@ static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *mem, int node) | |||
978 | { | 978 | { |
979 | struct mem_cgroup_per_node *pn; | 979 | struct mem_cgroup_per_node *pn; |
980 | struct mem_cgroup_per_zone *mz; | 980 | struct mem_cgroup_per_zone *mz; |
981 | int zone; | 981 | int zone, tmp = node; |
982 | /* | 982 | /* |
983 | * This routine is called against possible nodes. | 983 | * This routine is called against possible nodes. |
984 | * But it's BUG to call kmalloc() against offline node. | 984 | * But it's BUG to call kmalloc() against offline node. |
@@ -987,10 +987,9 @@ static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *mem, int node) | |||
987 | * never be onlined. It's better to use memory hotplug callback | 987 | * never be onlined. It's better to use memory hotplug callback |
988 | * function. | 988 | * function. |
989 | */ | 989 | */ |
990 | if (node_state(node, N_HIGH_MEMORY)) | 990 | if (!node_state(node, N_NORMAL_MEMORY)) |
991 | pn = kmalloc_node(sizeof(*pn), GFP_KERNEL, node); | 991 | tmp = -1; |
992 | else | 992 | pn = kmalloc_node(sizeof(*pn), GFP_KERNEL, tmp); |
993 | pn = kmalloc(sizeof(*pn), GFP_KERNEL); | ||
994 | if (!pn) | 993 | if (!pn) |
995 | return 1; | 994 | return 1; |
996 | 995 | ||
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c index 25ccfce45759..7d911a18c082 100644 --- a/sound/pci/es1968.c +++ b/sound/pci/es1968.c | |||
@@ -617,6 +617,18 @@ static int snd_es1968_ac97_wait(struct es1968 *chip) | |||
617 | return 1; /* timeout */ | 617 | return 1; /* timeout */ |
618 | } | 618 | } |
619 | 619 | ||
620 | static int snd_es1968_ac97_wait_poll(struct es1968 *chip) | ||
621 | { | ||
622 | int timeout = 100000; | ||
623 | |||
624 | while (timeout-- > 0) { | ||
625 | if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1)) | ||
626 | return 0; | ||
627 | } | ||
628 | snd_printd("es1968: ac97 timeout\n"); | ||
629 | return 1; /* timeout */ | ||
630 | } | ||
631 | |||
620 | static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val) | 632 | static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val) |
621 | { | 633 | { |
622 | struct es1968 *chip = ac97->private_data; | 634 | struct es1968 *chip = ac97->private_data; |
@@ -645,7 +657,7 @@ static unsigned short snd_es1968_ac97_read(struct snd_ac97 *ac97, unsigned short | |||
645 | outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX); | 657 | outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX); |
646 | /*msleep(1);*/ | 658 | /*msleep(1);*/ |
647 | 659 | ||
648 | if (! snd_es1968_ac97_wait(chip)) { | 660 | if (!snd_es1968_ac97_wait_poll(chip)) { |
649 | data = inw(chip->io_port + ESM_AC97_DATA); | 661 | data = inw(chip->io_port + ESM_AC97_DATA); |
650 | /*msleep(1);*/ | 662 | /*msleep(1);*/ |
651 | } | 663 | } |