diff options
-rw-r--r-- | Documentation/filesystems/squashfs.txt | 2 | ||||
-rw-r--r-- | arch/ia64/sn/pci/pcibr/pcibr_dma.c | 7 | ||||
-rw-r--r-- | arch/mips/include/asm/compat.h | 7 | ||||
-rw-r--r-- | arch/powerpc/platforms/86xx/gef_sbc610.c | 4 | ||||
-rw-r--r-- | block/blk-merge.c | 25 | ||||
-rw-r--r-- | drivers/ata/ahci.c | 24 | ||||
-rw-r--r-- | drivers/ata/libata-core.c | 14 | ||||
-rw-r--r-- | drivers/ata/libata-eh.c | 7 | ||||
-rw-r--r-- | drivers/ata/sata_nv.c | 2 | ||||
-rw-r--r-- | drivers/block/cciss.c | 8 | ||||
-rw-r--r-- | drivers/block/loop.c | 3 | ||||
-rw-r--r-- | drivers/block/xen-blkfront.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_stub.c | 2 | ||||
-rw-r--r-- | fs/squashfs/block.c | 13 | ||||
-rw-r--r-- | fs/squashfs/cache.c | 4 | ||||
-rw-r--r-- | fs/squashfs/inode.c | 6 | ||||
-rw-r--r-- | fs/squashfs/squashfs.h | 2 | ||||
-rw-r--r-- | fs/squashfs/super.c | 2 | ||||
-rw-r--r-- | include/linux/libata.h | 6 | ||||
-rw-r--r-- | include/linux/serio.h | 2 | ||||
-rw-r--r-- | security/smack/smack_lsm.c | 43 | ||||
-rw-r--r-- | security/smack/smackfs.c | 64 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 6 |
23 files changed, 142 insertions, 113 deletions
diff --git a/Documentation/filesystems/squashfs.txt b/Documentation/filesystems/squashfs.txt index 3e79e4a7a392..b324c033035a 100644 --- a/Documentation/filesystems/squashfs.txt +++ b/Documentation/filesystems/squashfs.txt | |||
@@ -22,7 +22,7 @@ Squashfs filesystem features versus Cramfs: | |||
22 | 22 | ||
23 | Squashfs Cramfs | 23 | Squashfs Cramfs |
24 | 24 | ||
25 | Max filesystem size: 2^64 16 MiB | 25 | Max filesystem size: 2^64 256 MiB |
26 | Max file size: ~ 2 TiB 16 MiB | 26 | Max file size: ~ 2 TiB 16 MiB |
27 | Max files: unlimited unlimited | 27 | Max files: unlimited unlimited |
28 | Max directories: unlimited unlimited | 28 | Max directories: unlimited unlimited |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_dma.c b/arch/ia64/sn/pci/pcibr/pcibr_dma.c index e626e50a938a..060df4aa9916 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_dma.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_dma.c | |||
@@ -135,11 +135,10 @@ pcibr_dmatrans_direct64(struct pcidev_info * info, u64 paddr, | |||
135 | if (SN_DMA_ADDRTYPE(dma_flags) == SN_DMA_ADDR_PHYS) | 135 | if (SN_DMA_ADDRTYPE(dma_flags) == SN_DMA_ADDR_PHYS) |
136 | pci_addr = IS_PIC_SOFT(pcibus_info) ? | 136 | pci_addr = IS_PIC_SOFT(pcibus_info) ? |
137 | PHYS_TO_DMA(paddr) : | 137 | PHYS_TO_DMA(paddr) : |
138 | PHYS_TO_TIODMA(paddr) | dma_attributes; | 138 | PHYS_TO_TIODMA(paddr); |
139 | else | 139 | else |
140 | pci_addr = IS_PIC_SOFT(pcibus_info) ? | 140 | pci_addr = paddr; |
141 | paddr : | 141 | pci_addr |= dma_attributes; |
142 | paddr | dma_attributes; | ||
143 | 142 | ||
144 | /* Handle Bus mode */ | 143 | /* Handle Bus mode */ |
145 | if (IS_PCIX(pcibus_info)) | 144 | if (IS_PCIX(pcibus_info)) |
diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h index ac5d541368e9..6c5b40905dd6 100644 --- a/arch/mips/include/asm/compat.h +++ b/arch/mips/include/asm/compat.h | |||
@@ -3,6 +3,8 @@ | |||
3 | /* | 3 | /* |
4 | * Architecture specific compatibility types | 4 | * Architecture specific compatibility types |
5 | */ | 5 | */ |
6 | #include <linux/seccomp.h> | ||
7 | #include <linux/thread_info.h> | ||
6 | #include <linux/types.h> | 8 | #include <linux/types.h> |
7 | #include <asm/page.h> | 9 | #include <asm/page.h> |
8 | #include <asm/ptrace.h> | 10 | #include <asm/ptrace.h> |
@@ -218,4 +220,9 @@ struct compat_shmid64_ds { | |||
218 | compat_ulong_t __unused2; | 220 | compat_ulong_t __unused2; |
219 | }; | 221 | }; |
220 | 222 | ||
223 | static inline int is_compat_task(void) | ||
224 | { | ||
225 | return test_thread_flag(TIF_32BIT); | ||
226 | } | ||
227 | |||
221 | #endif /* _ASM_COMPAT_H */ | 228 | #endif /* _ASM_COMPAT_H */ |
diff --git a/arch/powerpc/platforms/86xx/gef_sbc610.c b/arch/powerpc/platforms/86xx/gef_sbc610.c index fb371f5ce132..d6b772ba3b8f 100644 --- a/arch/powerpc/platforms/86xx/gef_sbc610.c +++ b/arch/powerpc/platforms/86xx/gef_sbc610.c | |||
@@ -142,6 +142,10 @@ static void __init gef_sbc610_nec_fixup(struct pci_dev *pdev) | |||
142 | { | 142 | { |
143 | unsigned int val; | 143 | unsigned int val; |
144 | 144 | ||
145 | /* Do not do the fixup on other platforms! */ | ||
146 | if (!machine_is(gef_sbc610)) | ||
147 | return; | ||
148 | |||
145 | printk(KERN_INFO "Running NEC uPD720101 Fixup\n"); | 149 | printk(KERN_INFO "Running NEC uPD720101 Fixup\n"); |
146 | 150 | ||
147 | /* Ensure ports 1, 2, 3, 4 & 5 are enabled */ | 151 | /* Ensure ports 1, 2, 3, 4 & 5 are enabled */ |
diff --git a/block/blk-merge.c b/block/blk-merge.c index a104593e70c3..5a244f05360f 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c | |||
@@ -39,14 +39,13 @@ void blk_recalc_rq_sectors(struct request *rq, int nsect) | |||
39 | } | 39 | } |
40 | 40 | ||
41 | static unsigned int __blk_recalc_rq_segments(struct request_queue *q, | 41 | static unsigned int __blk_recalc_rq_segments(struct request_queue *q, |
42 | struct bio *bio, | 42 | struct bio *bio) |
43 | unsigned int *seg_size_ptr) | ||
44 | { | 43 | { |
45 | unsigned int phys_size; | 44 | unsigned int phys_size; |
46 | struct bio_vec *bv, *bvprv = NULL; | 45 | struct bio_vec *bv, *bvprv = NULL; |
47 | int cluster, i, high, highprv = 1; | 46 | int cluster, i, high, highprv = 1; |
48 | unsigned int seg_size, nr_phys_segs; | 47 | unsigned int seg_size, nr_phys_segs; |
49 | struct bio *fbio; | 48 | struct bio *fbio, *bbio; |
50 | 49 | ||
51 | if (!bio) | 50 | if (!bio) |
52 | return 0; | 51 | return 0; |
@@ -87,26 +86,20 @@ new_segment: | |||
87 | seg_size = bv->bv_len; | 86 | seg_size = bv->bv_len; |
88 | highprv = high; | 87 | highprv = high; |
89 | } | 88 | } |
89 | bbio = bio; | ||
90 | } | 90 | } |
91 | 91 | ||
92 | if (seg_size_ptr) | 92 | if (nr_phys_segs == 1 && seg_size > fbio->bi_seg_front_size) |
93 | *seg_size_ptr = seg_size; | 93 | fbio->bi_seg_front_size = seg_size; |
94 | if (seg_size > bbio->bi_seg_back_size) | ||
95 | bbio->bi_seg_back_size = seg_size; | ||
94 | 96 | ||
95 | return nr_phys_segs; | 97 | return nr_phys_segs; |
96 | } | 98 | } |
97 | 99 | ||
98 | void blk_recalc_rq_segments(struct request *rq) | 100 | void blk_recalc_rq_segments(struct request *rq) |
99 | { | 101 | { |
100 | unsigned int seg_size = 0, phys_segs; | 102 | rq->nr_phys_segments = __blk_recalc_rq_segments(rq->q, rq->bio); |
101 | |||
102 | phys_segs = __blk_recalc_rq_segments(rq->q, rq->bio, &seg_size); | ||
103 | |||
104 | if (phys_segs == 1 && seg_size > rq->bio->bi_seg_front_size) | ||
105 | rq->bio->bi_seg_front_size = seg_size; | ||
106 | if (seg_size > rq->biotail->bi_seg_back_size) | ||
107 | rq->biotail->bi_seg_back_size = seg_size; | ||
108 | |||
109 | rq->nr_phys_segments = phys_segs; | ||
110 | } | 103 | } |
111 | 104 | ||
112 | void blk_recount_segments(struct request_queue *q, struct bio *bio) | 105 | void blk_recount_segments(struct request_queue *q, struct bio *bio) |
@@ -114,7 +107,7 @@ void blk_recount_segments(struct request_queue *q, struct bio *bio) | |||
114 | struct bio *nxt = bio->bi_next; | 107 | struct bio *nxt = bio->bi_next; |
115 | 108 | ||
116 | bio->bi_next = NULL; | 109 | bio->bi_next = NULL; |
117 | bio->bi_phys_segments = __blk_recalc_rq_segments(q, bio, NULL); | 110 | bio->bi_phys_segments = __blk_recalc_rq_segments(q, bio); |
118 | bio->bi_next = nxt; | 111 | bio->bi_next = nxt; |
119 | bio->bi_flags |= (1 << BIO_SEG_VALID); | 112 | bio->bi_flags |= (1 << BIO_SEG_VALID); |
120 | } | 113 | } |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index a603bbf9b1b7..66e012cd3271 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -582,18 +582,18 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
582 | { PCI_VDEVICE(NVIDIA, 0x0abd), board_ahci }, /* MCP79 */ | 582 | { PCI_VDEVICE(NVIDIA, 0x0abd), board_ahci }, /* MCP79 */ |
583 | { PCI_VDEVICE(NVIDIA, 0x0abe), board_ahci }, /* MCP79 */ | 583 | { PCI_VDEVICE(NVIDIA, 0x0abe), board_ahci }, /* MCP79 */ |
584 | { PCI_VDEVICE(NVIDIA, 0x0abf), board_ahci }, /* MCP79 */ | 584 | { PCI_VDEVICE(NVIDIA, 0x0abf), board_ahci }, /* MCP79 */ |
585 | { PCI_VDEVICE(NVIDIA, 0x0bc8), board_ahci }, /* MCP7B */ | 585 | { PCI_VDEVICE(NVIDIA, 0x0d84), board_ahci }, /* MCP89 */ |
586 | { PCI_VDEVICE(NVIDIA, 0x0bc9), board_ahci }, /* MCP7B */ | 586 | { PCI_VDEVICE(NVIDIA, 0x0d85), board_ahci }, /* MCP89 */ |
587 | { PCI_VDEVICE(NVIDIA, 0x0bca), board_ahci }, /* MCP7B */ | 587 | { PCI_VDEVICE(NVIDIA, 0x0d86), board_ahci }, /* MCP89 */ |
588 | { PCI_VDEVICE(NVIDIA, 0x0bcb), board_ahci }, /* MCP7B */ | 588 | { PCI_VDEVICE(NVIDIA, 0x0d87), board_ahci }, /* MCP89 */ |
589 | { PCI_VDEVICE(NVIDIA, 0x0bcc), board_ahci }, /* MCP7B */ | 589 | { PCI_VDEVICE(NVIDIA, 0x0d88), board_ahci }, /* MCP89 */ |
590 | { PCI_VDEVICE(NVIDIA, 0x0bcd), board_ahci }, /* MCP7B */ | 590 | { PCI_VDEVICE(NVIDIA, 0x0d89), board_ahci }, /* MCP89 */ |
591 | { PCI_VDEVICE(NVIDIA, 0x0bce), board_ahci }, /* MCP7B */ | 591 | { PCI_VDEVICE(NVIDIA, 0x0d8a), board_ahci }, /* MCP89 */ |
592 | { PCI_VDEVICE(NVIDIA, 0x0bcf), board_ahci }, /* MCP7B */ | 592 | { PCI_VDEVICE(NVIDIA, 0x0d8b), board_ahci }, /* MCP89 */ |
593 | { PCI_VDEVICE(NVIDIA, 0x0bc4), board_ahci }, /* MCP7B */ | 593 | { PCI_VDEVICE(NVIDIA, 0x0d8c), board_ahci }, /* MCP89 */ |
594 | { PCI_VDEVICE(NVIDIA, 0x0bc5), board_ahci }, /* MCP7B */ | 594 | { PCI_VDEVICE(NVIDIA, 0x0d8d), board_ahci }, /* MCP89 */ |
595 | { PCI_VDEVICE(NVIDIA, 0x0bc6), board_ahci }, /* MCP7B */ | 595 | { PCI_VDEVICE(NVIDIA, 0x0d8e), board_ahci }, /* MCP89 */ |
596 | { PCI_VDEVICE(NVIDIA, 0x0bc7), board_ahci }, /* MCP7B */ | 596 | { PCI_VDEVICE(NVIDIA, 0x0d8f), board_ahci }, /* MCP89 */ |
597 | 597 | ||
598 | /* SiS */ | 598 | /* SiS */ |
599 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ | 599 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 9fbf0595f3d4..060bcd601f57 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -1322,14 +1322,16 @@ static u64 ata_id_n_sectors(const u16 *id) | |||
1322 | { | 1322 | { |
1323 | if (ata_id_has_lba(id)) { | 1323 | if (ata_id_has_lba(id)) { |
1324 | if (ata_id_has_lba48(id)) | 1324 | if (ata_id_has_lba48(id)) |
1325 | return ata_id_u64(id, 100); | 1325 | return ata_id_u64(id, ATA_ID_LBA_CAPACITY_2); |
1326 | else | 1326 | else |
1327 | return ata_id_u32(id, 60); | 1327 | return ata_id_u32(id, ATA_ID_LBA_CAPACITY); |
1328 | } else { | 1328 | } else { |
1329 | if (ata_id_current_chs_valid(id)) | 1329 | if (ata_id_current_chs_valid(id)) |
1330 | return ata_id_u32(id, 57); | 1330 | return id[ATA_ID_CUR_CYLS] * id[ATA_ID_CUR_HEADS] * |
1331 | id[ATA_ID_CUR_SECTORS]; | ||
1331 | else | 1332 | else |
1332 | return id[1] * id[3] * id[6]; | 1333 | return id[ATA_ID_CYLS] * id[ATA_ID_HEADS] * |
1334 | id[ATA_ID_SECTORS]; | ||
1333 | } | 1335 | } |
1334 | } | 1336 | } |
1335 | 1337 | ||
@@ -4612,7 +4614,7 @@ void ata_sg_clean(struct ata_queued_cmd *qc) | |||
4612 | VPRINTK("unmapping %u sg elements\n", qc->n_elem); | 4614 | VPRINTK("unmapping %u sg elements\n", qc->n_elem); |
4613 | 4615 | ||
4614 | if (qc->n_elem) | 4616 | if (qc->n_elem) |
4615 | dma_unmap_sg(ap->dev, sg, qc->n_elem, dir); | 4617 | dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir); |
4616 | 4618 | ||
4617 | qc->flags &= ~ATA_QCFLAG_DMAMAP; | 4619 | qc->flags &= ~ATA_QCFLAG_DMAMAP; |
4618 | qc->sg = NULL; | 4620 | qc->sg = NULL; |
@@ -4727,7 +4729,7 @@ static int ata_sg_setup(struct ata_queued_cmd *qc) | |||
4727 | return -1; | 4729 | return -1; |
4728 | 4730 | ||
4729 | DPRINTK("%d sg elements mapped\n", n_elem); | 4731 | DPRINTK("%d sg elements mapped\n", n_elem); |
4730 | 4732 | qc->orig_n_elem = qc->n_elem; | |
4731 | qc->n_elem = n_elem; | 4733 | qc->n_elem = n_elem; |
4732 | qc->flags |= ATA_QCFLAG_DMAMAP; | 4734 | qc->flags |= ATA_QCFLAG_DMAMAP; |
4733 | 4735 | ||
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index ce2ef0475339..ea890911d4fa 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -2423,11 +2423,14 @@ int ata_eh_reset(struct ata_link *link, int classify, | |||
2423 | } | 2423 | } |
2424 | 2424 | ||
2425 | /* prereset() might have cleared ATA_EH_RESET. If so, | 2425 | /* prereset() might have cleared ATA_EH_RESET. If so, |
2426 | * bang classes and return. | 2426 | * bang classes, thaw and return. |
2427 | */ | 2427 | */ |
2428 | if (reset && !(ehc->i.action & ATA_EH_RESET)) { | 2428 | if (reset && !(ehc->i.action & ATA_EH_RESET)) { |
2429 | ata_for_each_dev(dev, link, ALL) | 2429 | ata_for_each_dev(dev, link, ALL) |
2430 | classes[dev->devno] = ATA_DEV_NONE; | 2430 | classes[dev->devno] = ATA_DEV_NONE; |
2431 | if ((ap->pflags & ATA_PFLAG_FROZEN) && | ||
2432 | ata_is_host_link(link)) | ||
2433 | ata_eh_thaw_port(ap); | ||
2431 | rc = 0; | 2434 | rc = 0; |
2432 | goto out; | 2435 | goto out; |
2433 | } | 2436 | } |
@@ -2901,7 +2904,7 @@ static int atapi_eh_clear_ua(struct ata_device *dev) | |||
2901 | int i; | 2904 | int i; |
2902 | 2905 | ||
2903 | for (i = 0; i < ATA_EH_UA_TRIES; i++) { | 2906 | for (i = 0; i < ATA_EH_UA_TRIES; i++) { |
2904 | u8 sense_buffer[SCSI_SENSE_BUFFERSIZE]; | 2907 | u8 *sense_buffer = dev->link->ap->sector_buf; |
2905 | u8 sense_key = 0; | 2908 | u8 sense_key = 0; |
2906 | unsigned int err_mask; | 2909 | unsigned int err_mask; |
2907 | 2910 | ||
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c index 55a8eed3f3a3..f65b53785a8f 100644 --- a/drivers/ata/sata_nv.c +++ b/drivers/ata/sata_nv.c | |||
@@ -2523,7 +2523,7 @@ static void __exit nv_exit(void) | |||
2523 | module_init(nv_init); | 2523 | module_init(nv_init); |
2524 | module_exit(nv_exit); | 2524 | module_exit(nv_exit); |
2525 | module_param_named(adma, adma_enabled, bool, 0444); | 2525 | module_param_named(adma, adma_enabled, bool, 0444); |
2526 | MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: true)"); | 2526 | MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: false)"); |
2527 | module_param_named(swncq, swncq_enabled, bool, 0444); | 2527 | module_param_named(swncq, swncq_enabled, bool, 0444); |
2528 | MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)"); | 2528 | MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)"); |
2529 | 2529 | ||
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index b5a061114630..4f9b6d792017 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c | |||
@@ -3606,11 +3606,9 @@ static int __devinit cciss_init_one(struct pci_dev *pdev, | |||
3606 | if (cciss_hard_reset_controller(pdev) || cciss_reset_msi(pdev)) | 3606 | if (cciss_hard_reset_controller(pdev) || cciss_reset_msi(pdev)) |
3607 | return -ENODEV; | 3607 | return -ENODEV; |
3608 | 3608 | ||
3609 | /* Some devices (notably the HP Smart Array 5i Controller) | 3609 | /* Now try to get the controller to respond to a no-op. Some |
3610 | need a little pause here */ | 3610 | devices (notably the HP Smart Array 5i Controller) need |
3611 | schedule_timeout_uninterruptible(30*HZ); | 3611 | up to 30 seconds to respond. */ |
3612 | |||
3613 | /* Now try to get the controller to respond to a no-op */ | ||
3614 | for (i=0; i<30; i++) { | 3612 | for (i=0; i<30; i++) { |
3615 | if (cciss_noop(pdev) == 0) | 3613 | if (cciss_noop(pdev) == 0) |
3616 | break; | 3614 | break; |
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index edbaac6c0573..bf0345577672 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
@@ -392,8 +392,7 @@ lo_splice_actor(struct pipe_inode_info *pipe, struct pipe_buffer *buf, | |||
392 | struct loop_device *lo = p->lo; | 392 | struct loop_device *lo = p->lo; |
393 | struct page *page = buf->page; | 393 | struct page *page = buf->page; |
394 | sector_t IV; | 394 | sector_t IV; |
395 | size_t size; | 395 | int size, ret; |
396 | int ret; | ||
397 | 396 | ||
398 | ret = buf->ops->confirm(pipe, buf); | 397 | ret = buf->ops->confirm(pipe, buf); |
399 | if (unlikely(ret)) | 398 | if (unlikely(ret)) |
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index b6c8ce254359..8f905089b72b 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c | |||
@@ -977,6 +977,8 @@ static void backend_changed(struct xenbus_device *dev, | |||
977 | break; | 977 | break; |
978 | 978 | ||
979 | case XenbusStateClosing: | 979 | case XenbusStateClosing: |
980 | if (info->gd == NULL) | ||
981 | xenbus_dev_fatal(dev, -ENODEV, "gd is NULL"); | ||
980 | bd = bdget_disk(info->gd, 0); | 982 | bd = bdget_disk(info->gd, 0); |
981 | if (bd == NULL) | 983 | if (bd == NULL) |
982 | xenbus_dev_fatal(dev, -ENODEV, "bdget failed"); | 984 | xenbus_dev_fatal(dev, -ENODEV, "bdget failed"); |
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 096e2a37446d..7c8b15b22bf2 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c | |||
@@ -168,7 +168,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data, | |||
168 | file_priv->minor->master != file_priv->master) { | 168 | file_priv->minor->master != file_priv->master) { |
169 | mutex_lock(&dev->struct_mutex); | 169 | mutex_lock(&dev->struct_mutex); |
170 | file_priv->minor->master = drm_master_get(file_priv->master); | 170 | file_priv->minor->master = drm_master_get(file_priv->master); |
171 | mutex_lock(&dev->struct_mutex); | 171 | mutex_unlock(&dev->struct_mutex); |
172 | } | 172 | } |
173 | 173 | ||
174 | return 0; | 174 | return 0; |
diff --git a/fs/squashfs/block.c b/fs/squashfs/block.c index c837dfc2b3c6..321728f48f2d 100644 --- a/fs/squashfs/block.c +++ b/fs/squashfs/block.c | |||
@@ -80,7 +80,7 @@ static struct buffer_head *get_block_length(struct super_block *sb, | |||
80 | * generated a larger block - this does occasionally happen with zlib). | 80 | * generated a larger block - this does occasionally happen with zlib). |
81 | */ | 81 | */ |
82 | int squashfs_read_data(struct super_block *sb, void **buffer, u64 index, | 82 | int squashfs_read_data(struct super_block *sb, void **buffer, u64 index, |
83 | int length, u64 *next_index, int srclength) | 83 | int length, u64 *next_index, int srclength, int pages) |
84 | { | 84 | { |
85 | struct squashfs_sb_info *msblk = sb->s_fs_info; | 85 | struct squashfs_sb_info *msblk = sb->s_fs_info; |
86 | struct buffer_head **bh; | 86 | struct buffer_head **bh; |
@@ -185,6 +185,14 @@ int squashfs_read_data(struct super_block *sb, void **buffer, u64 index, | |||
185 | } | 185 | } |
186 | 186 | ||
187 | if (msblk->stream.avail_out == 0) { | 187 | if (msblk->stream.avail_out == 0) { |
188 | if (page == pages) { | ||
189 | ERROR("zlib_inflate tried to " | ||
190 | "decompress too much data, " | ||
191 | "expected %d bytes. Zlib " | ||
192 | "data probably corrupt\n", | ||
193 | srclength); | ||
194 | goto release_mutex; | ||
195 | } | ||
188 | msblk->stream.next_out = buffer[page++]; | 196 | msblk->stream.next_out = buffer[page++]; |
189 | msblk->stream.avail_out = PAGE_CACHE_SIZE; | 197 | msblk->stream.avail_out = PAGE_CACHE_SIZE; |
190 | } | 198 | } |
@@ -268,7 +276,8 @@ block_release: | |||
268 | put_bh(bh[k]); | 276 | put_bh(bh[k]); |
269 | 277 | ||
270 | read_failure: | 278 | read_failure: |
271 | ERROR("sb_bread failed reading block 0x%llx\n", cur_index); | 279 | ERROR("squashfs_read_data failed to read block 0x%llx\n", |
280 | (unsigned long long) index); | ||
272 | kfree(bh); | 281 | kfree(bh); |
273 | return -EIO; | 282 | return -EIO; |
274 | } | 283 | } |
diff --git a/fs/squashfs/cache.c b/fs/squashfs/cache.c index f29eda16d25e..1c4739e33af6 100644 --- a/fs/squashfs/cache.c +++ b/fs/squashfs/cache.c | |||
@@ -119,7 +119,7 @@ struct squashfs_cache_entry *squashfs_cache_get(struct super_block *sb, | |||
119 | 119 | ||
120 | entry->length = squashfs_read_data(sb, entry->data, | 120 | entry->length = squashfs_read_data(sb, entry->data, |
121 | block, length, &entry->next_index, | 121 | block, length, &entry->next_index, |
122 | cache->block_size); | 122 | cache->block_size, cache->pages); |
123 | 123 | ||
124 | spin_lock(&cache->lock); | 124 | spin_lock(&cache->lock); |
125 | 125 | ||
@@ -406,7 +406,7 @@ int squashfs_read_table(struct super_block *sb, void *buffer, u64 block, | |||
406 | for (i = 0; i < pages; i++, buffer += PAGE_CACHE_SIZE) | 406 | for (i = 0; i < pages; i++, buffer += PAGE_CACHE_SIZE) |
407 | data[i] = buffer; | 407 | data[i] = buffer; |
408 | res = squashfs_read_data(sb, data, block, length | | 408 | res = squashfs_read_data(sb, data, block, length | |
409 | SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length); | 409 | SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length, pages); |
410 | kfree(data); | 410 | kfree(data); |
411 | return res; | 411 | return res; |
412 | } | 412 | } |
diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c index 7a63398bb855..9101dbde39ec 100644 --- a/fs/squashfs/inode.c +++ b/fs/squashfs/inode.c | |||
@@ -133,7 +133,8 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
133 | type = le16_to_cpu(sqshb_ino->inode_type); | 133 | type = le16_to_cpu(sqshb_ino->inode_type); |
134 | switch (type) { | 134 | switch (type) { |
135 | case SQUASHFS_REG_TYPE: { | 135 | case SQUASHFS_REG_TYPE: { |
136 | unsigned int frag_offset, frag_size, frag; | 136 | unsigned int frag_offset, frag; |
137 | int frag_size; | ||
137 | u64 frag_blk; | 138 | u64 frag_blk; |
138 | struct squashfs_reg_inode *sqsh_ino = &squashfs_ino.reg; | 139 | struct squashfs_reg_inode *sqsh_ino = &squashfs_ino.reg; |
139 | 140 | ||
@@ -175,7 +176,8 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
175 | break; | 176 | break; |
176 | } | 177 | } |
177 | case SQUASHFS_LREG_TYPE: { | 178 | case SQUASHFS_LREG_TYPE: { |
178 | unsigned int frag_offset, frag_size, frag; | 179 | unsigned int frag_offset, frag; |
180 | int frag_size; | ||
179 | u64 frag_blk; | 181 | u64 frag_blk; |
180 | struct squashfs_lreg_inode *sqsh_ino = &squashfs_ino.lreg; | 182 | struct squashfs_lreg_inode *sqsh_ino = &squashfs_ino.lreg; |
181 | 183 | ||
diff --git a/fs/squashfs/squashfs.h b/fs/squashfs/squashfs.h index 6b2515d027d5..0e9feb6adf7e 100644 --- a/fs/squashfs/squashfs.h +++ b/fs/squashfs/squashfs.h | |||
@@ -34,7 +34,7 @@ static inline struct squashfs_inode_info *squashfs_i(struct inode *inode) | |||
34 | 34 | ||
35 | /* block.c */ | 35 | /* block.c */ |
36 | extern int squashfs_read_data(struct super_block *, void **, u64, int, u64 *, | 36 | extern int squashfs_read_data(struct super_block *, void **, u64, int, u64 *, |
37 | int); | 37 | int, int); |
38 | 38 | ||
39 | /* cache.c */ | 39 | /* cache.c */ |
40 | extern struct squashfs_cache *squashfs_cache_init(char *, int, int); | 40 | extern struct squashfs_cache *squashfs_cache_init(char *, int, int); |
diff --git a/fs/squashfs/super.c b/fs/squashfs/super.c index 071df5b5b491..681ec0d83799 100644 --- a/fs/squashfs/super.c +++ b/fs/squashfs/super.c | |||
@@ -389,7 +389,7 @@ static int __init init_squashfs_fs(void) | |||
389 | return err; | 389 | return err; |
390 | } | 390 | } |
391 | 391 | ||
392 | printk(KERN_INFO "squashfs: version 4.0 (2009/01/03) " | 392 | printk(KERN_INFO "squashfs: version 4.0 (2009/01/31) " |
393 | "Phillip Lougher\n"); | 393 | "Phillip Lougher\n"); |
394 | 394 | ||
395 | return 0; | 395 | return 0; |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 5d87bc09a1f5..dc18b87ed722 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -275,7 +275,7 @@ enum { | |||
275 | * advised to wait only for the following duration before | 275 | * advised to wait only for the following duration before |
276 | * doing SRST. | 276 | * doing SRST. |
277 | */ | 277 | */ |
278 | ATA_TMOUT_PMP_SRST_WAIT = 1000, | 278 | ATA_TMOUT_PMP_SRST_WAIT = 5000, |
279 | 279 | ||
280 | /* ATA bus states */ | 280 | /* ATA bus states */ |
281 | BUS_UNKNOWN = 0, | 281 | BUS_UNKNOWN = 0, |
@@ -530,6 +530,7 @@ struct ata_queued_cmd { | |||
530 | unsigned long flags; /* ATA_QCFLAG_xxx */ | 530 | unsigned long flags; /* ATA_QCFLAG_xxx */ |
531 | unsigned int tag; | 531 | unsigned int tag; |
532 | unsigned int n_elem; | 532 | unsigned int n_elem; |
533 | unsigned int orig_n_elem; | ||
533 | 534 | ||
534 | int dma_dir; | 535 | int dma_dir; |
535 | 536 | ||
@@ -750,7 +751,8 @@ struct ata_port { | |||
750 | acpi_handle acpi_handle; | 751 | acpi_handle acpi_handle; |
751 | struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */ | 752 | struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */ |
752 | #endif | 753 | #endif |
753 | u8 sector_buf[ATA_SECT_SIZE]; /* owned by EH */ | 754 | /* owned by EH */ |
755 | u8 sector_buf[ATA_SECT_SIZE] ____cacheline_aligned; | ||
754 | }; | 756 | }; |
755 | 757 | ||
756 | /* The following initializer overrides a method to NULL whether one of | 758 | /* The following initializer overrides a method to NULL whether one of |
diff --git a/include/linux/serio.h b/include/linux/serio.h index 1bcb357a01a1..e0417e4d3f15 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
@@ -212,7 +212,7 @@ static inline void serio_unpin_driver(struct serio *serio) | |||
212 | #define SERIO_FUJITSU 0x35 | 212 | #define SERIO_FUJITSU 0x35 |
213 | #define SERIO_ZHENHUA 0x36 | 213 | #define SERIO_ZHENHUA 0x36 |
214 | #define SERIO_INEXIO 0x37 | 214 | #define SERIO_INEXIO 0x37 |
215 | #define SERIO_TOUCHIT213 0x37 | 215 | #define SERIO_TOUCHIT213 0x38 |
216 | #define SERIO_W8001 0x39 | 216 | #define SERIO_W8001 0x39 |
217 | 217 | ||
218 | #endif | 218 | #endif |
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 0278bc083044..e7ded1326b0f 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c | |||
@@ -1498,58 +1498,31 @@ static int smack_socket_post_create(struct socket *sock, int family, | |||
1498 | * looks for host based access restrictions | 1498 | * looks for host based access restrictions |
1499 | * | 1499 | * |
1500 | * This version will only be appropriate for really small | 1500 | * This version will only be appropriate for really small |
1501 | * sets of single label hosts. Because of the masking | 1501 | * sets of single label hosts. |
1502 | * it cannot shortcut out on the first match. There are | ||
1503 | * numerious ways to address the problem, but none of them | ||
1504 | * have been applied here. | ||
1505 | * | 1502 | * |
1506 | * Returns the label of the far end or NULL if it's not special. | 1503 | * Returns the label of the far end or NULL if it's not special. |
1507 | */ | 1504 | */ |
1508 | static char *smack_host_label(struct sockaddr_in *sip) | 1505 | static char *smack_host_label(struct sockaddr_in *sip) |
1509 | { | 1506 | { |
1510 | struct smk_netlbladdr *snp; | 1507 | struct smk_netlbladdr *snp; |
1511 | char *bestlabel = NULL; | ||
1512 | struct in_addr *siap = &sip->sin_addr; | 1508 | struct in_addr *siap = &sip->sin_addr; |
1513 | struct in_addr *liap; | ||
1514 | struct in_addr *miap; | ||
1515 | struct in_addr bestmask; | ||
1516 | 1509 | ||
1517 | if (siap->s_addr == 0) | 1510 | if (siap->s_addr == 0) |
1518 | return NULL; | 1511 | return NULL; |
1519 | 1512 | ||
1520 | bestmask.s_addr = 0; | ||
1521 | |||
1522 | for (snp = smack_netlbladdrs; snp != NULL; snp = snp->smk_next) { | 1513 | for (snp = smack_netlbladdrs; snp != NULL; snp = snp->smk_next) { |
1523 | liap = &snp->smk_host.sin_addr; | ||
1524 | miap = &snp->smk_mask; | ||
1525 | /* | ||
1526 | * If the addresses match after applying the list entry mask | ||
1527 | * the entry matches the address. If it doesn't move along to | ||
1528 | * the next entry. | ||
1529 | */ | ||
1530 | if ((liap->s_addr & miap->s_addr) != | ||
1531 | (siap->s_addr & miap->s_addr)) | ||
1532 | continue; | ||
1533 | /* | 1514 | /* |
1534 | * If the list entry mask identifies a single address | 1515 | * we break after finding the first match because |
1535 | * it can't get any more specific. | 1516 | * the list is sorted from longest to shortest mask |
1517 | * so we have found the most specific match | ||
1536 | */ | 1518 | */ |
1537 | if (miap->s_addr == 0xffffffff) | 1519 | if ((&snp->smk_host.sin_addr)->s_addr == |
1520 | (siap->s_addr & (&snp->smk_mask)->s_addr)) { | ||
1538 | return snp->smk_label; | 1521 | return snp->smk_label; |
1539 | /* | 1522 | } |
1540 | * If the list entry mask is less specific than the best | ||
1541 | * already found this entry is uninteresting. | ||
1542 | */ | ||
1543 | if ((miap->s_addr | bestmask.s_addr) == bestmask.s_addr) | ||
1544 | continue; | ||
1545 | /* | ||
1546 | * This is better than any entry found so far. | ||
1547 | */ | ||
1548 | bestmask.s_addr = miap->s_addr; | ||
1549 | bestlabel = snp->smk_label; | ||
1550 | } | 1523 | } |
1551 | 1524 | ||
1552 | return bestlabel; | 1525 | return NULL; |
1553 | } | 1526 | } |
1554 | 1527 | ||
1555 | /** | 1528 | /** |
diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index 8e42800878f4..51f0efc50dab 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c | |||
@@ -650,10 +650,6 @@ static void *netlbladdr_seq_next(struct seq_file *s, void *v, loff_t *pos) | |||
650 | 650 | ||
651 | return skp; | 651 | return skp; |
652 | } | 652 | } |
653 | /* | ||
654 | #define BEMASK 0x80000000 | ||
655 | */ | ||
656 | #define BEMASK 0x00000001 | ||
657 | #define BEBITS (sizeof(__be32) * 8) | 653 | #define BEBITS (sizeof(__be32) * 8) |
658 | 654 | ||
659 | /* | 655 | /* |
@@ -663,12 +659,10 @@ static int netlbladdr_seq_show(struct seq_file *s, void *v) | |||
663 | { | 659 | { |
664 | struct smk_netlbladdr *skp = (struct smk_netlbladdr *) v; | 660 | struct smk_netlbladdr *skp = (struct smk_netlbladdr *) v; |
665 | unsigned char *hp = (char *) &skp->smk_host.sin_addr.s_addr; | 661 | unsigned char *hp = (char *) &skp->smk_host.sin_addr.s_addr; |
666 | __be32 bebits; | 662 | int maskn; |
667 | int maskn = 0; | 663 | u32 temp_mask = be32_to_cpu(skp->smk_mask.s_addr); |
668 | 664 | ||
669 | for (bebits = BEMASK; bebits != 0; maskn++, bebits <<= 1) | 665 | for (maskn = 0; temp_mask; temp_mask <<= 1, maskn++); |
670 | if ((skp->smk_mask.s_addr & bebits) == 0) | ||
671 | break; | ||
672 | 666 | ||
673 | seq_printf(s, "%u.%u.%u.%u/%d %s\n", | 667 | seq_printf(s, "%u.%u.%u.%u/%d %s\n", |
674 | hp[0], hp[1], hp[2], hp[3], maskn, skp->smk_label); | 668 | hp[0], hp[1], hp[2], hp[3], maskn, skp->smk_label); |
@@ -702,6 +696,42 @@ static int smk_open_netlbladdr(struct inode *inode, struct file *file) | |||
702 | } | 696 | } |
703 | 697 | ||
704 | /** | 698 | /** |
699 | * smk_netlbladdr_insert | ||
700 | * @new : netlabel to insert | ||
701 | * | ||
702 | * This helper insert netlabel in the smack_netlbladdrs list | ||
703 | * sorted by netmask length (longest to smallest) | ||
704 | */ | ||
705 | static void smk_netlbladdr_insert(struct smk_netlbladdr *new) | ||
706 | { | ||
707 | struct smk_netlbladdr *m; | ||
708 | |||
709 | if (smack_netlbladdrs == NULL) { | ||
710 | smack_netlbladdrs = new; | ||
711 | return; | ||
712 | } | ||
713 | |||
714 | /* the comparison '>' is a bit hacky, but works */ | ||
715 | if (new->smk_mask.s_addr > smack_netlbladdrs->smk_mask.s_addr) { | ||
716 | new->smk_next = smack_netlbladdrs; | ||
717 | smack_netlbladdrs = new; | ||
718 | return; | ||
719 | } | ||
720 | for (m = smack_netlbladdrs; m != NULL; m = m->smk_next) { | ||
721 | if (m->smk_next == NULL) { | ||
722 | m->smk_next = new; | ||
723 | return; | ||
724 | } | ||
725 | if (new->smk_mask.s_addr > m->smk_next->smk_mask.s_addr) { | ||
726 | new->smk_next = m->smk_next; | ||
727 | m->smk_next = new; | ||
728 | return; | ||
729 | } | ||
730 | } | ||
731 | } | ||
732 | |||
733 | |||
734 | /** | ||
705 | * smk_write_netlbladdr - write() for /smack/netlabel | 735 | * smk_write_netlbladdr - write() for /smack/netlabel |
706 | * @filp: file pointer, not actually used | 736 | * @filp: file pointer, not actually used |
707 | * @buf: where to get the data from | 737 | * @buf: where to get the data from |
@@ -724,8 +754,9 @@ static ssize_t smk_write_netlbladdr(struct file *file, const char __user *buf, | |||
724 | struct netlbl_audit audit_info; | 754 | struct netlbl_audit audit_info; |
725 | struct in_addr mask; | 755 | struct in_addr mask; |
726 | unsigned int m; | 756 | unsigned int m; |
727 | __be32 bebits = BEMASK; | 757 | u32 mask_bits = (1<<31); |
728 | __be32 nsa; | 758 | __be32 nsa; |
759 | u32 temp_mask; | ||
729 | 760 | ||
730 | /* | 761 | /* |
731 | * Must have privilege. | 762 | * Must have privilege. |
@@ -761,10 +792,13 @@ static ssize_t smk_write_netlbladdr(struct file *file, const char __user *buf, | |||
761 | if (sp == NULL) | 792 | if (sp == NULL) |
762 | return -EINVAL; | 793 | return -EINVAL; |
763 | 794 | ||
764 | for (mask.s_addr = 0; m > 0; m--) { | 795 | for (temp_mask = 0; m > 0; m--) { |
765 | mask.s_addr |= bebits; | 796 | temp_mask |= mask_bits; |
766 | bebits <<= 1; | 797 | mask_bits >>= 1; |
767 | } | 798 | } |
799 | mask.s_addr = cpu_to_be32(temp_mask); | ||
800 | |||
801 | newname.sin_addr.s_addr &= mask.s_addr; | ||
768 | /* | 802 | /* |
769 | * Only allow one writer at a time. Writes should be | 803 | * Only allow one writer at a time. Writes should be |
770 | * quite rare and small in any case. | 804 | * quite rare and small in any case. |
@@ -772,6 +806,7 @@ static ssize_t smk_write_netlbladdr(struct file *file, const char __user *buf, | |||
772 | mutex_lock(&smk_netlbladdr_lock); | 806 | mutex_lock(&smk_netlbladdr_lock); |
773 | 807 | ||
774 | nsa = newname.sin_addr.s_addr; | 808 | nsa = newname.sin_addr.s_addr; |
809 | /* try to find if the prefix is already in the list */ | ||
775 | for (skp = smack_netlbladdrs; skp != NULL; skp = skp->smk_next) | 810 | for (skp = smack_netlbladdrs; skp != NULL; skp = skp->smk_next) |
776 | if (skp->smk_host.sin_addr.s_addr == nsa && | 811 | if (skp->smk_host.sin_addr.s_addr == nsa && |
777 | skp->smk_mask.s_addr == mask.s_addr) | 812 | skp->smk_mask.s_addr == mask.s_addr) |
@@ -787,9 +822,8 @@ static ssize_t smk_write_netlbladdr(struct file *file, const char __user *buf, | |||
787 | rc = 0; | 822 | rc = 0; |
788 | skp->smk_host.sin_addr.s_addr = newname.sin_addr.s_addr; | 823 | skp->smk_host.sin_addr.s_addr = newname.sin_addr.s_addr; |
789 | skp->smk_mask.s_addr = mask.s_addr; | 824 | skp->smk_mask.s_addr = mask.s_addr; |
790 | skp->smk_next = smack_netlbladdrs; | ||
791 | skp->smk_label = sp; | 825 | skp->smk_label = sp; |
792 | smack_netlbladdrs = skp; | 826 | smk_netlbladdr_insert(skp); |
793 | } | 827 | } |
794 | } else { | 828 | } else { |
795 | rc = netlbl_cfg_unlbl_static_del(&init_net, NULL, | 829 | rc = netlbl_cfg_unlbl_static_del(&init_net, NULL, |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 3bc427645da8..6094344fb223 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -1207,7 +1207,7 @@ static const char *slave_vols[] = { | |||
1207 | "LFE Playback Volume", | 1207 | "LFE Playback Volume", |
1208 | "Side Playback Volume", | 1208 | "Side Playback Volume", |
1209 | "Headphone Playback Volume", | 1209 | "Headphone Playback Volume", |
1210 | "Headphone Playback Volume", | 1210 | "Headphone2 Playback Volume", |
1211 | "Speaker Playback Volume", | 1211 | "Speaker Playback Volume", |
1212 | "External Speaker Playback Volume", | 1212 | "External Speaker Playback Volume", |
1213 | "Speaker2 Playback Volume", | 1213 | "Speaker2 Playback Volume", |
@@ -1221,7 +1221,7 @@ static const char *slave_sws[] = { | |||
1221 | "LFE Playback Switch", | 1221 | "LFE Playback Switch", |
1222 | "Side Playback Switch", | 1222 | "Side Playback Switch", |
1223 | "Headphone Playback Switch", | 1223 | "Headphone Playback Switch", |
1224 | "Headphone Playback Switch", | 1224 | "Headphone2 Playback Switch", |
1225 | "Speaker Playback Switch", | 1225 | "Speaker Playback Switch", |
1226 | "External Speaker Playback Switch", | 1226 | "External Speaker Playback Switch", |
1227 | "Speaker2 Playback Switch", | 1227 | "Speaker2 Playback Switch", |
@@ -3516,6 +3516,7 @@ static int stac92xx_parse_auto_config(struct hda_codec *codec, hda_nid_t dig_out | |||
3516 | if (! spec->autocfg.line_outs) | 3516 | if (! spec->autocfg.line_outs) |
3517 | return 0; /* can't find valid pin config */ | 3517 | return 0; /* can't find valid pin config */ |
3518 | 3518 | ||
3519 | #if 0 /* FIXME: temporarily disabled */ | ||
3519 | /* If we have no real line-out pin and multiple hp-outs, HPs should | 3520 | /* If we have no real line-out pin and multiple hp-outs, HPs should |
3520 | * be set up as multi-channel outputs. | 3521 | * be set up as multi-channel outputs. |
3521 | */ | 3522 | */ |
@@ -3535,6 +3536,7 @@ static int stac92xx_parse_auto_config(struct hda_codec *codec, hda_nid_t dig_out | |||
3535 | spec->autocfg.line_out_type = AUTO_PIN_HP_OUT; | 3536 | spec->autocfg.line_out_type = AUTO_PIN_HP_OUT; |
3536 | spec->autocfg.hp_outs = 0; | 3537 | spec->autocfg.hp_outs = 0; |
3537 | } | 3538 | } |
3539 | #endif /* FIXME: temporarily disabled */ | ||
3538 | if (spec->autocfg.mono_out_pin) { | 3540 | if (spec->autocfg.mono_out_pin) { |
3539 | int dir = get_wcaps(codec, spec->autocfg.mono_out_pin) & | 3541 | int dir = get_wcaps(codec, spec->autocfg.mono_out_pin) & |
3540 | (AC_WCAP_OUT_AMP | AC_WCAP_IN_AMP); | 3542 | (AC_WCAP_OUT_AMP | AC_WCAP_IN_AMP); |