diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | arch/i386/kernel/efi.c | 89 | ||||
-rw-r--r-- | arch/ia64/kernel/acpi.c | 3 | ||||
-rw-r--r-- | arch/ia64/kernel/irq.c | 3 | ||||
-rw-r--r-- | drivers/net/smc911x.c | 5 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_def.h | 1 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_glbl.h | 1 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_init.c | 18 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_isr.c | 4 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_mbx.c | 35 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_os.c | 64 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_version.h | 2 | ||||
-rw-r--r-- | drivers/scsi/scsi_scan.c | 6 | ||||
-rw-r--r-- | drivers/scsi/sd.c | 20 | ||||
-rw-r--r-- | drivers/scsi/st.c | 19 | ||||
-rw-r--r-- | drivers/usb/net/rtl8150.c | 3 | ||||
-rw-r--r-- | fs/aio.c | 20 | ||||
-rw-r--r-- | fs/block_dev.c | 41 | ||||
-rw-r--r-- | include/asm-alpha/unistd.h | 11 | ||||
-rw-r--r-- | include/asm-x86_64/dma-mapping.h | 3 | ||||
-rw-r--r-- | net/ipv4/netfilter/ip_conntrack_netlink.c | 2 | ||||
-rw-r--r-- | net/netfilter/Kconfig | 2 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_netlink.c | 2 |
23 files changed, 251 insertions, 105 deletions
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 2 | 1 | VERSION = 2 |
2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
3 | SUBLEVEL = 20 | 3 | SUBLEVEL = 20 |
4 | EXTRAVERSION =-rc7 | 4 | EXTRAVERSION = |
5 | NAME = Homicidal Dwarf Hamster | 5 | NAME = Homicidal Dwarf Hamster |
6 | 6 | ||
7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/i386/kernel/efi.c b/arch/i386/kernel/efi.c index b92c7f0a358a..8f9c624ace6f 100644 --- a/arch/i386/kernel/efi.c +++ b/arch/i386/kernel/efi.c | |||
@@ -473,6 +473,70 @@ static inline void __init check_range_for_systab(efi_memory_desc_t *md) | |||
473 | } | 473 | } |
474 | 474 | ||
475 | /* | 475 | /* |
476 | * Wrap all the virtual calls in a way that forces the parameters on the stack. | ||
477 | */ | ||
478 | |||
479 | #define efi_call_virt(f, args...) \ | ||
480 | ((efi_##f##_t __attribute__((regparm(0)))*)efi.systab->runtime->f)(args) | ||
481 | |||
482 | static efi_status_t virt_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc) | ||
483 | { | ||
484 | return efi_call_virt(get_time, tm, tc); | ||
485 | } | ||
486 | |||
487 | static efi_status_t virt_efi_set_time (efi_time_t *tm) | ||
488 | { | ||
489 | return efi_call_virt(set_time, tm); | ||
490 | } | ||
491 | |||
492 | static efi_status_t virt_efi_get_wakeup_time (efi_bool_t *enabled, | ||
493 | efi_bool_t *pending, | ||
494 | efi_time_t *tm) | ||
495 | { | ||
496 | return efi_call_virt(get_wakeup_time, enabled, pending, tm); | ||
497 | } | ||
498 | |||
499 | static efi_status_t virt_efi_set_wakeup_time (efi_bool_t enabled, | ||
500 | efi_time_t *tm) | ||
501 | { | ||
502 | return efi_call_virt(set_wakeup_time, enabled, tm); | ||
503 | } | ||
504 | |||
505 | static efi_status_t virt_efi_get_variable (efi_char16_t *name, | ||
506 | efi_guid_t *vendor, u32 *attr, | ||
507 | unsigned long *data_size, void *data) | ||
508 | { | ||
509 | return efi_call_virt(get_variable, name, vendor, attr, data_size, data); | ||
510 | } | ||
511 | |||
512 | static efi_status_t virt_efi_get_next_variable (unsigned long *name_size, | ||
513 | efi_char16_t *name, | ||
514 | efi_guid_t *vendor) | ||
515 | { | ||
516 | return efi_call_virt(get_next_variable, name_size, name, vendor); | ||
517 | } | ||
518 | |||
519 | static efi_status_t virt_efi_set_variable (efi_char16_t *name, | ||
520 | efi_guid_t *vendor, | ||
521 | unsigned long attr, | ||
522 | unsigned long data_size, void *data) | ||
523 | { | ||
524 | return efi_call_virt(set_variable, name, vendor, attr, data_size, data); | ||
525 | } | ||
526 | |||
527 | static efi_status_t virt_efi_get_next_high_mono_count (u32 *count) | ||
528 | { | ||
529 | return efi_call_virt(get_next_high_mono_count, count); | ||
530 | } | ||
531 | |||
532 | static void virt_efi_reset_system (int reset_type, efi_status_t status, | ||
533 | unsigned long data_size, | ||
534 | efi_char16_t *data) | ||
535 | { | ||
536 | efi_call_virt(reset_system, reset_type, status, data_size, data); | ||
537 | } | ||
538 | |||
539 | /* | ||
476 | * This function will switch the EFI runtime services to virtual mode. | 540 | * This function will switch the EFI runtime services to virtual mode. |
477 | * Essentially, look through the EFI memmap and map every region that | 541 | * Essentially, look through the EFI memmap and map every region that |
478 | * has the runtime attribute bit set in its memory descriptor and update | 542 | * has the runtime attribute bit set in its memory descriptor and update |
@@ -525,22 +589,15 @@ void __init efi_enter_virtual_mode(void) | |||
525 | * pointers in the runtime service table to the new virtual addresses. | 589 | * pointers in the runtime service table to the new virtual addresses. |
526 | */ | 590 | */ |
527 | 591 | ||
528 | efi.get_time = (efi_get_time_t *) efi.systab->runtime->get_time; | 592 | efi.get_time = virt_efi_get_time; |
529 | efi.set_time = (efi_set_time_t *) efi.systab->runtime->set_time; | 593 | efi.set_time = virt_efi_set_time; |
530 | efi.get_wakeup_time = (efi_get_wakeup_time_t *) | 594 | efi.get_wakeup_time = virt_efi_get_wakeup_time; |
531 | efi.systab->runtime->get_wakeup_time; | 595 | efi.set_wakeup_time = virt_efi_set_wakeup_time; |
532 | efi.set_wakeup_time = (efi_set_wakeup_time_t *) | 596 | efi.get_variable = virt_efi_get_variable; |
533 | efi.systab->runtime->set_wakeup_time; | 597 | efi.get_next_variable = virt_efi_get_next_variable; |
534 | efi.get_variable = (efi_get_variable_t *) | 598 | efi.set_variable = virt_efi_set_variable; |
535 | efi.systab->runtime->get_variable; | 599 | efi.get_next_high_mono_count = virt_efi_get_next_high_mono_count; |
536 | efi.get_next_variable = (efi_get_next_variable_t *) | 600 | efi.reset_system = virt_efi_reset_system; |
537 | efi.systab->runtime->get_next_variable; | ||
538 | efi.set_variable = (efi_set_variable_t *) | ||
539 | efi.systab->runtime->set_variable; | ||
540 | efi.get_next_high_mono_count = (efi_get_next_high_mono_count_t *) | ||
541 | efi.systab->runtime->get_next_high_mono_count; | ||
542 | efi.reset_system = (efi_reset_system_t *) | ||
543 | efi.systab->runtime->reset_system; | ||
544 | } | 601 | } |
545 | 602 | ||
546 | void __init | 603 | void __init |
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index a99b0cc92881..9197d7b361b3 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -602,6 +602,9 @@ EXPORT_SYMBOL(acpi_register_gsi); | |||
602 | 602 | ||
603 | void acpi_unregister_gsi(u32 gsi) | 603 | void acpi_unregister_gsi(u32 gsi) |
604 | { | 604 | { |
605 | if (acpi_irq_model == ACPI_IRQ_MODEL_PLATFORM) | ||
606 | return; | ||
607 | |||
605 | iosapic_unregister_intr(gsi); | 608 | iosapic_unregister_intr(gsi); |
606 | } | 609 | } |
607 | 610 | ||
diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c index 54d55e4d64f7..ce49c85c928f 100644 --- a/arch/ia64/kernel/irq.c +++ b/arch/ia64/kernel/irq.c | |||
@@ -122,6 +122,9 @@ static void migrate_irqs(void) | |||
122 | for (irq=0; irq < NR_IRQS; irq++) { | 122 | for (irq=0; irq < NR_IRQS; irq++) { |
123 | desc = irq_desc + irq; | 123 | desc = irq_desc + irq; |
124 | 124 | ||
125 | if (desc->status == IRQ_DISABLED) | ||
126 | continue; | ||
127 | |||
125 | /* | 128 | /* |
126 | * No handling for now. | 129 | * No handling for now. |
127 | * TBD: Implement a disable function so we can now | 130 | * TBD: Implement a disable function so we can now |
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c index 880d9fdd7c67..43af61438449 100644 --- a/drivers/net/smc911x.c +++ b/drivers/net/smc911x.c | |||
@@ -968,11 +968,11 @@ static void smc911x_phy_configure(struct work_struct *work) | |||
968 | * We should not be called if phy_type is zero. | 968 | * We should not be called if phy_type is zero. |
969 | */ | 969 | */ |
970 | if (lp->phy_type == 0) | 970 | if (lp->phy_type == 0) |
971 | goto smc911x_phy_configure_exit; | 971 | goto smc911x_phy_configure_exit_nolock; |
972 | 972 | ||
973 | if (smc911x_phy_reset(dev, phyaddr)) { | 973 | if (smc911x_phy_reset(dev, phyaddr)) { |
974 | printk("%s: PHY reset timed out\n", dev->name); | 974 | printk("%s: PHY reset timed out\n", dev->name); |
975 | goto smc911x_phy_configure_exit; | 975 | goto smc911x_phy_configure_exit_nolock; |
976 | } | 976 | } |
977 | spin_lock_irqsave(&lp->lock, flags); | 977 | spin_lock_irqsave(&lp->lock, flags); |
978 | 978 | ||
@@ -1041,6 +1041,7 @@ static void smc911x_phy_configure(struct work_struct *work) | |||
1041 | 1041 | ||
1042 | smc911x_phy_configure_exit: | 1042 | smc911x_phy_configure_exit: |
1043 | spin_unlock_irqrestore(&lp->lock, flags); | 1043 | spin_unlock_irqrestore(&lp->lock, flags); |
1044 | smc911x_phy_configure_exit_nolock: | ||
1044 | lp->work_pending = 0; | 1045 | lp->work_pending = 0; |
1045 | } | 1046 | } |
1046 | 1047 | ||
diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h index 4249e52a5592..6f4cf2dd2f4a 100644 --- a/drivers/scsi/qla4xxx/ql4_def.h +++ b/drivers/scsi/qla4xxx/ql4_def.h | |||
@@ -418,7 +418,6 @@ struct scsi_qla_host { | |||
418 | * concurrently. | 418 | * concurrently. |
419 | */ | 419 | */ |
420 | struct mutex mbox_sem; | 420 | struct mutex mbox_sem; |
421 | wait_queue_head_t mailbox_wait_queue; | ||
422 | 421 | ||
423 | /* temporary mailbox status registers */ | 422 | /* temporary mailbox status registers */ |
424 | volatile uint8_t mbox_status_count; | 423 | volatile uint8_t mbox_status_count; |
diff --git a/drivers/scsi/qla4xxx/ql4_glbl.h b/drivers/scsi/qla4xxx/ql4_glbl.h index 2122967bbf0b..e021eb5db2b2 100644 --- a/drivers/scsi/qla4xxx/ql4_glbl.h +++ b/drivers/scsi/qla4xxx/ql4_glbl.h | |||
@@ -76,4 +76,5 @@ int qla4xxx_process_ddb_changed(struct scsi_qla_host * ha, | |||
76 | extern int ql4xextended_error_logging; | 76 | extern int ql4xextended_error_logging; |
77 | extern int ql4xdiscoverywait; | 77 | extern int ql4xdiscoverywait; |
78 | extern int ql4xdontresethba; | 78 | extern int ql4xdontresethba; |
79 | extern int ql4_mod_unload; | ||
79 | #endif /* _QLA4x_GBL_H */ | 80 | #endif /* _QLA4x_GBL_H */ |
diff --git a/drivers/scsi/qla4xxx/ql4_init.c b/drivers/scsi/qla4xxx/ql4_init.c index cc210f297a78..b907b06d72ab 100644 --- a/drivers/scsi/qla4xxx/ql4_init.c +++ b/drivers/scsi/qla4xxx/ql4_init.c | |||
@@ -958,25 +958,25 @@ static int qla4xxx_start_firmware_from_flash(struct scsi_qla_host *ha) | |||
958 | return status; | 958 | return status; |
959 | } | 959 | } |
960 | 960 | ||
961 | int ql4xxx_lock_drvr_wait(struct scsi_qla_host *a) | 961 | int ql4xxx_lock_drvr_wait(struct scsi_qla_host *ha) |
962 | { | 962 | { |
963 | #define QL4_LOCK_DRVR_WAIT 300 | 963 | #define QL4_LOCK_DRVR_WAIT 30 |
964 | #define QL4_LOCK_DRVR_SLEEP 100 | 964 | #define QL4_LOCK_DRVR_SLEEP 1 |
965 | 965 | ||
966 | int drvr_wait = QL4_LOCK_DRVR_WAIT; | 966 | int drvr_wait = QL4_LOCK_DRVR_WAIT; |
967 | while (drvr_wait) { | 967 | while (drvr_wait) { |
968 | if (ql4xxx_lock_drvr(a) == 0) { | 968 | if (ql4xxx_lock_drvr(ha) == 0) { |
969 | msleep(QL4_LOCK_DRVR_SLEEP); | 969 | ssleep(QL4_LOCK_DRVR_SLEEP); |
970 | if (drvr_wait) { | 970 | if (drvr_wait) { |
971 | DEBUG2(printk("scsi%ld: %s: Waiting for " | 971 | DEBUG2(printk("scsi%ld: %s: Waiting for " |
972 | "Global Init Semaphore...n", | 972 | "Global Init Semaphore(%d)...n", |
973 | a->host_no, | 973 | ha->host_no, |
974 | __func__)); | 974 | __func__, drvr_wait)); |
975 | } | 975 | } |
976 | drvr_wait -= QL4_LOCK_DRVR_SLEEP; | 976 | drvr_wait -= QL4_LOCK_DRVR_SLEEP; |
977 | } else { | 977 | } else { |
978 | DEBUG2(printk("scsi%ld: %s: Global Init Semaphore " | 978 | DEBUG2(printk("scsi%ld: %s: Global Init Semaphore " |
979 | "acquired.n", a->host_no, __func__)); | 979 | "acquired.n", ha->host_no, __func__)); |
980 | return QLA_SUCCESS; | 980 | return QLA_SUCCESS; |
981 | } | 981 | } |
982 | } | 982 | } |
diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c index ef975e0dc87f..35b9e36a0e8d 100644 --- a/drivers/scsi/qla4xxx/ql4_isr.c +++ b/drivers/scsi/qla4xxx/ql4_isr.c | |||
@@ -433,7 +433,6 @@ static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha, | |||
433 | readl(&ha->reg->mailbox[i]); | 433 | readl(&ha->reg->mailbox[i]); |
434 | 434 | ||
435 | set_bit(AF_MBOX_COMMAND_DONE, &ha->flags); | 435 | set_bit(AF_MBOX_COMMAND_DONE, &ha->flags); |
436 | wake_up(&ha->mailbox_wait_queue); | ||
437 | } | 436 | } |
438 | } else if (mbox_status >> 12 == MBOX_ASYNC_EVENT_STATUS) { | 437 | } else if (mbox_status >> 12 == MBOX_ASYNC_EVENT_STATUS) { |
439 | /* Immediately process the AENs that don't require much work. | 438 | /* Immediately process the AENs that don't require much work. |
@@ -686,7 +685,8 @@ irqreturn_t qla4xxx_intr_handler(int irq, void *dev_id) | |||
686 | &ha->reg->ctrl_status); | 685 | &ha->reg->ctrl_status); |
687 | readl(&ha->reg->ctrl_status); | 686 | readl(&ha->reg->ctrl_status); |
688 | 687 | ||
689 | set_bit(DPC_RESET_HA_INTR, &ha->dpc_flags); | 688 | if (!ql4_mod_unload) |
689 | set_bit(DPC_RESET_HA_INTR, &ha->dpc_flags); | ||
690 | 690 | ||
691 | break; | 691 | break; |
692 | } else if (intr_status & INTR_PENDING) { | 692 | } else if (intr_status & INTR_PENDING) { |
diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c index b721dc5dd711..7f28657eef3f 100644 --- a/drivers/scsi/qla4xxx/ql4_mbx.c +++ b/drivers/scsi/qla4xxx/ql4_mbx.c | |||
@@ -29,18 +29,30 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount, | |||
29 | u_long wait_count; | 29 | u_long wait_count; |
30 | uint32_t intr_status; | 30 | uint32_t intr_status; |
31 | unsigned long flags = 0; | 31 | unsigned long flags = 0; |
32 | DECLARE_WAITQUEUE(wait, current); | ||
33 | |||
34 | mutex_lock(&ha->mbox_sem); | ||
35 | |||
36 | /* Mailbox code active */ | ||
37 | set_bit(AF_MBOX_COMMAND, &ha->flags); | ||
38 | 32 | ||
39 | /* Make sure that pointers are valid */ | 33 | /* Make sure that pointers are valid */ |
40 | if (!mbx_cmd || !mbx_sts) { | 34 | if (!mbx_cmd || !mbx_sts) { |
41 | DEBUG2(printk("scsi%ld: %s: Invalid mbx_cmd or mbx_sts " | 35 | DEBUG2(printk("scsi%ld: %s: Invalid mbx_cmd or mbx_sts " |
42 | "pointer\n", ha->host_no, __func__)); | 36 | "pointer\n", ha->host_no, __func__)); |
43 | goto mbox_exit; | 37 | return status; |
38 | } | ||
39 | /* Mailbox code active */ | ||
40 | wait_count = MBOX_TOV * 100; | ||
41 | |||
42 | while (wait_count--) { | ||
43 | mutex_lock(&ha->mbox_sem); | ||
44 | if (!test_bit(AF_MBOX_COMMAND, &ha->flags)) { | ||
45 | set_bit(AF_MBOX_COMMAND, &ha->flags); | ||
46 | mutex_unlock(&ha->mbox_sem); | ||
47 | break; | ||
48 | } | ||
49 | mutex_unlock(&ha->mbox_sem); | ||
50 | if (!wait_count) { | ||
51 | DEBUG2(printk("scsi%ld: %s: mbox_sem failed\n", | ||
52 | ha->host_no, __func__)); | ||
53 | return status; | ||
54 | } | ||
55 | msleep(10); | ||
44 | } | 56 | } |
45 | 57 | ||
46 | /* To prevent overwriting mailbox registers for a command that has | 58 | /* To prevent overwriting mailbox registers for a command that has |
@@ -73,8 +85,6 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount, | |||
73 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | 85 | spin_unlock_irqrestore(&ha->hardware_lock, flags); |
74 | 86 | ||
75 | /* Wait for completion */ | 87 | /* Wait for completion */ |
76 | set_current_state(TASK_UNINTERRUPTIBLE); | ||
77 | add_wait_queue(&ha->mailbox_wait_queue, &wait); | ||
78 | 88 | ||
79 | /* | 89 | /* |
80 | * If we don't want status, don't wait for the mailbox command to | 90 | * If we don't want status, don't wait for the mailbox command to |
@@ -83,8 +93,6 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount, | |||
83 | */ | 93 | */ |
84 | if (outCount == 0) { | 94 | if (outCount == 0) { |
85 | status = QLA_SUCCESS; | 95 | status = QLA_SUCCESS; |
86 | set_current_state(TASK_RUNNING); | ||
87 | remove_wait_queue(&ha->mailbox_wait_queue, &wait); | ||
88 | goto mbox_exit; | 96 | goto mbox_exit; |
89 | } | 97 | } |
90 | /* Wait for command to complete */ | 98 | /* Wait for command to complete */ |
@@ -108,8 +116,6 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount, | |||
108 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | 116 | spin_unlock_irqrestore(&ha->hardware_lock, flags); |
109 | msleep(10); | 117 | msleep(10); |
110 | } | 118 | } |
111 | set_current_state(TASK_RUNNING); | ||
112 | remove_wait_queue(&ha->mailbox_wait_queue, &wait); | ||
113 | 119 | ||
114 | /* Check for mailbox timeout. */ | 120 | /* Check for mailbox timeout. */ |
115 | if (!test_bit(AF_MBOX_COMMAND_DONE, &ha->flags)) { | 121 | if (!test_bit(AF_MBOX_COMMAND_DONE, &ha->flags)) { |
@@ -155,9 +161,10 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount, | |||
155 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | 161 | spin_unlock_irqrestore(&ha->hardware_lock, flags); |
156 | 162 | ||
157 | mbox_exit: | 163 | mbox_exit: |
164 | mutex_lock(&ha->mbox_sem); | ||
158 | clear_bit(AF_MBOX_COMMAND, &ha->flags); | 165 | clear_bit(AF_MBOX_COMMAND, &ha->flags); |
159 | clear_bit(AF_MBOX_COMMAND_DONE, &ha->flags); | ||
160 | mutex_unlock(&ha->mbox_sem); | 166 | mutex_unlock(&ha->mbox_sem); |
167 | clear_bit(AF_MBOX_COMMAND_DONE, &ha->flags); | ||
161 | 168 | ||
162 | return status; | 169 | return status; |
163 | } | 170 | } |
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 9ef693c8809a..81fb7bd44f01 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c | |||
@@ -40,6 +40,8 @@ MODULE_PARM_DESC(ql4xextended_error_logging, | |||
40 | "Option to enable extended error logging, " | 40 | "Option to enable extended error logging, " |
41 | "Default is 0 - no logging, 1 - debug logging"); | 41 | "Default is 0 - no logging, 1 - debug logging"); |
42 | 42 | ||
43 | int ql4_mod_unload = 0; | ||
44 | |||
43 | /* | 45 | /* |
44 | * SCSI host template entry points | 46 | * SCSI host template entry points |
45 | */ | 47 | */ |
@@ -422,6 +424,9 @@ static int qla4xxx_queuecommand(struct scsi_cmnd *cmd, | |||
422 | goto qc_host_busy; | 424 | goto qc_host_busy; |
423 | } | 425 | } |
424 | 426 | ||
427 | if (test_bit(DPC_RESET_HA_INTR, &ha->dpc_flags)) | ||
428 | goto qc_host_busy; | ||
429 | |||
425 | spin_unlock_irq(ha->host->host_lock); | 430 | spin_unlock_irq(ha->host->host_lock); |
426 | 431 | ||
427 | srb = qla4xxx_get_new_srb(ha, ddb_entry, cmd, done); | 432 | srb = qla4xxx_get_new_srb(ha, ddb_entry, cmd, done); |
@@ -707,16 +712,12 @@ static int qla4xxx_cmd_wait(struct scsi_qla_host *ha) | |||
707 | return stat; | 712 | return stat; |
708 | } | 713 | } |
709 | 714 | ||
710 | /** | 715 | static void qla4xxx_hw_reset(struct scsi_qla_host *ha) |
711 | * qla4xxx_soft_reset - performs soft reset. | ||
712 | * @ha: Pointer to host adapter structure. | ||
713 | **/ | ||
714 | int qla4xxx_soft_reset(struct scsi_qla_host *ha) | ||
715 | { | 716 | { |
716 | uint32_t max_wait_time; | ||
717 | unsigned long flags = 0; | ||
718 | int status = QLA_ERROR; | ||
719 | uint32_t ctrl_status; | 717 | uint32_t ctrl_status; |
718 | unsigned long flags = 0; | ||
719 | |||
720 | DEBUG2(printk(KERN_ERR "scsi%ld: %s\n", ha->host_no, __func__)); | ||
720 | 721 | ||
721 | spin_lock_irqsave(&ha->hardware_lock, flags); | 722 | spin_lock_irqsave(&ha->hardware_lock, flags); |
722 | 723 | ||
@@ -733,6 +734,20 @@ int qla4xxx_soft_reset(struct scsi_qla_host *ha) | |||
733 | readl(&ha->reg->ctrl_status); | 734 | readl(&ha->reg->ctrl_status); |
734 | 735 | ||
735 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | 736 | spin_unlock_irqrestore(&ha->hardware_lock, flags); |
737 | } | ||
738 | |||
739 | /** | ||
740 | * qla4xxx_soft_reset - performs soft reset. | ||
741 | * @ha: Pointer to host adapter structure. | ||
742 | **/ | ||
743 | int qla4xxx_soft_reset(struct scsi_qla_host *ha) | ||
744 | { | ||
745 | uint32_t max_wait_time; | ||
746 | unsigned long flags = 0; | ||
747 | int status = QLA_ERROR; | ||
748 | uint32_t ctrl_status; | ||
749 | |||
750 | qla4xxx_hw_reset(ha); | ||
736 | 751 | ||
737 | /* Wait until the Network Reset Intr bit is cleared */ | 752 | /* Wait until the Network Reset Intr bit is cleared */ |
738 | max_wait_time = RESET_INTR_TOV; | 753 | max_wait_time = RESET_INTR_TOV; |
@@ -966,10 +981,12 @@ static void qla4xxx_do_dpc(struct work_struct *work) | |||
966 | struct scsi_qla_host *ha = | 981 | struct scsi_qla_host *ha = |
967 | container_of(work, struct scsi_qla_host, dpc_work); | 982 | container_of(work, struct scsi_qla_host, dpc_work); |
968 | struct ddb_entry *ddb_entry, *dtemp; | 983 | struct ddb_entry *ddb_entry, *dtemp; |
984 | int status = QLA_ERROR; | ||
969 | 985 | ||
970 | DEBUG2(printk("scsi%ld: %s: DPC handler waking up." | 986 | DEBUG2(printk("scsi%ld: %s: DPC handler waking up." |
971 | "flags = 0x%08lx, dpc_flags = 0x%08lx\n", | 987 | "flags = 0x%08lx, dpc_flags = 0x%08lx ctrl_stat = 0x%08x\n", |
972 | ha->host_no, __func__, ha->flags, ha->dpc_flags)); | 988 | ha->host_no, __func__, ha->flags, ha->dpc_flags, |
989 | readw(&ha->reg->ctrl_status))); | ||
973 | 990 | ||
974 | /* Initialization not yet finished. Don't do anything yet. */ | 991 | /* Initialization not yet finished. Don't do anything yet. */ |
975 | if (!test_bit(AF_INIT_DONE, &ha->flags)) | 992 | if (!test_bit(AF_INIT_DONE, &ha->flags)) |
@@ -983,31 +1000,28 @@ static void qla4xxx_do_dpc(struct work_struct *work) | |||
983 | test_bit(DPC_RESET_HA, &ha->dpc_flags)) | 1000 | test_bit(DPC_RESET_HA, &ha->dpc_flags)) |
984 | qla4xxx_recover_adapter(ha, PRESERVE_DDB_LIST); | 1001 | qla4xxx_recover_adapter(ha, PRESERVE_DDB_LIST); |
985 | 1002 | ||
986 | if (test_and_clear_bit(DPC_RESET_HA_INTR, &ha->dpc_flags)) { | 1003 | if (test_bit(DPC_RESET_HA_INTR, &ha->dpc_flags)) { |
987 | uint8_t wait_time = RESET_INTR_TOV; | 1004 | uint8_t wait_time = RESET_INTR_TOV; |
988 | unsigned long flags = 0; | ||
989 | |||
990 | qla4xxx_flush_active_srbs(ha); | ||
991 | 1005 | ||
992 | spin_lock_irqsave(&ha->hardware_lock, flags); | ||
993 | while ((readw(&ha->reg->ctrl_status) & | 1006 | while ((readw(&ha->reg->ctrl_status) & |
994 | (CSR_SOFT_RESET | CSR_FORCE_SOFT_RESET)) != 0) { | 1007 | (CSR_SOFT_RESET | CSR_FORCE_SOFT_RESET)) != 0) { |
995 | if (--wait_time == 0) | 1008 | if (--wait_time == 0) |
996 | break; | 1009 | break; |
997 | |||
998 | spin_unlock_irqrestore(&ha->hardware_lock, | ||
999 | flags); | ||
1000 | |||
1001 | msleep(1000); | 1010 | msleep(1000); |
1002 | |||
1003 | spin_lock_irqsave(&ha->hardware_lock, flags); | ||
1004 | } | 1011 | } |
1005 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | ||
1006 | |||
1007 | if (wait_time == 0) | 1012 | if (wait_time == 0) |
1008 | DEBUG2(printk("scsi%ld: %s: SR|FSR " | 1013 | DEBUG2(printk("scsi%ld: %s: SR|FSR " |
1009 | "bit not cleared-- resetting\n", | 1014 | "bit not cleared-- resetting\n", |
1010 | ha->host_no, __func__)); | 1015 | ha->host_no, __func__)); |
1016 | qla4xxx_flush_active_srbs(ha); | ||
1017 | if (ql4xxx_lock_drvr_wait(ha) == QLA_SUCCESS) { | ||
1018 | qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS); | ||
1019 | status = qla4xxx_initialize_adapter(ha, | ||
1020 | PRESERVE_DDB_LIST); | ||
1021 | } | ||
1022 | clear_bit(DPC_RESET_HA_INTR, &ha->dpc_flags); | ||
1023 | if (status == QLA_SUCCESS) | ||
1024 | qla4xxx_enable_intrs(ha); | ||
1011 | } | 1025 | } |
1012 | } | 1026 | } |
1013 | 1027 | ||
@@ -1062,7 +1076,7 @@ static void qla4xxx_free_adapter(struct scsi_qla_host *ha) | |||
1062 | 1076 | ||
1063 | /* Issue Soft Reset to put firmware in unknown state */ | 1077 | /* Issue Soft Reset to put firmware in unknown state */ |
1064 | if (ql4xxx_lock_drvr_wait(ha) == QLA_SUCCESS) | 1078 | if (ql4xxx_lock_drvr_wait(ha) == QLA_SUCCESS) |
1065 | qla4xxx_soft_reset(ha); | 1079 | qla4xxx_hw_reset(ha); |
1066 | 1080 | ||
1067 | /* Remove timer thread, if present */ | 1081 | /* Remove timer thread, if present */ |
1068 | if (ha->timer_active) | 1082 | if (ha->timer_active) |
@@ -1198,7 +1212,6 @@ static int __devinit qla4xxx_probe_adapter(struct pci_dev *pdev, | |||
1198 | INIT_LIST_HEAD(&ha->free_srb_q); | 1212 | INIT_LIST_HEAD(&ha->free_srb_q); |
1199 | 1213 | ||
1200 | mutex_init(&ha->mbox_sem); | 1214 | mutex_init(&ha->mbox_sem); |
1201 | init_waitqueue_head(&ha->mailbox_wait_queue); | ||
1202 | 1215 | ||
1203 | spin_lock_init(&ha->hardware_lock); | 1216 | spin_lock_init(&ha->hardware_lock); |
1204 | 1217 | ||
@@ -1665,6 +1678,7 @@ no_srp_cache: | |||
1665 | 1678 | ||
1666 | static void __exit qla4xxx_module_exit(void) | 1679 | static void __exit qla4xxx_module_exit(void) |
1667 | { | 1680 | { |
1681 | ql4_mod_unload = 1; | ||
1668 | pci_unregister_driver(&qla4xxx_pci_driver); | 1682 | pci_unregister_driver(&qla4xxx_pci_driver); |
1669 | iscsi_unregister_transport(&qla4xxx_iscsi_transport); | 1683 | iscsi_unregister_transport(&qla4xxx_iscsi_transport); |
1670 | kmem_cache_destroy(srb_cachep); | 1684 | kmem_cache_destroy(srb_cachep); |
diff --git a/drivers/scsi/qla4xxx/ql4_version.h b/drivers/scsi/qla4xxx/ql4_version.h index 454e19c8ad68..e5183a697d1f 100644 --- a/drivers/scsi/qla4xxx/ql4_version.h +++ b/drivers/scsi/qla4xxx/ql4_version.h | |||
@@ -5,4 +5,4 @@ | |||
5 | * See LICENSE.qla4xxx for copyright and licensing details. | 5 | * See LICENSE.qla4xxx for copyright and licensing details. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #define QLA4XXX_DRIVER_VERSION "5.00.07-k" | 8 | #define QLA4XXX_DRIVER_VERSION "5.00.07-k1" |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index b83d03c4deef..96b7cbd746a8 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
@@ -1453,6 +1453,12 @@ struct scsi_device *__scsi_add_device(struct Scsi_Host *shost, uint channel, | |||
1453 | struct device *parent = &shost->shost_gendev; | 1453 | struct device *parent = &shost->shost_gendev; |
1454 | struct scsi_target *starget; | 1454 | struct scsi_target *starget; |
1455 | 1455 | ||
1456 | if (strncmp(scsi_scan_type, "none", 4) == 0) | ||
1457 | return ERR_PTR(-ENODEV); | ||
1458 | |||
1459 | if (!shost->async_scan) | ||
1460 | scsi_complete_async_scans(); | ||
1461 | |||
1456 | starget = scsi_alloc_target(parent, channel, id); | 1462 | starget = scsi_alloc_target(parent, channel, id); |
1457 | if (!starget) | 1463 | if (!starget) |
1458 | return ERR_PTR(-ENOMEM); | 1464 | return ERR_PTR(-ENOMEM); |
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 978bfc1e0c6a..b781a90d6699 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
@@ -1647,16 +1647,6 @@ static int sd_probe(struct device *dev) | |||
1647 | if (error) | 1647 | if (error) |
1648 | goto out_put; | 1648 | goto out_put; |
1649 | 1649 | ||
1650 | class_device_initialize(&sdkp->cdev); | ||
1651 | sdkp->cdev.dev = &sdp->sdev_gendev; | ||
1652 | sdkp->cdev.class = &sd_disk_class; | ||
1653 | strncpy(sdkp->cdev.class_id, sdp->sdev_gendev.bus_id, BUS_ID_SIZE); | ||
1654 | |||
1655 | if (class_device_add(&sdkp->cdev)) | ||
1656 | goto out_put; | ||
1657 | |||
1658 | get_device(&sdp->sdev_gendev); | ||
1659 | |||
1660 | sdkp->device = sdp; | 1650 | sdkp->device = sdp; |
1661 | sdkp->driver = &sd_template; | 1651 | sdkp->driver = &sd_template; |
1662 | sdkp->disk = gd; | 1652 | sdkp->disk = gd; |
@@ -1670,6 +1660,16 @@ static int sd_probe(struct device *dev) | |||
1670 | sdp->timeout = SD_MOD_TIMEOUT; | 1660 | sdp->timeout = SD_MOD_TIMEOUT; |
1671 | } | 1661 | } |
1672 | 1662 | ||
1663 | class_device_initialize(&sdkp->cdev); | ||
1664 | sdkp->cdev.dev = &sdp->sdev_gendev; | ||
1665 | sdkp->cdev.class = &sd_disk_class; | ||
1666 | strncpy(sdkp->cdev.class_id, sdp->sdev_gendev.bus_id, BUS_ID_SIZE); | ||
1667 | |||
1668 | if (class_device_add(&sdkp->cdev)) | ||
1669 | goto out_put; | ||
1670 | |||
1671 | get_device(&sdp->sdev_gendev); | ||
1672 | |||
1673 | gd->major = sd_major((index & 0xf0) >> 4); | 1673 | gd->major = sd_major((index & 0xf0) >> 4); |
1674 | gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00); | 1674 | gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00); |
1675 | gd->minors = 16; | 1675 | gd->minors = 16; |
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index e016e0906e1a..488ec7948a57 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c | |||
@@ -2816,15 +2816,18 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon | |||
2816 | 2816 | ||
2817 | if (cmd_in == MTWEOF && | 2817 | if (cmd_in == MTWEOF && |
2818 | cmdstatp->have_sense && | 2818 | cmdstatp->have_sense && |
2819 | (cmdstatp->flags & SENSE_EOM) && | 2819 | (cmdstatp->flags & SENSE_EOM)) { |
2820 | (cmdstatp->sense_hdr.sense_key == NO_SENSE || | 2820 | if (cmdstatp->sense_hdr.sense_key == NO_SENSE || |
2821 | cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) && | 2821 | cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) { |
2822 | undone == 0) { | 2822 | ioctl_result = 0; /* EOF(s) written successfully at EOM */ |
2823 | ioctl_result = 0; /* EOF written successfully at EOM */ | 2823 | STps->eof = ST_NOEOF; |
2824 | if (fileno >= 0) | 2824 | } else { /* Writing EOF(s) failed */ |
2825 | fileno++; | 2825 | if (fileno >= 0) |
2826 | fileno -= undone; | ||
2827 | if (undone < arg) | ||
2828 | STps->eof = ST_NOEOF; | ||
2829 | } | ||
2826 | STps->drv_file = fileno; | 2830 | STps->drv_file = fileno; |
2827 | STps->eof = ST_NOEOF; | ||
2828 | } else if ((cmd_in == MTFSF) || (cmd_in == MTFSFM)) { | 2831 | } else if ((cmd_in == MTFSF) || (cmd_in == MTFSFM)) { |
2829 | if (fileno >= 0) | 2832 | if (fileno >= 0) |
2830 | STps->drv_file = fileno - undone; | 2833 | STps->drv_file = fileno - undone; |
diff --git a/drivers/usb/net/rtl8150.c b/drivers/usb/net/rtl8150.c index e0eecda78ec1..670262a38a0f 100644 --- a/drivers/usb/net/rtl8150.c +++ b/drivers/usb/net/rtl8150.c | |||
@@ -284,7 +284,8 @@ static int write_mii_word(rtl8150_t * dev, u8 phy, __u8 indx, u16 reg) | |||
284 | u8 data[3], tmp; | 284 | u8 data[3], tmp; |
285 | 285 | ||
286 | data[0] = phy; | 286 | data[0] = phy; |
287 | *(data + 1) = cpu_to_le16p(®); | 287 | data[1] = reg & 0xff; |
288 | data[2] = (reg >> 8) & 0xff; | ||
288 | tmp = indx | PHY_WRITE | PHY_GO; | 289 | tmp = indx | PHY_WRITE | PHY_GO; |
289 | i = 0; | 290 | i = 0; |
290 | 291 | ||
@@ -298,17 +298,23 @@ static void wait_for_all_aios(struct kioctx *ctx) | |||
298 | struct task_struct *tsk = current; | 298 | struct task_struct *tsk = current; |
299 | DECLARE_WAITQUEUE(wait, tsk); | 299 | DECLARE_WAITQUEUE(wait, tsk); |
300 | 300 | ||
301 | spin_lock_irq(&ctx->ctx_lock); | ||
301 | if (!ctx->reqs_active) | 302 | if (!ctx->reqs_active) |
302 | return; | 303 | goto out; |
303 | 304 | ||
304 | add_wait_queue(&ctx->wait, &wait); | 305 | add_wait_queue(&ctx->wait, &wait); |
305 | set_task_state(tsk, TASK_UNINTERRUPTIBLE); | 306 | set_task_state(tsk, TASK_UNINTERRUPTIBLE); |
306 | while (ctx->reqs_active) { | 307 | while (ctx->reqs_active) { |
308 | spin_unlock_irq(&ctx->ctx_lock); | ||
307 | schedule(); | 309 | schedule(); |
308 | set_task_state(tsk, TASK_UNINTERRUPTIBLE); | 310 | set_task_state(tsk, TASK_UNINTERRUPTIBLE); |
311 | spin_lock_irq(&ctx->ctx_lock); | ||
309 | } | 312 | } |
310 | __set_task_state(tsk, TASK_RUNNING); | 313 | __set_task_state(tsk, TASK_RUNNING); |
311 | remove_wait_queue(&ctx->wait, &wait); | 314 | remove_wait_queue(&ctx->wait, &wait); |
315 | |||
316 | out: | ||
317 | spin_unlock_irq(&ctx->ctx_lock); | ||
312 | } | 318 | } |
313 | 319 | ||
314 | /* wait_on_sync_kiocb: | 320 | /* wait_on_sync_kiocb: |
@@ -424,7 +430,6 @@ static struct kiocb fastcall *__aio_get_req(struct kioctx *ctx) | |||
424 | ring = kmap_atomic(ctx->ring_info.ring_pages[0], KM_USER0); | 430 | ring = kmap_atomic(ctx->ring_info.ring_pages[0], KM_USER0); |
425 | if (ctx->reqs_active < aio_ring_avail(&ctx->ring_info, ring)) { | 431 | if (ctx->reqs_active < aio_ring_avail(&ctx->ring_info, ring)) { |
426 | list_add(&req->ki_list, &ctx->active_reqs); | 432 | list_add(&req->ki_list, &ctx->active_reqs); |
427 | get_ioctx(ctx); | ||
428 | ctx->reqs_active++; | 433 | ctx->reqs_active++; |
429 | okay = 1; | 434 | okay = 1; |
430 | } | 435 | } |
@@ -536,8 +541,6 @@ int fastcall aio_put_req(struct kiocb *req) | |||
536 | spin_lock_irq(&ctx->ctx_lock); | 541 | spin_lock_irq(&ctx->ctx_lock); |
537 | ret = __aio_put_req(ctx, req); | 542 | ret = __aio_put_req(ctx, req); |
538 | spin_unlock_irq(&ctx->ctx_lock); | 543 | spin_unlock_irq(&ctx->ctx_lock); |
539 | if (ret) | ||
540 | put_ioctx(ctx); | ||
541 | return ret; | 544 | return ret; |
542 | } | 545 | } |
543 | 546 | ||
@@ -779,8 +782,7 @@ static int __aio_run_iocbs(struct kioctx *ctx) | |||
779 | */ | 782 | */ |
780 | iocb->ki_users++; /* grab extra reference */ | 783 | iocb->ki_users++; /* grab extra reference */ |
781 | aio_run_iocb(iocb); | 784 | aio_run_iocb(iocb); |
782 | if (__aio_put_req(ctx, iocb)) /* drop extra ref */ | 785 | __aio_put_req(ctx, iocb); |
783 | put_ioctx(ctx); | ||
784 | } | 786 | } |
785 | if (!list_empty(&ctx->run_list)) | 787 | if (!list_empty(&ctx->run_list)) |
786 | return 1; | 788 | return 1; |
@@ -997,14 +999,10 @@ put_rq: | |||
997 | /* everything turned out well, dispose of the aiocb. */ | 999 | /* everything turned out well, dispose of the aiocb. */ |
998 | ret = __aio_put_req(ctx, iocb); | 1000 | ret = __aio_put_req(ctx, iocb); |
999 | 1001 | ||
1000 | spin_unlock_irqrestore(&ctx->ctx_lock, flags); | ||
1001 | |||
1002 | if (waitqueue_active(&ctx->wait)) | 1002 | if (waitqueue_active(&ctx->wait)) |
1003 | wake_up(&ctx->wait); | 1003 | wake_up(&ctx->wait); |
1004 | 1004 | ||
1005 | if (ret) | 1005 | spin_unlock_irqrestore(&ctx->ctx_lock, flags); |
1006 | put_ioctx(ctx); | ||
1007 | |||
1008 | return ret; | 1006 | return ret; |
1009 | } | 1007 | } |
1010 | 1008 | ||
diff --git a/fs/block_dev.c b/fs/block_dev.c index d9bdf2b3ade2..fc7028b685f2 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
@@ -129,6 +129,46 @@ blkdev_get_block(struct inode *inode, sector_t iblock, | |||
129 | return 0; | 129 | return 0; |
130 | } | 130 | } |
131 | 131 | ||
132 | static int | ||
133 | blkdev_get_blocks(struct inode *inode, sector_t iblock, | ||
134 | struct buffer_head *bh, int create) | ||
135 | { | ||
136 | sector_t end_block = max_block(I_BDEV(inode)); | ||
137 | unsigned long max_blocks = bh->b_size >> inode->i_blkbits; | ||
138 | |||
139 | if ((iblock + max_blocks) > end_block) { | ||
140 | max_blocks = end_block - iblock; | ||
141 | if ((long)max_blocks <= 0) { | ||
142 | if (create) | ||
143 | return -EIO; /* write fully beyond EOF */ | ||
144 | /* | ||
145 | * It is a read which is fully beyond EOF. We return | ||
146 | * a !buffer_mapped buffer | ||
147 | */ | ||
148 | max_blocks = 0; | ||
149 | } | ||
150 | } | ||
151 | |||
152 | bh->b_bdev = I_BDEV(inode); | ||
153 | bh->b_blocknr = iblock; | ||
154 | bh->b_size = max_blocks << inode->i_blkbits; | ||
155 | if (max_blocks) | ||
156 | set_buffer_mapped(bh); | ||
157 | return 0; | ||
158 | } | ||
159 | |||
160 | static ssize_t | ||
161 | blkdev_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, | ||
162 | loff_t offset, unsigned long nr_segs) | ||
163 | { | ||
164 | struct file *file = iocb->ki_filp; | ||
165 | struct inode *inode = file->f_mapping->host; | ||
166 | |||
167 | return blockdev_direct_IO_no_locking(rw, iocb, inode, I_BDEV(inode), | ||
168 | iov, offset, nr_segs, blkdev_get_blocks, NULL); | ||
169 | } | ||
170 | |||
171 | #if 0 | ||
132 | static int blk_end_aio(struct bio *bio, unsigned int bytes_done, int error) | 172 | static int blk_end_aio(struct bio *bio, unsigned int bytes_done, int error) |
133 | { | 173 | { |
134 | struct kiocb *iocb = bio->bi_private; | 174 | struct kiocb *iocb = bio->bi_private; |
@@ -323,6 +363,7 @@ backout: | |||
323 | return PTR_ERR(page); | 363 | return PTR_ERR(page); |
324 | goto completion; | 364 | goto completion; |
325 | } | 365 | } |
366 | #endif | ||
326 | 367 | ||
327 | static int blkdev_writepage(struct page *page, struct writeback_control *wbc) | 368 | static int blkdev_writepage(struct page *page, struct writeback_control *wbc) |
328 | { | 369 | { |
diff --git a/include/asm-alpha/unistd.h b/include/asm-alpha/unistd.h index 84313d14e780..e58a427012dd 100644 --- a/include/asm-alpha/unistd.h +++ b/include/asm-alpha/unistd.h | |||
@@ -342,9 +342,14 @@ | |||
342 | #define __NR_io_cancel 402 | 342 | #define __NR_io_cancel 402 |
343 | #define __NR_exit_group 405 | 343 | #define __NR_exit_group 405 |
344 | #define __NR_lookup_dcookie 406 | 344 | #define __NR_lookup_dcookie 406 |
345 | #define __NR_sys_epoll_create 407 | 345 | #define __NR_epoll_create 407 |
346 | #define __NR_sys_epoll_ctl 408 | 346 | #define __NR_epoll_ctl 408 |
347 | #define __NR_sys_epoll_wait 409 | 347 | #define __NR_epoll_wait 409 |
348 | /* Feb 2007: These three sys_epoll defines shouldn't be here but culling | ||
349 | * them would break userspace apps ... we'll kill them off in 2010 :) */ | ||
350 | #define __NR_sys_epoll_create __NR_epoll_create | ||
351 | #define __NR_sys_epoll_ctl __NR_epoll_ctl | ||
352 | #define __NR_sys_epoll_wait __NR_epoll_wait | ||
348 | #define __NR_remap_file_pages 410 | 353 | #define __NR_remap_file_pages 410 |
349 | #define __NR_set_tid_address 411 | 354 | #define __NR_set_tid_address 411 |
350 | #define __NR_restart_syscall 412 | 355 | #define __NR_restart_syscall 412 |
diff --git a/include/asm-x86_64/dma-mapping.h b/include/asm-x86_64/dma-mapping.h index be9ec6890723..49dbab09ef2b 100644 --- a/include/asm-x86_64/dma-mapping.h +++ b/include/asm-x86_64/dma-mapping.h | |||
@@ -63,6 +63,9 @@ static inline int dma_mapping_error(dma_addr_t dma_addr) | |||
63 | return (dma_addr == bad_dma_address); | 63 | return (dma_addr == bad_dma_address); |
64 | } | 64 | } |
65 | 65 | ||
66 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | ||
67 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | ||
68 | |||
66 | extern void *dma_alloc_coherent(struct device *dev, size_t size, | 69 | extern void *dma_alloc_coherent(struct device *dev, size_t size, |
67 | dma_addr_t *dma_handle, gfp_t gfp); | 70 | dma_addr_t *dma_handle, gfp_t gfp); |
68 | extern void dma_free_coherent(struct device *dev, size_t size, void *vaddr, | 71 | extern void dma_free_coherent(struct device *dev, size_t size, void *vaddr, |
diff --git a/net/ipv4/netfilter/ip_conntrack_netlink.c b/net/ipv4/netfilter/ip_conntrack_netlink.c index 6f31fad9be13..7f70b0886b83 100644 --- a/net/ipv4/netfilter/ip_conntrack_netlink.c +++ b/net/ipv4/netfilter/ip_conntrack_netlink.c | |||
@@ -374,9 +374,11 @@ static int ctnetlink_conntrack_event(struct notifier_block *this, | |||
374 | && ctnetlink_dump_helpinfo(skb, ct) < 0) | 374 | && ctnetlink_dump_helpinfo(skb, ct) < 0) |
375 | goto nfattr_failure; | 375 | goto nfattr_failure; |
376 | 376 | ||
377 | #ifdef CONFIG_IP_NF_CONNTRACK_MARK | ||
377 | if ((events & IPCT_MARK || ct->mark) | 378 | if ((events & IPCT_MARK || ct->mark) |
378 | && ctnetlink_dump_mark(skb, ct) < 0) | 379 | && ctnetlink_dump_mark(skb, ct) < 0) |
379 | goto nfattr_failure; | 380 | goto nfattr_failure; |
381 | #endif | ||
380 | 382 | ||
381 | if (events & IPCT_COUNTER_FILLING && | 383 | if (events & IPCT_COUNTER_FILLING && |
382 | (ctnetlink_dump_counters(skb, ct, IP_CT_DIR_ORIGINAL) < 0 || | 384 | (ctnetlink_dump_counters(skb, ct, IP_CT_DIR_ORIGINAL) < 0 || |
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig index 2a2bcb303bfa..80107d4909c5 100644 --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig | |||
@@ -165,7 +165,7 @@ config NF_CONNTRACK_FTP | |||
165 | 165 | ||
166 | config NF_CONNTRACK_H323 | 166 | config NF_CONNTRACK_H323 |
167 | tristate "H.323 protocol support (EXPERIMENTAL)" | 167 | tristate "H.323 protocol support (EXPERIMENTAL)" |
168 | depends on EXPERIMENTAL && NF_CONNTRACK | 168 | depends on EXPERIMENTAL && NF_CONNTRACK && (IPV6 || IPV6=n) |
169 | help | 169 | help |
170 | H.323 is a VoIP signalling protocol from ITU-T. As one of the most | 170 | H.323 is a VoIP signalling protocol from ITU-T. As one of the most |
171 | important VoIP protocols, it is widely used by voice hardware and | 171 | important VoIP protocols, it is widely used by voice hardware and |
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 811e3e782f0f..c64f029f7052 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
@@ -389,9 +389,11 @@ static int ctnetlink_conntrack_event(struct notifier_block *this, | |||
389 | && ctnetlink_dump_helpinfo(skb, ct) < 0) | 389 | && ctnetlink_dump_helpinfo(skb, ct) < 0) |
390 | goto nfattr_failure; | 390 | goto nfattr_failure; |
391 | 391 | ||
392 | #ifdef CONFIG_NF_CONNTRACK_MARK | ||
392 | if ((events & IPCT_MARK || ct->mark) | 393 | if ((events & IPCT_MARK || ct->mark) |
393 | && ctnetlink_dump_mark(skb, ct) < 0) | 394 | && ctnetlink_dump_mark(skb, ct) < 0) |
394 | goto nfattr_failure; | 395 | goto nfattr_failure; |
396 | #endif | ||
395 | 397 | ||
396 | if (events & IPCT_COUNTER_FILLING && | 398 | if (events & IPCT_COUNTER_FILLING && |
397 | (ctnetlink_dump_counters(skb, ct, IP_CT_DIR_ORIGINAL) < 0 || | 399 | (ctnetlink_dump_counters(skb, ct, IP_CT_DIR_ORIGINAL) < 0 || |