📄 v2.6.20-rc1-gitcurrent.patch
字号:
sparc64_boot:-1: rd %pc, %g7- set 1b, %g1- cmp %g1, %g7- be,pn %xcc, sparc64_boot_after_remap- mov %o4, %l7+ mov %o4, %l7 /* We need to remap the kernel. Use position independant * code to remap us to KERNBASE.@@ -295,7 +291,6 @@ is_sun4v: add %sp, (192 + 128), %sp -sparc64_boot_after_remap: sethi %hi(prom_root_compatible), %g1 or %g1, %lo(prom_root_compatible), %g1 sethi %hi(prom_sun4v_name), %g7diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.cindex d64b1ea..c3d068c 100644--- a/arch/sparc64/kernel/irq.c+++ b/arch/sparc64/kernel/irq.c@@ -372,14 +372,14 @@ static void run_pre_handler(unsigned int } } -static struct hw_interrupt_type sun4u_irq = {+static struct irq_chip sun4u_irq = { .typename = "sun4u", .enable = sun4u_irq_enable, .disable = sun4u_irq_disable, .end = sun4u_irq_end, }; -static struct hw_interrupt_type sun4u_irq_ack = {+static struct irq_chip sun4u_irq_ack = { .typename = "sun4u+ack", .enable = sun4u_irq_enable, .disable = sun4u_irq_disable,@@ -387,14 +387,14 @@ static struct hw_interrupt_type sun4u_ir .end = sun4u_irq_end, }; -static struct hw_interrupt_type sun4v_irq = {+static struct irq_chip sun4v_irq = { .typename = "sun4v", .enable = sun4v_irq_enable, .disable = sun4v_irq_disable, .end = sun4v_irq_end, }; -static struct hw_interrupt_type sun4v_irq_ack = {+static struct irq_chip sun4v_irq_ack = { .typename = "sun4v+ack", .enable = sun4v_irq_enable, .disable = sun4v_irq_disable,@@ -493,22 +493,6 @@ out: return bucket->virt_irq; } -void hw_resend_irq(struct hw_interrupt_type *handler, unsigned int virt_irq)-{- struct ino_bucket *bucket = virt_irq_to_bucket(virt_irq);- unsigned long pstate;- unsigned int *ent;-- __asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate));- __asm__ __volatile__("wrpr %0, %1, %%pstate"- : : "r" (pstate), "i" (PSTATE_IE));- ent = irq_work(smp_processor_id());- bucket->irq_chain = *ent;- *ent = __irq(bucket);- set_softint(1 << PIL_DEVICE_IRQ);- __asm__ __volatile__("wrpr %0, 0x0, %%pstate" : : "r" (pstate));-}- void ack_bad_irq(unsigned int virt_irq) { struct ino_bucket *bucket = virt_irq_to_bucket(virt_irq);diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.cindex cc09d82..0a49585 100644--- a/arch/sparc64/kernel/smp.c+++ b/arch/sparc64/kernel/smp.c@@ -1447,11 +1447,8 @@ void __init setup_per_cpu_areas(void) char *ptr; /* Copy section for each CPU (we discard the original) */- goal = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES);-#ifdef CONFIG_MODULES- if (goal < PERCPU_ENOUGH_ROOM)- goal = PERCPU_ENOUGH_ROOM;-#endif+ goal = PERCPU_ENOUGH_ROOM;+ __per_cpu_shift = 0; for (size = 1UL; size < goal; size <<= 1UL) __per_cpu_shift++;diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefileindex b471b85..2941a91 100644--- a/arch/x86_64/Makefile+++ b/arch/x86_64/Makefile@@ -45,9 +45,7 @@ # this makes reading assembly source eas # actually it makes the kernel smaller too. cflags-y += -fno-reorder-blocks cflags-y += -Wno-sign-compare-ifneq ($(CONFIG_UNWIND_INFO),y) cflags-y += -fno-asynchronous-unwind-tables-endif ifneq ($(CONFIG_DEBUG_INFO),y) # -fweb shrinks the kernel a bit, but the difference is very small # it also messes up debugging, so don't use it for now.diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfigindex 1a1c6a1..ac80b12 100644--- a/arch/x86_64/defconfig+++ b/arch/x86_64/defconfig@@ -1523,8 +1523,6 @@ CONFIG_DEBUG_FS=y # CONFIG_DEBUG_VM is not set # CONFIG_DEBUG_LIST is not set # CONFIG_FRAME_POINTER is not set-CONFIG_UNWIND_INFO=y-CONFIG_STACK_UNWIND=y # CONFIG_FORCED_INLINING is not set # CONFIG_HEADERS_CHECK is not set # CONFIG_RCU_TORTURE_TEST is not setdiff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.Sindex 601d332..9f5dac6 100644--- a/arch/x86_64/kernel/entry.S+++ b/arch/x86_64/kernel/entry.S@@ -1155,36 +1155,3 @@ ENTRY(call_softirq) ret CFI_ENDPROC ENDPROC(call_softirq)--#ifdef CONFIG_STACK_UNWIND-ENTRY(arch_unwind_init_running)- CFI_STARTPROC- movq %r15, R15(%rdi)- movq %r14, R14(%rdi)- xchgq %rsi, %rdx- movq %r13, R13(%rdi)- movq %r12, R12(%rdi)- xorl %eax, %eax- movq %rbp, RBP(%rdi)- movq %rbx, RBX(%rdi)- movq (%rsp), %rcx- movq %rax, R11(%rdi)- movq %rax, R10(%rdi)- movq %rax, R9(%rdi)- movq %rax, R8(%rdi)- movq %rax, RAX(%rdi)- movq %rax, RCX(%rdi)- movq %rax, RDX(%rdi)- movq %rax, RSI(%rdi)- movq %rax, RDI(%rdi)- movq %rax, ORIG_RAX(%rdi)- movq %rcx, RIP(%rdi)- leaq 8(%rsp), %rcx- movq $__KERNEL_CS, CS(%rdi)- movq %rax, EFLAGS(%rdi)- movq %rcx, RSP(%rdi)- movq $__KERNEL_DS, SS(%rdi)- jmpq *%rdx- CFI_ENDPROC-ENDPROC(arch_unwind_init_running)-#endifdiff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.cindex b54ccc0..1d9eb6d 100644--- a/arch/x86_64/kernel/traps.c+++ b/arch/x86_64/kernel/traps.c@@ -110,11 +110,6 @@ static inline void preempt_conditional_c } int kstack_depth_to_print = 12;-#ifdef CONFIG_STACK_UNWIND-static int call_trace = 1;-#else-#define call_trace (-1)-#endif #ifdef CONFIG_KALLSYMS void printk_address(unsigned long address)@@ -217,32 +212,6 @@ #endif return NULL; } -struct ops_and_data {- struct stacktrace_ops *ops;- void *data;-};--static int dump_trace_unwind(struct unwind_frame_info *info, void *context)-{- struct ops_and_data *oad = (struct ops_and_data *)context;- int n = 0;- unsigned long sp = UNW_SP(info);-- if (arch_unw_user_mode(info))- return -1;- while (unwind(info) == 0 && UNW_PC(info)) {- n++;- oad->ops->address(oad->data, UNW_PC(info));- if (arch_unw_user_mode(info))- break;- if ((sp & ~(PAGE_SIZE - 1)) == (UNW_SP(info) & ~(PAGE_SIZE - 1))- && sp > UNW_SP(info))- break;- sp = UNW_SP(info);- }- return n;-}- #define MSG(txt) ops->warning(data, txt) /*@@ -270,40 +239,6 @@ void dump_trace(struct task_struct *tsk, if (!tsk) tsk = current; - if (call_trace >= 0) {- int unw_ret = 0;- struct unwind_frame_info info;- struct ops_and_data oad = { .ops = ops, .data = data };-- if (regs) {- if (unwind_init_frame_info(&info, tsk, regs) == 0)- unw_ret = dump_trace_unwind(&info, &oad);- } else if (tsk == current)- unw_ret = unwind_init_running(&info, dump_trace_unwind,- &oad);- else {- if (unwind_init_blocked(&info, tsk) == 0)- unw_ret = dump_trace_unwind(&info, &oad);- }- if (unw_ret > 0) {- if (call_trace == 1 && !arch_unw_user_mode(&info)) {- ops->warning_symbol(data,- "DWARF2 unwinder stuck at %s",- UNW_PC(&info));- if ((long)UNW_SP(&info) < 0) {- MSG("Leftover inexact backtrace:");- stack = (unsigned long *)UNW_SP(&info);- if (!stack)- goto out;- } else- MSG("Full inexact backtrace again:");- } else if (call_trace >= 1)- goto out;- else- MSG("Full inexact backtrace again:");- } else- MSG("Inexact backtrace:");- } if (!stack) { unsigned long dummy; stack = &dummy;@@ -387,7 +322,6 @@ #define HANDLE_STACK(cond) \ tinfo = current_thread_info(); HANDLE_STACK (valid_stack_ptr(tinfo, stack)); #undef HANDLE_STACK-out: put_cpu(); } EXPORT_SYMBOL(dump_trace);@@ -1188,21 +1122,3 @@ static int __init kstack_setup(char *s) return 0; } early_param("kstack", kstack_setup);--#ifdef CONFIG_STACK_UNWIND-static int __init call_trace_setup(char *s)-{- if (!s)- return -EINVAL;- if (strcmp(s, "old") == 0)- call_trace = -1;- else if (strcmp(s, "both") == 0)- call_trace = 0;- else if (strcmp(s, "newfallback") == 0)- call_trace = 1;- else if (strcmp(s, "new") == 0)- call_trace = 2;- return 0;-}-early_param("call_trace", call_trace_setup);-#endifdiff --git a/arch/x86_64/kernel/vmlinux.lds.S b/arch/x86_64/kernel/vmlinux.lds.Sindex 514be5d..1e54ddf 100644--- a/arch/x86_64/kernel/vmlinux.lds.S+++ b/arch/x86_64/kernel/vmlinux.lds.S@@ -221,9 +221,7 @@ #undef VVIRT /* Sections to be discarded */ /DISCARD/ : { *(.exitcall.exit)-#ifndef CONFIG_UNWIND_INFO *(.eh_frame)-#endif } STABS_DEBUGdiff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfigindex 984ab28..b34e0a9 100644--- a/drivers/ata/Kconfig+++ b/drivers/ata/Kconfig@@ -40,9 +40,9 @@ config ATA_PIIX tristate "Intel PIIX/ICH SATA support" depends on PCI help- This option enables support for ICH5/6/7/8 Serial ATA.- If PATA support was enabled previously, this enables- support for select Intel PIIX/ICH PATA host controllers.+ This option enables support for ICH5/6/7/8 Serial ATA+ and support for PATA on the Intel PIIX3/PIIX4/ICH series+ PATA host controllers. If unsure, say N. diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.cindex f36da48..dbae6d9 100644--- a/drivers/ata/ahci.c+++ b/drivers/ata/ahci.c@@ -645,8 +645,6 @@ static int ahci_reset_controller(void __ u32 cap_save, impl_save, tmp; cap_save = readl(mmio + HOST_CAP);- cap_save &= ( (1<<28) | (1<<17) );- cap_save |= (1 << 27); impl_save = readl(mmio + HOST_PORTS_IMPL); /* global controller reset */diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.cindex c7de0bb..47701b2 100644--- a/drivers/ata/ata_piix.c+++ b/drivers/ata/ata_piix.c@@ -226,14 +226,26 @@ #endif { 0x8086, 0x27c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, /* 2801GBM/GHM (ICH7M, identical to ICH6M) */ { 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6m_sata_ahci },- /* Enterprise Southbridge 2 (where's the datasheet?) */+ /* Enterprise Southbridge 2 (631xESB/632xESB) */ { 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci },- /* SATA Controller 1 IDE (ICH8, no datasheet yet) */+ /* SATA Controller 1 IDE (ICH8) */ { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },- /* SATA Controller 2 IDE (ICH8, ditto) */+ /* SATA Controller 2 IDE (ICH8) */ { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },- /* Mobile SATA Controller IDE (ICH8M, ditto) */+ /* Mobile SATA Controller IDE (ICH8M) */ { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },+ /* SATA Controller IDE (ICH9) */+ { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },+ /* SATA Controller IDE (ICH9) */+ { 0x8086, 0x2921, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },+ /* SATA Controller IDE (ICH9) */+ { 0x8086, 0x2926, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },+ /* SATA Controller IDE (ICH9M) */+ { 0x8086, 0x2928, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },+ /* SATA Controller IDE (ICH9M) */+ { 0x8086, 0x292d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },+ /* SATA Controller IDE (ICH9M) */+ { 0x8086, 0x292e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, { } /* terminate list */ };@@ -330,7 +342,7 @@ static const struct ata_port_operations .port_start = ata_port_start, .port_stop = ata_port_stop,- .host_stop = ata_host_stop,+ .host_stop = piix_host_stop, }; static const struct ata_port_operations piix_sata_ops = {diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.cindex 011c0a8..0d51d13 100644--- a/drivers/ata/libata-core.c+++ b/drivers/ata/libata-core.c@@ -1332,7 +1332,7 @@ unsigned ata_exec_internal_sg(struct ata } /**- * ata_exec_internal_sg - execute libata internal command+ * ata_exec_internal - execute libata internal command * @dev: Device to which the command is sent * @tf: Taskfile registers for the command and the result * @cdb: CDB for packet command@@ -1353,11 +1353,17 @@ unsigned ata_exec_internal(struct ata_de struct ata_taskfile *tf, const u8 *cdb, int dma_dir, void *buf, unsigned int buflen) {- struct scatterlist sg;+ struct scatterlist *psg = NULL, sg;+ unsigned int n_elem = 0; - sg_init_one(&sg, buf, buflen);+ if (dma_dir != DMA_NONE) {+ WARN_ON(!buf);+ sg_init_one(&sg, buf, buflen);+ psg = &sg;+ n_elem++;+ } - return ata_exec_internal_sg(dev, tf, cdb, dma_dir, &sg, 1);+ return ata_exec_internal_sg(dev, tf, cdb, dma_dir, psg, n_elem); } /**diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.cindex 664e137..a4790be 100644--- a/drivers/ata/libata-scsi.c+++ b/drivers/ata/libata-scsi.c@@ -1539,7 +1539,7 @@ static unsigned int ata_scsi_rbuf_get(st struct scatterlist *sg; sg = (struct scatterlist *) cmd->request_buffer;- buf = kmap_atomic(sg->page, KM_USER0) + sg->offset;+ buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset; buflen = sg->length; } else { buf = cmd->request_buffer;@@ -1567,7 +1567,7 @@ static inline void ata_scsi_rbuf_put(str struct scatterlist *sg; sg = (struct scatterlist *) cmd->request_buffer;- kunmap_atomic(buf - sg->offset, KM_USER0);+ kunmap_atomic(buf - sg->offset, KM_IRQ0); } } diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.cindex c7d1738..e7bf9d8 100644--- a/drivers/ata/pata_legacy.c+++ b/drivers/ata/pata_legacy.c@@ -698,8 +698,10 @@ static __init int legacy_init_one(int po goto fail_io; pdev = platform_device_register_simple(DRV_NAME, nr_legacy_host, NULL, 0);- if (pdev == NULL)+ if (IS_ERR(pdev)) {+ ret = PTR_ERR(pdev); goto fail_dev;+ } if (ht6560a & mask) { ops = &ht6560a_port_ops;diff --git a/drivers/ata/pata_qdi.c b/drivers/ata/pata_qdi.cindex 36f621a..afc0d99 100644--- a/drivers/ata/pata_qdi.c+++ b/drivers/ata/pata_qdi.c@@ -247,8 +247,8 @@ static __init int qdi_init_one(unsigned */ pdev = platform_device_register_simple(DRV_NAME, nr_qdi_host, NULL, 0);- if (pdev == NULL)- return -ENOMEM;+ if (IS_ERR(pdev))+ return PTR_ERR(pdev); memset(&ae, 0, sizeof(struct ata_probe_ent)); INIT_LIST_HEAD(&ae.node);diff --git a/drivers/ata/pata_rz1000.c b/drivers/ata/pata_rz1000.cindex 3677c64..adf4cc1 100644--- a/drivers/ata/pata_rz1000.c+++ b/drivers/ata/pata_rz1000.c@@ -105,8 +105,6 @@ static struct ata_port_operations rz1000 .exec_command = ata_exec_command, .dev_select = ata_std_dev_select, - .error_handler = rz1000_error_handler,- .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start, .bmdma_stop = ata_bmdma_stop,diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.cindex cc09d47..ff93e8f 100644--- a/drivers/ata/pata_via.c+++ b/drivers/ata/pata_via.c@@ -161,10 +161,15 @@ static int via_pre_reset(struct ata_port return -ENOENT; } - if ((config->flags & VIA_UDMA) >= VIA_UDMA_66)+ if ((config->flags & VIA_UDMA) >= VIA_UDMA_100) ap->cbl = via_cable_detect(ap);- else+ /* The UDMA66 series has no cable detect so do drive side detect */+ else if ((config->flags & VIA_UDMA) < VIA_UDMA_66) ap->cbl = ATA_CBL_PATA40;+ else+ ap->cbl = ATA_CBL_PATA_UNK;+ + return ata_std_prereset(ap); } diff --git a/drivers/ata/pata_winbond.c b/drivers/ata/pata_winbond.cindex 3ea345c..5d1f518 100644--- a/drivers/ata/pata_winbond.c+++ b/drivers/ata/pata_winbond.c@@ -206,8 +206,8 @@ static __init int winbond_init_one(unsig */ pdev = platform_device_register_simple(DRV_NAME, nr_winbond_host, NULL, 0);- if (pdev == NULL)- return -ENOMEM;+ if (IS_ERR(pdev))+ return PTR_ERR(pdev); memset(&ae, 0, sizeof(struct ata_probe_ent)); INIT_LIST_HEAD(&ae.node);diff --git a/drivers/ata/sata_svw.c b/drivers/ata/sata
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -