mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-01 12:04:08 +00:00
Merge branches 'tracing/ftrace', 'tracing/ring-buffer', 'tracing/sysprof', 'tracing/urgent' and 'linus' into tracing/core
This commit is contained in:
commit
1c511f740f
140 changed files with 1090 additions and 631 deletions
|
@ -43,7 +43,8 @@ Only comments so marked will be considered by the kernel-doc scripts,
|
||||||
and any comment so marked must be in kernel-doc format. Do not use
|
and any comment so marked must be in kernel-doc format. Do not use
|
||||||
"/**" to be begin a comment block unless the comment block contains
|
"/**" to be begin a comment block unless the comment block contains
|
||||||
kernel-doc formatted comments. The closing comment marker for
|
kernel-doc formatted comments. The closing comment marker for
|
||||||
kernel-doc comments can be either "*/" or "**/".
|
kernel-doc comments can be either "*/" or "**/", but "*/" is
|
||||||
|
preferred in the Linux kernel tree.
|
||||||
|
|
||||||
Kernel-doc comments should be placed just before the function
|
Kernel-doc comments should be placed just before the function
|
||||||
or data structure being described.
|
or data structure being described.
|
||||||
|
@ -63,7 +64,7 @@ Example kernel-doc function comment:
|
||||||
* comment lines.
|
* comment lines.
|
||||||
*
|
*
|
||||||
* The longer description can have multiple paragraphs.
|
* The longer description can have multiple paragraphs.
|
||||||
**/
|
*/
|
||||||
|
|
||||||
The first line, with the short description, must be on a single line.
|
The first line, with the short description, must be on a single line.
|
||||||
|
|
||||||
|
@ -85,7 +86,7 @@ Example kernel-doc data structure comment.
|
||||||
* perhaps with more lines and words.
|
* perhaps with more lines and words.
|
||||||
*
|
*
|
||||||
* Longer description of this structure.
|
* Longer description of this structure.
|
||||||
**/
|
*/
|
||||||
|
|
||||||
The kernel-doc function comments describe each parameter to the
|
The kernel-doc function comments describe each parameter to the
|
||||||
function, in order, with the @name lines.
|
function, in order, with the @name lines.
|
||||||
|
|
|
@ -938,6 +938,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
|
|
||||||
intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option
|
intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option
|
||||||
|
on
|
||||||
|
Enable intel iommu driver.
|
||||||
off
|
off
|
||||||
Disable intel iommu driver.
|
Disable intel iommu driver.
|
||||||
igfx_off [Default Off]
|
igfx_off [Default Off]
|
||||||
|
|
12
MAINTAINERS
12
MAINTAINERS
|
@ -1202,6 +1202,8 @@ S: Supported
|
||||||
CONTROL GROUPS (CGROUPS)
|
CONTROL GROUPS (CGROUPS)
|
||||||
P: Paul Menage
|
P: Paul Menage
|
||||||
M: menage@google.com
|
M: menage@google.com
|
||||||
|
P: Li Zefan
|
||||||
|
M: lizf@cn.fujitsu.com
|
||||||
L: containers@lists.linux-foundation.org
|
L: containers@lists.linux-foundation.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
@ -3543,6 +3545,12 @@ S: Maintained
|
||||||
PXA MMCI DRIVER
|
PXA MMCI DRIVER
|
||||||
S: Orphan
|
S: Orphan
|
||||||
|
|
||||||
|
PXA RTC DRIVER
|
||||||
|
P: Robert Jarzmik
|
||||||
|
M: robert.jarzmik@free.fr
|
||||||
|
L: rtc-linux@googlegroups.com
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
QLOGIC QLA2XXX FC-SCSI DRIVER
|
QLOGIC QLA2XXX FC-SCSI DRIVER
|
||||||
P: Andrew Vasquez
|
P: Andrew Vasquez
|
||||||
M: linux-driver@qlogic.com
|
M: linux-driver@qlogic.com
|
||||||
|
@ -4291,8 +4299,8 @@ P: Rajiv Andrade
|
||||||
M: srajiv@linux.vnet.ibm.com
|
M: srajiv@linux.vnet.ibm.com
|
||||||
W: http://tpmdd.sourceforge.net
|
W: http://tpmdd.sourceforge.net
|
||||||
P: Marcel Selhorst
|
P: Marcel Selhorst
|
||||||
M: tpm@selhorst.net
|
M: m.selhorst@sirrix.com
|
||||||
W: http://www.prosec.rub.de/tpm/
|
W: http://www.sirrix.com
|
||||||
L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
|
||||||
const extern unsigned char relocate_new_kernel[];
|
extern const unsigned char relocate_new_kernel[];
|
||||||
const extern unsigned int relocate_new_kernel_size;
|
extern const unsigned int relocate_new_kernel_size;
|
||||||
|
|
||||||
extern void setup_mm_for_reboot(char mode);
|
extern void setup_mm_for_reboot(char mode);
|
||||||
|
|
||||||
|
|
|
@ -121,6 +121,16 @@ int __init pxa_init_dma(int num_ch)
|
||||||
if (dma_channels == NULL)
|
if (dma_channels == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/* dma channel priorities on pxa2xx processors:
|
||||||
|
* ch 0 - 3, 16 - 19 <--> (0) DMA_PRIO_HIGH
|
||||||
|
* ch 4 - 7, 20 - 23 <--> (1) DMA_PRIO_MEDIUM
|
||||||
|
* ch 8 - 15, 24 - 31 <--> (2) DMA_PRIO_LOW
|
||||||
|
*/
|
||||||
|
for (i = 0; i < num_ch; i++) {
|
||||||
|
DCSR(i) = 0;
|
||||||
|
dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW);
|
||||||
|
}
|
||||||
|
|
||||||
ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL);
|
ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printk (KERN_CRIT "Wow! Can't register IRQ for DMA\n");
|
printk (KERN_CRIT "Wow! Can't register IRQ for DMA\n");
|
||||||
|
@ -128,14 +138,6 @@ int __init pxa_init_dma(int num_ch)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dma channel priorities on pxa2xx processors:
|
|
||||||
* ch 0 - 3, 16 - 19 <--> (0) DMA_PRIO_HIGH
|
|
||||||
* ch 4 - 7, 20 - 23 <--> (1) DMA_PRIO_MEDIUM
|
|
||||||
* ch 8 - 15, 24 - 31 <--> (2) DMA_PRIO_LOW
|
|
||||||
*/
|
|
||||||
for (i = 0; i < num_ch; i++)
|
|
||||||
dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW);
|
|
||||||
|
|
||||||
num_dma_channels = num_ch;
|
num_dma_channels = num_ch;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef __ASM_ARCH_REGS_AC97_H
|
#ifndef __ASM_ARCH_REGS_AC97_H
|
||||||
#define __ASM_ARCH_REGS_AC97_H
|
#define __ASM_ARCH_REGS_AC97_H
|
||||||
|
|
||||||
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AC97 Controller registers
|
* AC97 Controller registers
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -41,6 +41,9 @@
|
||||||
#elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
|
#elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
|
||||||
#define SSCR0_SCR (0x000fff00) /* Serial Clock Rate (mask) */
|
#define SSCR0_SCR (0x000fff00) /* Serial Clock Rate (mask) */
|
||||||
#define SSCR0_SerClkDiv(x) (((x) - 1) << 8) /* Divisor [1..4096] */
|
#define SSCR0_SerClkDiv(x) (((x) - 1) << 8) /* Divisor [1..4096] */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
|
||||||
#define SSCR0_EDSS (1 << 20) /* Extended data size select */
|
#define SSCR0_EDSS (1 << 20) /* Extended data size select */
|
||||||
#define SSCR0_NCS (1 << 21) /* Network clock select */
|
#define SSCR0_NCS (1 << 21) /* Network clock select */
|
||||||
#define SSCR0_RIM (1 << 22) /* Receive FIFO overrrun interrupt mask */
|
#define SSCR0_RIM (1 << 22) /* Receive FIFO overrrun interrupt mask */
|
||||||
|
|
|
@ -88,13 +88,13 @@ static struct pxa3xx_mfp_addr_map pxa310_mfp_addr_map[] __initdata = {
|
||||||
static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0);
|
static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0);
|
||||||
|
|
||||||
static struct clk_lookup common_clkregs[] = {
|
static struct clk_lookup common_clkregs[] = {
|
||||||
INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", "NANDCLK"),
|
INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0);
|
static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0);
|
||||||
|
|
||||||
static struct clk_lookup pxa310_clkregs[] = {
|
static struct clk_lookup pxa310_clkregs[] = {
|
||||||
INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", "MMCCLK"),
|
INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init pxa300_init(void)
|
static int __init pxa300_init(void)
|
||||||
|
|
|
@ -83,7 +83,7 @@ static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
|
||||||
static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0);
|
static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0);
|
||||||
|
|
||||||
static struct clk_lookup pxa320_clkregs[] = {
|
static struct clk_lookup pxa320_clkregs[] = {
|
||||||
INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", "NANDCLK"),
|
INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init pxa320_init(void)
|
static int __init pxa320_init(void)
|
||||||
|
|
|
@ -191,7 +191,8 @@
|
||||||
interrupts = <37 0x8 36 0x8 35 0x8>;
|
interrupts = <37 0x8 36 0x8 35 0x8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
tbi-handle = < &tbi0 >;
|
tbi-handle = < &tbi0 >;
|
||||||
phy-handle = < &phy1 >;
|
/* Vitesse 7385 isn't on the MDIO bus */
|
||||||
|
fixed-link = <1 1 1000 0 0>;
|
||||||
fsl,magic-packet;
|
fsl,magic-packet;
|
||||||
|
|
||||||
mdio@24520 {
|
mdio@24520 {
|
||||||
|
@ -199,12 +200,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "fsl,gianfar-mdio";
|
compatible = "fsl,gianfar-mdio";
|
||||||
reg = <0x24520 0x20>;
|
reg = <0x24520 0x20>;
|
||||||
phy1: ethernet-phy@1 {
|
|
||||||
interrupt-parent = <&ipic>;
|
|
||||||
interrupts = <19 0x8>;
|
|
||||||
reg = <0x1>;
|
|
||||||
device_type = "ethernet-phy";
|
|
||||||
};
|
|
||||||
phy4: ethernet-phy@4 {
|
phy4: ethernet-phy@4 {
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
interrupts = <20 0x8>;
|
interrupts = <20 0x8>;
|
||||||
|
@ -219,6 +214,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
enet1: ethernet@25000 {
|
enet1: ethernet@25000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
device_type = "network";
|
device_type = "network";
|
||||||
model = "eTSEC";
|
model = "eTSEC";
|
||||||
|
|
|
@ -651,7 +651,7 @@ CONFIG_CICADA_PHY=y
|
||||||
# CONFIG_NATIONAL_PHY is not set
|
# CONFIG_NATIONAL_PHY is not set
|
||||||
# CONFIG_STE10XP is not set
|
# CONFIG_STE10XP is not set
|
||||||
# CONFIG_LSI_ET1011C_PHY is not set
|
# CONFIG_LSI_ET1011C_PHY is not set
|
||||||
# CONFIG_FIXED_PHY is not set
|
CONFIG_FIXED_PHY=y
|
||||||
# CONFIG_MDIO_BITBANG is not set
|
# CONFIG_MDIO_BITBANG is not set
|
||||||
CONFIG_NET_ETHERNET=y
|
CONFIG_NET_ETHERNET=y
|
||||||
CONFIG_MII=y
|
CONFIG_MII=y
|
||||||
|
|
|
@ -195,8 +195,9 @@ __ftrace_make_nop(struct module *mod,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = (unsigned)((unsigned short)jmp[0]) << 16 |
|
/* The bottom half is signed extended */
|
||||||
(unsigned)((unsigned short)jmp[1]);
|
offset = ((unsigned)((unsigned short)jmp[0]) << 16) +
|
||||||
|
(int)((short)jmp[1]);
|
||||||
|
|
||||||
DEBUGP(" %x ", offset);
|
DEBUGP(" %x ", offset);
|
||||||
|
|
||||||
|
|
|
@ -561,8 +561,21 @@ int pci_mmap_legacy_page_range(struct pci_bus *bus,
|
||||||
(unsigned long long)(offset + size - 1));
|
(unsigned long long)(offset + size - 1));
|
||||||
|
|
||||||
if (mmap_state == pci_mmap_mem) {
|
if (mmap_state == pci_mmap_mem) {
|
||||||
if ((offset + size) > hose->isa_mem_size)
|
/* Hack alert !
|
||||||
return -ENXIO;
|
*
|
||||||
|
* Because X is lame and can fail starting if it gets an error trying
|
||||||
|
* to mmap legacy_mem (instead of just moving on without legacy memory
|
||||||
|
* access) we fake it here by giving it anonymous memory, effectively
|
||||||
|
* behaving just like /dev/zero
|
||||||
|
*/
|
||||||
|
if ((offset + size) > hose->isa_mem_size) {
|
||||||
|
printk(KERN_DEBUG
|
||||||
|
"Process %s (pid:%d) mapped non-existing PCI legacy memory for 0%04x:%02x\n",
|
||||||
|
current->comm, current->pid, pci_domain_nr(bus), bus->number);
|
||||||
|
if (vma->vm_flags & VM_SHARED)
|
||||||
|
return shmem_zero_setup(vma);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
offset += hose->isa_mem_phys;
|
offset += hose->isa_mem_phys;
|
||||||
} else {
|
} else {
|
||||||
unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE;
|
unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE;
|
||||||
|
|
|
@ -172,6 +172,8 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x378: /* orx */
|
case 0x378: /* orx */
|
||||||
|
if (instr & 1)
|
||||||
|
break;
|
||||||
rs = (instr >> 21) & 0x1f;
|
rs = (instr >> 21) & 0x1f;
|
||||||
rb = (instr >> 11) & 0x1f;
|
rb = (instr >> 11) & 0x1f;
|
||||||
if (rs == rb) { /* mr */
|
if (rs == rb) { /* mr */
|
||||||
|
|
|
@ -73,7 +73,7 @@ extern unsigned int tlbcam_index;
|
||||||
/*
|
/*
|
||||||
* Return PA for this VA if it is mapped by a CAM, or 0
|
* Return PA for this VA if it is mapped by a CAM, or 0
|
||||||
*/
|
*/
|
||||||
unsigned long v_mapped_by_tlbcam(unsigned long va)
|
phys_addr_t v_mapped_by_tlbcam(unsigned long va)
|
||||||
{
|
{
|
||||||
int b;
|
int b;
|
||||||
for (b = 0; b < tlbcam_index; ++b)
|
for (b = 0; b < tlbcam_index; ++b)
|
||||||
|
@ -85,7 +85,7 @@ unsigned long v_mapped_by_tlbcam(unsigned long va)
|
||||||
/*
|
/*
|
||||||
* Return VA for a given PA or 0 if not mapped
|
* Return VA for a given PA or 0 if not mapped
|
||||||
*/
|
*/
|
||||||
unsigned long p_mapped_by_tlbcam(unsigned long pa)
|
unsigned long p_mapped_by_tlbcam(phys_addr_t pa)
|
||||||
{
|
{
|
||||||
int b;
|
int b;
|
||||||
for (b = 0; b < tlbcam_index; ++b)
|
for (b = 0; b < tlbcam_index; ++b)
|
||||||
|
|
|
@ -320,7 +320,7 @@ _GLOBAL(create_hpte)
|
||||||
and r8,r8,r0 /* writable if _RW & _DIRTY */
|
and r8,r8,r0 /* writable if _RW & _DIRTY */
|
||||||
rlwimi r5,r5,32-1,30,30 /* _PAGE_USER -> PP msb */
|
rlwimi r5,r5,32-1,30,30 /* _PAGE_USER -> PP msb */
|
||||||
rlwimi r5,r5,32-2,31,31 /* _PAGE_USER -> PP lsb */
|
rlwimi r5,r5,32-2,31,31 /* _PAGE_USER -> PP lsb */
|
||||||
ori r8,r8,0xe14 /* clear out reserved bits and M */
|
ori r8,r8,0xe04 /* clear out reserved bits */
|
||||||
andc r8,r5,r8 /* PP = user? (rw&dirty? 2: 3): 0 */
|
andc r8,r5,r8 /* PP = user? (rw&dirty? 2: 3): 0 */
|
||||||
BEGIN_FTR_SECTION
|
BEGIN_FTR_SECTION
|
||||||
rlwinm r8,r8,0,~_PAGE_COHERENT /* clear M (coherence not required) */
|
rlwinm r8,r8,0,~_PAGE_COHERENT /* clear M (coherence not required) */
|
||||||
|
|
|
@ -61,8 +61,8 @@ void setbat(int index, unsigned long virt, phys_addr_t phys,
|
||||||
|
|
||||||
#ifdef HAVE_TLBCAM
|
#ifdef HAVE_TLBCAM
|
||||||
extern unsigned int tlbcam_index;
|
extern unsigned int tlbcam_index;
|
||||||
extern unsigned long v_mapped_by_tlbcam(unsigned long va);
|
extern phys_addr_t v_mapped_by_tlbcam(unsigned long va);
|
||||||
extern unsigned long p_mapped_by_tlbcam(unsigned long pa);
|
extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa);
|
||||||
#else /* !HAVE_TLBCAM */
|
#else /* !HAVE_TLBCAM */
|
||||||
#define v_mapped_by_tlbcam(x) (0UL)
|
#define v_mapped_by_tlbcam(x) (0UL)
|
||||||
#define p_mapped_by_tlbcam(x) (0UL)
|
#define p_mapped_by_tlbcam(x) (0UL)
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <asm/cell-pmu.h>
|
#include <asm/cell-pmu.h>
|
||||||
|
#include <asm/time.h>
|
||||||
#include "pr_util.h"
|
#include "pr_util.h"
|
||||||
|
|
||||||
#define SCALE_SHIFT 14
|
#define SCALE_SHIFT 14
|
||||||
|
|
|
@ -186,7 +186,7 @@ out_unmap_regs:
|
||||||
iounmap(priv->regs);
|
iounmap(priv->regs);
|
||||||
out_free_bootmem:
|
out_free_bootmem:
|
||||||
free_bootmem((unsigned long)priv,
|
free_bootmem((unsigned long)priv,
|
||||||
sizeof(sizeof(struct pq2ads_pci_pic)));
|
sizeof(struct pq2ads_pci_pic));
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
out_unmap_irq:
|
out_unmap_irq:
|
||||||
irq_dispose_mapping(irq);
|
irq_dispose_mapping(irq);
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <asm/firmware.h>
|
#include <asm/firmware.h>
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
#include <asm/pSeries_reconfig.h>
|
#include <asm/pSeries_reconfig.h>
|
||||||
|
#include <asm/sparsemem.h>
|
||||||
|
|
||||||
static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size)
|
static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size)
|
||||||
{
|
{
|
||||||
|
|
|
@ -165,7 +165,7 @@ static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type)
|
||||||
edibit = (14 - (src - CPM2_IRQ_EXT1));
|
edibit = (14 - (src - CPM2_IRQ_EXT1));
|
||||||
else
|
else
|
||||||
if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0)
|
if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0)
|
||||||
edibit = (31 - (src - CPM2_IRQ_PORTC15));
|
edibit = (31 - (CPM2_IRQ_PORTC0 - src));
|
||||||
else
|
else
|
||||||
return (flow_type & IRQ_TYPE_LEVEL_LOW) ? 0 : -EINVAL;
|
return (flow_type & IRQ_TYPE_LEVEL_LOW) ? 0 : -EINVAL;
|
||||||
|
|
||||||
|
|
|
@ -890,7 +890,7 @@ unsigned int ipic_get_irq(void)
|
||||||
return irq_linear_revmap(primary_ipic->irqhost, irq);
|
return irq_linear_revmap(primary_ipic->irqhost, irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_SUSPEND
|
||||||
static struct {
|
static struct {
|
||||||
u32 sicfr;
|
u32 sicfr;
|
||||||
u32 siprr[2];
|
u32 siprr[2];
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.28-rc6
|
# Linux kernel version: 2.6.29-rc4
|
||||||
# Thu Nov 27 11:00:49 2008
|
# Wed Feb 11 10:07:16 2009
|
||||||
#
|
#
|
||||||
CONFIG_SCHED_MC=y
|
CONFIG_SCHED_MC=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
|
@ -14,12 +14,14 @@ CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||||
CONFIG_GENERIC_HWEIGHT=y
|
CONFIG_GENERIC_HWEIGHT=y
|
||||||
CONFIG_GENERIC_TIME=y
|
CONFIG_GENERIC_TIME=y
|
||||||
|
CONFIG_GENERIC_TIME_VSYSCALL=y
|
||||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||||
CONFIG_GENERIC_BUG=y
|
CONFIG_GENERIC_BUG=y
|
||||||
CONFIG_NO_IOMEM=y
|
CONFIG_NO_IOMEM=y
|
||||||
CONFIG_NO_DMA=y
|
CONFIG_NO_DMA=y
|
||||||
CONFIG_GENERIC_LOCKBREAK=y
|
CONFIG_GENERIC_LOCKBREAK=y
|
||||||
CONFIG_PGSTE=y
|
CONFIG_PGSTE=y
|
||||||
|
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||||
CONFIG_S390=y
|
CONFIG_S390=y
|
||||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
|
||||||
|
@ -39,20 +41,29 @@ CONFIG_POSIX_MQUEUE=y
|
||||||
# CONFIG_TASKSTATS is not set
|
# CONFIG_TASKSTATS is not set
|
||||||
CONFIG_AUDIT=y
|
CONFIG_AUDIT=y
|
||||||
# CONFIG_AUDITSYSCALL is not set
|
# CONFIG_AUDITSYSCALL is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# RCU Subsystem
|
||||||
|
#
|
||||||
|
CONFIG_CLASSIC_RCU=y
|
||||||
|
# CONFIG_TREE_RCU is not set
|
||||||
|
# CONFIG_PREEMPT_RCU is not set
|
||||||
|
# CONFIG_TREE_RCU_TRACE is not set
|
||||||
|
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=17
|
CONFIG_LOG_BUF_SHIFT=17
|
||||||
|
CONFIG_GROUP_SCHED=y
|
||||||
|
CONFIG_FAIR_GROUP_SCHED=y
|
||||||
|
# CONFIG_RT_GROUP_SCHED is not set
|
||||||
|
CONFIG_USER_SCHED=y
|
||||||
|
# CONFIG_CGROUP_SCHED is not set
|
||||||
CONFIG_CGROUPS=y
|
CONFIG_CGROUPS=y
|
||||||
# CONFIG_CGROUP_DEBUG is not set
|
# CONFIG_CGROUP_DEBUG is not set
|
||||||
CONFIG_CGROUP_NS=y
|
CONFIG_CGROUP_NS=y
|
||||||
# CONFIG_CGROUP_FREEZER is not set
|
# CONFIG_CGROUP_FREEZER is not set
|
||||||
# CONFIG_CGROUP_DEVICE is not set
|
# CONFIG_CGROUP_DEVICE is not set
|
||||||
# CONFIG_CPUSETS is not set
|
# CONFIG_CPUSETS is not set
|
||||||
CONFIG_GROUP_SCHED=y
|
|
||||||
CONFIG_FAIR_GROUP_SCHED=y
|
|
||||||
# CONFIG_RT_GROUP_SCHED is not set
|
|
||||||
CONFIG_USER_SCHED=y
|
|
||||||
# CONFIG_CGROUP_SCHED is not set
|
|
||||||
# CONFIG_CGROUP_CPUACCT is not set
|
# CONFIG_CGROUP_CPUACCT is not set
|
||||||
# CONFIG_RESOURCE_COUNTERS is not set
|
# CONFIG_RESOURCE_COUNTERS is not set
|
||||||
CONFIG_SYSFS_DEPRECATED=y
|
CONFIG_SYSFS_DEPRECATED=y
|
||||||
|
@ -63,6 +74,7 @@ CONFIG_UTS_NS=y
|
||||||
CONFIG_IPC_NS=y
|
CONFIG_IPC_NS=y
|
||||||
# CONFIG_USER_NS is not set
|
# CONFIG_USER_NS is not set
|
||||||
# CONFIG_PID_NS is not set
|
# CONFIG_PID_NS is not set
|
||||||
|
# CONFIG_NET_NS is not set
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_INITRAMFS_SOURCE=""
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||||
|
@ -91,17 +103,17 @@ CONFIG_SLAB=y
|
||||||
# CONFIG_SLUB is not set
|
# CONFIG_SLUB is not set
|
||||||
# CONFIG_SLOB is not set
|
# CONFIG_SLOB is not set
|
||||||
# CONFIG_PROFILING is not set
|
# CONFIG_PROFILING is not set
|
||||||
# CONFIG_MARKERS is not set
|
|
||||||
CONFIG_HAVE_OPROFILE=y
|
CONFIG_HAVE_OPROFILE=y
|
||||||
CONFIG_KPROBES=y
|
CONFIG_KPROBES=y
|
||||||
|
CONFIG_HAVE_SYSCALL_WRAPPERS=y
|
||||||
CONFIG_KRETPROBES=y
|
CONFIG_KRETPROBES=y
|
||||||
CONFIG_HAVE_KPROBES=y
|
CONFIG_HAVE_KPROBES=y
|
||||||
CONFIG_HAVE_KRETPROBES=y
|
CONFIG_HAVE_KRETPROBES=y
|
||||||
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
||||||
|
CONFIG_USE_GENERIC_SMP_HELPERS=y
|
||||||
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
||||||
CONFIG_SLABINFO=y
|
CONFIG_SLABINFO=y
|
||||||
CONFIG_RT_MUTEXES=y
|
CONFIG_RT_MUTEXES=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||||
|
@ -109,7 +121,7 @@ CONFIG_MODULE_UNLOAD=y
|
||||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||||
CONFIG_MODVERSIONS=y
|
CONFIG_MODVERSIONS=y
|
||||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
CONFIG_KMOD=y
|
CONFIG_INIT_ALL_POSSIBLE=y
|
||||||
CONFIG_STOP_MACHINE=y
|
CONFIG_STOP_MACHINE=y
|
||||||
CONFIG_BLOCK=y
|
CONFIG_BLOCK=y
|
||||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||||
|
@ -130,7 +142,6 @@ CONFIG_DEFAULT_DEADLINE=y
|
||||||
# CONFIG_DEFAULT_NOOP is not set
|
# CONFIG_DEFAULT_NOOP is not set
|
||||||
CONFIG_DEFAULT_IOSCHED="deadline"
|
CONFIG_DEFAULT_IOSCHED="deadline"
|
||||||
CONFIG_PREEMPT_NOTIFIERS=y
|
CONFIG_PREEMPT_NOTIFIERS=y
|
||||||
CONFIG_CLASSIC_RCU=y
|
|
||||||
# CONFIG_FREEZER is not set
|
# CONFIG_FREEZER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -161,6 +172,7 @@ CONFIG_S390_EXEC_PROTECT=y
|
||||||
CONFIG_MARCH_Z900=y
|
CONFIG_MARCH_Z900=y
|
||||||
# CONFIG_MARCH_Z990 is not set
|
# CONFIG_MARCH_Z990 is not set
|
||||||
# CONFIG_MARCH_Z9_109 is not set
|
# CONFIG_MARCH_Z9_109 is not set
|
||||||
|
# CONFIG_MARCH_Z10 is not set
|
||||||
CONFIG_PACK_STACK=y
|
CONFIG_PACK_STACK=y
|
||||||
# CONFIG_SMALL_STACK is not set
|
# CONFIG_SMALL_STACK is not set
|
||||||
CONFIG_CHECK_STACK=y
|
CONFIG_CHECK_STACK=y
|
||||||
|
@ -174,7 +186,6 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y
|
||||||
# CONFIG_PREEMPT_NONE is not set
|
# CONFIG_PREEMPT_NONE is not set
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
CONFIG_PREEMPT=y
|
CONFIG_PREEMPT=y
|
||||||
# CONFIG_PREEMPT_RCU is not set
|
|
||||||
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
||||||
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
|
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
|
||||||
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||||
|
@ -195,7 +206,6 @@ CONFIG_MEMORY_HOTREMOVE=y
|
||||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
CONFIG_MIGRATION=y
|
CONFIG_MIGRATION=y
|
||||||
CONFIG_RESOURCES_64BIT=y
|
|
||||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||||
CONFIG_ZONE_DMA_FLAG=1
|
CONFIG_ZONE_DMA_FLAG=1
|
||||||
CONFIG_BOUNCE=y
|
CONFIG_BOUNCE=y
|
||||||
|
@ -207,7 +217,6 @@ CONFIG_UNEVICTABLE_LRU=y
|
||||||
#
|
#
|
||||||
CONFIG_MACHCHK_WARNING=y
|
CONFIG_MACHCHK_WARNING=y
|
||||||
CONFIG_QDIO=y
|
CONFIG_QDIO=y
|
||||||
# CONFIG_QDIO_DEBUG is not set
|
|
||||||
CONFIG_CHSC_SCH=m
|
CONFIG_CHSC_SCH=m
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -227,15 +236,13 @@ CONFIG_PFAULT=y
|
||||||
# CONFIG_SHARED_KERNEL is not set
|
# CONFIG_SHARED_KERNEL is not set
|
||||||
# CONFIG_CMM is not set
|
# CONFIG_CMM is not set
|
||||||
# CONFIG_PAGE_STATES is not set
|
# CONFIG_PAGE_STATES is not set
|
||||||
CONFIG_VIRT_TIMER=y
|
|
||||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
|
||||||
# CONFIG_APPLDATA_BASE is not set
|
# CONFIG_APPLDATA_BASE is not set
|
||||||
CONFIG_HZ_100=y
|
CONFIG_HZ_100=y
|
||||||
# CONFIG_HZ_250 is not set
|
# CONFIG_HZ_250 is not set
|
||||||
# CONFIG_HZ_300 is not set
|
# CONFIG_HZ_300 is not set
|
||||||
# CONFIG_HZ_1000 is not set
|
# CONFIG_HZ_1000 is not set
|
||||||
CONFIG_HZ=100
|
CONFIG_HZ=100
|
||||||
# CONFIG_SCHED_HRTICK is not set
|
CONFIG_SCHED_HRTICK=y
|
||||||
CONFIG_S390_HYPFS_FS=y
|
CONFIG_S390_HYPFS_FS=y
|
||||||
CONFIG_KEXEC=y
|
CONFIG_KEXEC=y
|
||||||
# CONFIG_ZFCPDUMP is not set
|
# CONFIG_ZFCPDUMP is not set
|
||||||
|
@ -245,6 +252,7 @@ CONFIG_NET=y
|
||||||
#
|
#
|
||||||
# Networking options
|
# Networking options
|
||||||
#
|
#
|
||||||
|
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
# CONFIG_PACKET_MMAP is not set
|
# CONFIG_PACKET_MMAP is not set
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
|
@ -383,6 +391,7 @@ CONFIG_NET_SCH_TBF=m
|
||||||
CONFIG_NET_SCH_GRED=m
|
CONFIG_NET_SCH_GRED=m
|
||||||
CONFIG_NET_SCH_DSMARK=m
|
CONFIG_NET_SCH_DSMARK=m
|
||||||
# CONFIG_NET_SCH_NETEM is not set
|
# CONFIG_NET_SCH_NETEM is not set
|
||||||
|
# CONFIG_NET_SCH_DRR is not set
|
||||||
# CONFIG_NET_SCH_INGRESS is not set
|
# CONFIG_NET_SCH_INGRESS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -400,6 +409,7 @@ CONFIG_CLS_U32_MARK=y
|
||||||
CONFIG_NET_CLS_RSVP=m
|
CONFIG_NET_CLS_RSVP=m
|
||||||
CONFIG_NET_CLS_RSVP6=m
|
CONFIG_NET_CLS_RSVP6=m
|
||||||
CONFIG_NET_CLS_FLOW=m
|
CONFIG_NET_CLS_FLOW=m
|
||||||
|
# CONFIG_NET_CLS_CGROUP is not set
|
||||||
# CONFIG_NET_EMATCH is not set
|
# CONFIG_NET_EMATCH is not set
|
||||||
CONFIG_NET_CLS_ACT=y
|
CONFIG_NET_CLS_ACT=y
|
||||||
CONFIG_NET_ACT_POLICE=y
|
CONFIG_NET_ACT_POLICE=y
|
||||||
|
@ -411,6 +421,7 @@ CONFIG_NET_ACT_NAT=m
|
||||||
# CONFIG_NET_ACT_SKBEDIT is not set
|
# CONFIG_NET_ACT_SKBEDIT is not set
|
||||||
# CONFIG_NET_CLS_IND is not set
|
# CONFIG_NET_CLS_IND is not set
|
||||||
CONFIG_NET_SCH_FIFO=y
|
CONFIG_NET_SCH_FIFO=y
|
||||||
|
# CONFIG_DCB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Network testing
|
# Network testing
|
||||||
|
@ -428,6 +439,7 @@ CONFIG_CAN_VCAN=m
|
||||||
# CONFIG_CAN_DEBUG_DEVICES is not set
|
# CONFIG_CAN_DEBUG_DEVICES is not set
|
||||||
# CONFIG_AF_RXRPC is not set
|
# CONFIG_AF_RXRPC is not set
|
||||||
# CONFIG_PHONET is not set
|
# CONFIG_PHONET is not set
|
||||||
|
# CONFIG_WIMAX is not set
|
||||||
# CONFIG_RFKILL is not set
|
# CONFIG_RFKILL is not set
|
||||||
# CONFIG_NET_9P is not set
|
# CONFIG_NET_9P is not set
|
||||||
# CONFIG_PCMCIA is not set
|
# CONFIG_PCMCIA is not set
|
||||||
|
@ -475,10 +487,14 @@ CONFIG_DASD_DIAG=y
|
||||||
CONFIG_DASD_EER=y
|
CONFIG_DASD_EER=y
|
||||||
CONFIG_VIRTIO_BLK=m
|
CONFIG_VIRTIO_BLK=m
|
||||||
CONFIG_MISC_DEVICES=y
|
CONFIG_MISC_DEVICES=y
|
||||||
# CONFIG_EEPROM_93CX6 is not set
|
|
||||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||||
# CONFIG_C2PORT is not set
|
# CONFIG_C2PORT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# EEPROM support
|
||||||
|
#
|
||||||
|
# CONFIG_EEPROM_93CX6 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# SCSI device support
|
# SCSI device support
|
||||||
#
|
#
|
||||||
|
@ -520,6 +536,7 @@ CONFIG_SCSI_FC_ATTRS=y
|
||||||
# CONFIG_SCSI_SRP_ATTRS is not set
|
# CONFIG_SCSI_SRP_ATTRS is not set
|
||||||
CONFIG_SCSI_LOWLEVEL=y
|
CONFIG_SCSI_LOWLEVEL=y
|
||||||
# CONFIG_ISCSI_TCP is not set
|
# CONFIG_ISCSI_TCP is not set
|
||||||
|
# CONFIG_LIBFC is not set
|
||||||
# CONFIG_SCSI_DEBUG is not set
|
# CONFIG_SCSI_DEBUG is not set
|
||||||
CONFIG_ZFCP=y
|
CONFIG_ZFCP=y
|
||||||
CONFIG_SCSI_DH=m
|
CONFIG_SCSI_DH=m
|
||||||
|
@ -566,6 +583,10 @@ CONFIG_NET_ETHERNET=y
|
||||||
CONFIG_NETDEV_1000=y
|
CONFIG_NETDEV_1000=y
|
||||||
CONFIG_NETDEV_10000=y
|
CONFIG_NETDEV_10000=y
|
||||||
# CONFIG_TR is not set
|
# CONFIG_TR is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||||
|
#
|
||||||
# CONFIG_WAN is not set
|
# CONFIG_WAN is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -593,9 +614,11 @@ CONFIG_VIRTIO_NET=m
|
||||||
#
|
#
|
||||||
CONFIG_DEVKMEM=y
|
CONFIG_DEVKMEM=y
|
||||||
CONFIG_UNIX98_PTYS=y
|
CONFIG_UNIX98_PTYS=y
|
||||||
|
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
CONFIG_HVC_DRIVER=y
|
CONFIG_HVC_DRIVER=y
|
||||||
|
CONFIG_HVC_IUCV=y
|
||||||
CONFIG_VIRTIO_CONSOLE=y
|
CONFIG_VIRTIO_CONSOLE=y
|
||||||
CONFIG_HW_RANDOM=m
|
CONFIG_HW_RANDOM=m
|
||||||
CONFIG_HW_RANDOM_VIRTIO=m
|
CONFIG_HW_RANDOM_VIRTIO=m
|
||||||
|
@ -645,7 +668,6 @@ CONFIG_S390_VMUR=m
|
||||||
# CONFIG_NEW_LEDS is not set
|
# CONFIG_NEW_LEDS is not set
|
||||||
CONFIG_ACCESSIBILITY=y
|
CONFIG_ACCESSIBILITY=y
|
||||||
# CONFIG_STAGING is not set
|
# CONFIG_STAGING is not set
|
||||||
CONFIG_STAGING_EXCLUDE_BUILD=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# File systems
|
# File systems
|
||||||
|
@ -668,6 +690,7 @@ CONFIG_FILE_LOCKING=y
|
||||||
# CONFIG_XFS_FS is not set
|
# CONFIG_XFS_FS is not set
|
||||||
# CONFIG_GFS2_FS is not set
|
# CONFIG_GFS2_FS is not set
|
||||||
# CONFIG_OCFS2_FS is not set
|
# CONFIG_OCFS2_FS is not set
|
||||||
|
# CONFIG_BTRFS_FS is not set
|
||||||
CONFIG_DNOTIFY=y
|
CONFIG_DNOTIFY=y
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
CONFIG_INOTIFY_USER=y
|
CONFIG_INOTIFY_USER=y
|
||||||
|
@ -703,10 +726,7 @@ CONFIG_TMPFS_POSIX_ACL=y
|
||||||
# CONFIG_HUGETLBFS is not set
|
# CONFIG_HUGETLBFS is not set
|
||||||
# CONFIG_HUGETLB_PAGE is not set
|
# CONFIG_HUGETLB_PAGE is not set
|
||||||
CONFIG_CONFIGFS_FS=m
|
CONFIG_CONFIGFS_FS=m
|
||||||
|
CONFIG_MISC_FILESYSTEMS=y
|
||||||
#
|
|
||||||
# Miscellaneous filesystems
|
|
||||||
#
|
|
||||||
# CONFIG_ADFS_FS is not set
|
# CONFIG_ADFS_FS is not set
|
||||||
# CONFIG_AFFS_FS is not set
|
# CONFIG_AFFS_FS is not set
|
||||||
# CONFIG_HFS_FS is not set
|
# CONFIG_HFS_FS is not set
|
||||||
|
@ -715,6 +735,7 @@ CONFIG_CONFIGFS_FS=m
|
||||||
# CONFIG_BFS_FS is not set
|
# CONFIG_BFS_FS is not set
|
||||||
# CONFIG_EFS_FS is not set
|
# CONFIG_EFS_FS is not set
|
||||||
# CONFIG_CRAMFS is not set
|
# CONFIG_CRAMFS is not set
|
||||||
|
# CONFIG_SQUASHFS is not set
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_OMFS_FS is not set
|
# CONFIG_OMFS_FS is not set
|
||||||
|
@ -808,6 +829,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
||||||
CONFIG_DEBUG_MEMORY_INIT=y
|
CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
# CONFIG_DEBUG_LIST is not set
|
# CONFIG_DEBUG_LIST is not set
|
||||||
# CONFIG_DEBUG_SG is not set
|
# CONFIG_DEBUG_SG is not set
|
||||||
|
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||||
# CONFIG_FRAME_POINTER is not set
|
# CONFIG_FRAME_POINTER is not set
|
||||||
# CONFIG_RCU_TORTURE_TEST is not set
|
# CONFIG_RCU_TORTURE_TEST is not set
|
||||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||||
|
@ -818,15 +840,19 @@ CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
# CONFIG_FAULT_INJECTION is not set
|
# CONFIG_FAULT_INJECTION is not set
|
||||||
# CONFIG_LATENCYTOP is not set
|
# CONFIG_LATENCYTOP is not set
|
||||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||||
|
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Tracers
|
# Tracers
|
||||||
#
|
#
|
||||||
|
# CONFIG_FUNCTION_TRACER is not set
|
||||||
# CONFIG_IRQSOFF_TRACER is not set
|
# CONFIG_IRQSOFF_TRACER is not set
|
||||||
# CONFIG_PREEMPT_TRACER is not set
|
# CONFIG_PREEMPT_TRACER is not set
|
||||||
# CONFIG_SCHED_TRACER is not set
|
# CONFIG_SCHED_TRACER is not set
|
||||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||||
# CONFIG_BOOT_TRACER is not set
|
# CONFIG_BOOT_TRACER is not set
|
||||||
|
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||||
|
# CONFIG_STACK_TRACER is not set
|
||||||
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
||||||
CONFIG_SAMPLES=y
|
CONFIG_SAMPLES=y
|
||||||
# CONFIG_SAMPLE_KOBJECT is not set
|
# CONFIG_SAMPLE_KOBJECT is not set
|
||||||
|
@ -847,11 +873,17 @@ CONFIG_CRYPTO=y
|
||||||
#
|
#
|
||||||
CONFIG_CRYPTO_FIPS=y
|
CONFIG_CRYPTO_FIPS=y
|
||||||
CONFIG_CRYPTO_ALGAPI=y
|
CONFIG_CRYPTO_ALGAPI=y
|
||||||
CONFIG_CRYPTO_AEAD=y
|
CONFIG_CRYPTO_ALGAPI2=y
|
||||||
|
CONFIG_CRYPTO_AEAD=m
|
||||||
|
CONFIG_CRYPTO_AEAD2=y
|
||||||
CONFIG_CRYPTO_BLKCIPHER=y
|
CONFIG_CRYPTO_BLKCIPHER=y
|
||||||
CONFIG_CRYPTO_HASH=y
|
CONFIG_CRYPTO_BLKCIPHER2=y
|
||||||
CONFIG_CRYPTO_RNG=y
|
CONFIG_CRYPTO_HASH=m
|
||||||
|
CONFIG_CRYPTO_HASH2=y
|
||||||
|
CONFIG_CRYPTO_RNG=m
|
||||||
|
CONFIG_CRYPTO_RNG2=y
|
||||||
CONFIG_CRYPTO_MANAGER=y
|
CONFIG_CRYPTO_MANAGER=y
|
||||||
|
CONFIG_CRYPTO_MANAGER2=y
|
||||||
CONFIG_CRYPTO_GF128MUL=m
|
CONFIG_CRYPTO_GF128MUL=m
|
||||||
# CONFIG_CRYPTO_NULL is not set
|
# CONFIG_CRYPTO_NULL is not set
|
||||||
# CONFIG_CRYPTO_CRYPTD is not set
|
# CONFIG_CRYPTO_CRYPTD is not set
|
||||||
|
@ -885,7 +917,7 @@ CONFIG_CRYPTO_HMAC=m
|
||||||
#
|
#
|
||||||
# Digest
|
# Digest
|
||||||
#
|
#
|
||||||
# CONFIG_CRYPTO_CRC32C is not set
|
CONFIG_CRYPTO_CRC32C=m
|
||||||
# CONFIG_CRYPTO_MD4 is not set
|
# CONFIG_CRYPTO_MD4 is not set
|
||||||
CONFIG_CRYPTO_MD5=m
|
CONFIG_CRYPTO_MD5=m
|
||||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||||
|
@ -942,6 +974,7 @@ CONFIG_S390_PRNG=m
|
||||||
# Library routines
|
# Library routines
|
||||||
#
|
#
|
||||||
CONFIG_BITREVERSE=m
|
CONFIG_BITREVERSE=m
|
||||||
|
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||||
# CONFIG_CRC_CCITT is not set
|
# CONFIG_CRC_CCITT is not set
|
||||||
# CONFIG_CRC16 is not set
|
# CONFIG_CRC16 is not set
|
||||||
CONFIG_CRC_T10DIF=y
|
CONFIG_CRC_T10DIF=y
|
||||||
|
|
|
@ -384,8 +384,8 @@ struct _lowcore
|
||||||
__u32 panic_magic; /* 0xe00 */
|
__u32 panic_magic; /* 0xe00 */
|
||||||
|
|
||||||
/* Per cpu primary space access list */
|
/* Per cpu primary space access list */
|
||||||
__u8 pad_0xe04[0xe3c-0xe04]; /* 0xe04 */
|
__u8 pad_0xe04[0xe38-0xe04]; /* 0xe04 */
|
||||||
__u32 vdso_per_cpu_data; /* 0xe3c */
|
__u64 vdso_per_cpu_data; /* 0xe38 */
|
||||||
__u32 paste[16]; /* 0xe40 */
|
__u32 paste[16]; /* 0xe40 */
|
||||||
|
|
||||||
__u8 pad13[0x11b8-0xe80]; /* 0xe80 */
|
__u8 pad13[0x11b8-0xe80]; /* 0xe80 */
|
||||||
|
|
|
@ -95,6 +95,7 @@ asmlinkage void do_softirq(void)
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_PROC_FS
|
||||||
void init_irq_proc(void)
|
void init_irq_proc(void)
|
||||||
{
|
{
|
||||||
struct proc_dir_entry *root_irq_dir;
|
struct proc_dir_entry *root_irq_dir;
|
||||||
|
@ -102,3 +103,4 @@ void init_irq_proc(void)
|
||||||
root_irq_dir = proc_mkdir("irq", NULL);
|
root_irq_dir = proc_mkdir("irq", NULL);
|
||||||
create_prof_cpu_mask(root_irq_dir);
|
create_prof_cpu_mask(root_irq_dir);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -891,10 +891,35 @@ prom_tba: .xword 0
|
||||||
tlb_type: .word 0 /* Must NOT end up in BSS */
|
tlb_type: .word 0 /* Must NOT end up in BSS */
|
||||||
.section ".fixup",#alloc,#execinstr
|
.section ".fixup",#alloc,#execinstr
|
||||||
|
|
||||||
.globl __ret_efault, __retl_efault
|
.globl __ret_efault, __retl_efault, __ret_one, __retl_one
|
||||||
__ret_efault:
|
ENTRY(__ret_efault)
|
||||||
ret
|
ret
|
||||||
restore %g0, -EFAULT, %o0
|
restore %g0, -EFAULT, %o0
|
||||||
__retl_efault:
|
ENDPROC(__ret_efault)
|
||||||
|
|
||||||
|
ENTRY(__retl_efault)
|
||||||
retl
|
retl
|
||||||
mov -EFAULT, %o0
|
mov -EFAULT, %o0
|
||||||
|
ENDPROC(__retl_efault)
|
||||||
|
|
||||||
|
ENTRY(__retl_one)
|
||||||
|
retl
|
||||||
|
mov 1, %o0
|
||||||
|
ENDPROC(__retl_one)
|
||||||
|
|
||||||
|
ENTRY(__ret_one_asi)
|
||||||
|
wr %g0, ASI_AIUS, %asi
|
||||||
|
ret
|
||||||
|
restore %g0, 1, %o0
|
||||||
|
ENDPROC(__ret_one_asi)
|
||||||
|
|
||||||
|
ENTRY(__retl_one_asi)
|
||||||
|
wr %g0, ASI_AIUS, %asi
|
||||||
|
retl
|
||||||
|
mov 1, %o0
|
||||||
|
ENDPROC(__retl_one_asi)
|
||||||
|
|
||||||
|
ENTRY(__retl_o1)
|
||||||
|
retl
|
||||||
|
mov %o1, %o0
|
||||||
|
ENDPROC(__retl_o1)
|
||||||
|
|
|
@ -70,6 +70,7 @@ static void die_nmi(const char *str, struct pt_regs *regs, int do_panic)
|
||||||
printk(" on CPU%d, ip %08lx, registers:\n",
|
printk(" on CPU%d, ip %08lx, registers:\n",
|
||||||
smp_processor_id(), regs->tpc);
|
smp_processor_id(), regs->tpc);
|
||||||
show_regs(regs);
|
show_regs(regs);
|
||||||
|
dump_stack();
|
||||||
|
|
||||||
bust_spinlocks(0);
|
bust_spinlocks(0);
|
||||||
|
|
||||||
|
|
|
@ -133,11 +133,16 @@ int __init pcr_arch_init(void)
|
||||||
|
|
||||||
case cheetah:
|
case cheetah:
|
||||||
case cheetah_plus:
|
case cheetah_plus:
|
||||||
case spitfire:
|
|
||||||
pcr_ops = &direct_pcr_ops;
|
pcr_ops = &direct_pcr_ops;
|
||||||
pcr_enable = PCR_SUN4U_ENABLE;
|
pcr_enable = PCR_SUN4U_ENABLE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case spitfire:
|
||||||
|
/* UltraSPARC-I/II and derivatives lack a profile
|
||||||
|
* counter overflow interrupt so we can't make use of
|
||||||
|
* their hardware currently.
|
||||||
|
*/
|
||||||
|
/* fallthrough */
|
||||||
default:
|
default:
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto out_unregister;
|
goto out_unregister;
|
||||||
|
|
|
@ -6,13 +6,9 @@
|
||||||
|
|
||||||
#define EX_ST(x,y) \
|
#define EX_ST(x,y) \
|
||||||
98: x,y; \
|
98: x,y; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov %o1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_o1; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,9 @@
|
||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -27,7 +23,7 @@
|
||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,9 @@
|
||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -31,7 +27,7 @@
|
||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,9 @@
|
||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: wr %g0, ASI_AIUS, %asi;\
|
|
||||||
retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one_asi;\
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -33,7 +28,7 @@
|
||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,9 @@
|
||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: wr %g0, ASI_AIUS, %asi;\
|
|
||||||
retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one_asi;\
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -42,7 +37,7 @@
|
||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,9 @@
|
||||||
|
|
||||||
#define EX_ST(x,y) \
|
#define EX_ST(x,y) \
|
||||||
98: x,y; \
|
98: x,y; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov %o1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_o1; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,9 @@
|
||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: wr %g0, ASI_AIUS, %asi;\
|
|
||||||
ret; \
|
|
||||||
restore %g0, 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __ret_one_asi;\
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -30,7 +25,7 @@
|
||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,9 @@
|
||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: wr %g0, ASI_AIUS, %asi;\
|
|
||||||
ret; \
|
|
||||||
restore %g0, 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __ret_one_asi;\
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -33,7 +28,7 @@
|
||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,9 @@
|
||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -27,7 +23,7 @@
|
||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop; \
|
nop; \
|
||||||
|
|
||||||
#include "U1memcpy.S"
|
#include "U1memcpy.S"
|
||||||
|
|
|
@ -5,13 +5,9 @@
|
||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -27,7 +23,7 @@
|
||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop; \
|
nop; \
|
||||||
|
|
||||||
#include "U1memcpy.S"
|
#include "U1memcpy.S"
|
||||||
|
|
|
@ -5,13 +5,9 @@
|
||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,9 @@
|
||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -27,7 +23,7 @@
|
||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop; \
|
nop; \
|
||||||
|
|
||||||
#include "U3memcpy.S"
|
#include "U3memcpy.S"
|
||||||
|
|
|
@ -88,13 +88,9 @@ __bzero_done:
|
||||||
|
|
||||||
#define EX_ST(x,y) \
|
#define EX_ST(x,y) \
|
||||||
98: x,y; \
|
98: x,y; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov %o1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_o1; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
|
|
@ -3,19 +3,16 @@
|
||||||
* Copyright (C) 1999, 2000, 2004 David S. Miller (davem@redhat.com)
|
* Copyright (C) 1999, 2000, 2004 David S. Miller (davem@redhat.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
#include <asm/asi.h>
|
#include <asm/asi.h>
|
||||||
|
|
||||||
#define XCC xcc
|
#define XCC xcc
|
||||||
|
|
||||||
#define EX(x,y) \
|
#define EX(x,y) \
|
||||||
98: x,y; \
|
98: x,y; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -31,18 +28,7 @@
|
||||||
* to copy register windows around during thread cloning.
|
* to copy register windows around during thread cloning.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.globl ___copy_in_user
|
ENTRY(___copy_in_user) /* %o0=dst, %o1=src, %o2=len */
|
||||||
.type ___copy_in_user,#function
|
|
||||||
___copy_in_user: /* %o0=dst, %o1=src, %o2=len */
|
|
||||||
/* Writing to %asi is _expensive_ so we hardcode it.
|
|
||||||
* Reading %asi to check for KERNEL_DS is comparatively
|
|
||||||
* cheap.
|
|
||||||
*/
|
|
||||||
rd %asi, %g1
|
|
||||||
cmp %g1, ASI_AIUS
|
|
||||||
bne,pn %icc, memcpy_user_stub
|
|
||||||
nop
|
|
||||||
|
|
||||||
cmp %o2, 0
|
cmp %o2, 0
|
||||||
be,pn %XCC, 85f
|
be,pn %XCC, 85f
|
||||||
or %o0, %o1, %o3
|
or %o0, %o1, %o3
|
||||||
|
@ -53,22 +39,24 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */
|
||||||
/* 16 < len <= 64 */
|
/* 16 < len <= 64 */
|
||||||
andcc %o3, 0x7, %g0
|
andcc %o3, 0x7, %g0
|
||||||
bne,pn %XCC, 90f
|
bne,pn %XCC, 90f
|
||||||
sub %o0, %o1, %o3
|
nop
|
||||||
|
|
||||||
andn %o2, 0x7, %o4
|
andn %o2, 0x7, %o4
|
||||||
and %o2, 0x7, %o2
|
and %o2, 0x7, %o2
|
||||||
1: subcc %o4, 0x8, %o4
|
1: subcc %o4, 0x8, %o4
|
||||||
EX(ldxa [%o1] %asi, %o5)
|
EX(ldxa [%o1] %asi, %o5)
|
||||||
EX(stxa %o5, [%o1 + %o3] ASI_AIUS)
|
EX(stxa %o5, [%o0] %asi)
|
||||||
|
add %o1, 0x8, %o1
|
||||||
bgu,pt %XCC, 1b
|
bgu,pt %XCC, 1b
|
||||||
add %o1, 0x8, %o1
|
add %o0, 0x8, %o0
|
||||||
andcc %o2, 0x4, %g0
|
andcc %o2, 0x4, %g0
|
||||||
be,pt %XCC, 1f
|
be,pt %XCC, 1f
|
||||||
nop
|
nop
|
||||||
sub %o2, 0x4, %o2
|
sub %o2, 0x4, %o2
|
||||||
EX(lduwa [%o1] %asi, %o5)
|
EX(lduwa [%o1] %asi, %o5)
|
||||||
EX(stwa %o5, [%o1 + %o3] ASI_AIUS)
|
EX(stwa %o5, [%o0] %asi)
|
||||||
add %o1, 0x4, %o1
|
add %o1, 0x4, %o1
|
||||||
|
add %o0, 0x4, %o0
|
||||||
1: cmp %o2, 0
|
1: cmp %o2, 0
|
||||||
be,pt %XCC, 85f
|
be,pt %XCC, 85f
|
||||||
nop
|
nop
|
||||||
|
@ -78,14 +66,15 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */
|
||||||
80: /* 0 < len <= 16 */
|
80: /* 0 < len <= 16 */
|
||||||
andcc %o3, 0x3, %g0
|
andcc %o3, 0x3, %g0
|
||||||
bne,pn %XCC, 90f
|
bne,pn %XCC, 90f
|
||||||
sub %o0, %o1, %o3
|
nop
|
||||||
|
|
||||||
82:
|
82:
|
||||||
subcc %o2, 4, %o2
|
subcc %o2, 4, %o2
|
||||||
EX(lduwa [%o1] %asi, %g1)
|
EX(lduwa [%o1] %asi, %g1)
|
||||||
EX(stwa %g1, [%o1 + %o3] ASI_AIUS)
|
EX(stwa %g1, [%o0] %asi)
|
||||||
|
add %o1, 4, %o1
|
||||||
bgu,pt %XCC, 82b
|
bgu,pt %XCC, 82b
|
||||||
add %o1, 4, %o1
|
add %o0, 4, %o0
|
||||||
|
|
||||||
85: retl
|
85: retl
|
||||||
clr %o0
|
clr %o0
|
||||||
|
@ -94,26 +83,10 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */
|
||||||
90:
|
90:
|
||||||
subcc %o2, 1, %o2
|
subcc %o2, 1, %o2
|
||||||
EX(lduba [%o1] %asi, %g1)
|
EX(lduba [%o1] %asi, %g1)
|
||||||
EX(stba %g1, [%o1 + %o3] ASI_AIUS)
|
EX(stba %g1, [%o0] %asi)
|
||||||
|
add %o1, 1, %o1
|
||||||
bgu,pt %XCC, 90b
|
bgu,pt %XCC, 90b
|
||||||
add %o1, 1, %o1
|
add %o0, 1, %o0
|
||||||
retl
|
retl
|
||||||
clr %o0
|
clr %o0
|
||||||
|
ENDPROC(___copy_in_user)
|
||||||
.size ___copy_in_user, .-___copy_in_user
|
|
||||||
|
|
||||||
/* Act like copy_{to,in}_user(), ie. return zero instead
|
|
||||||
* of original destination pointer. This is invoked when
|
|
||||||
* copy_{to,in}_user() finds that %asi is kernel space.
|
|
||||||
*/
|
|
||||||
.globl memcpy_user_stub
|
|
||||||
.type memcpy_user_stub,#function
|
|
||||||
memcpy_user_stub:
|
|
||||||
save %sp, -192, %sp
|
|
||||||
mov %i0, %o0
|
|
||||||
mov %i1, %o1
|
|
||||||
call memcpy
|
|
||||||
mov %i2, %o2
|
|
||||||
ret
|
|
||||||
restore %g0, %g0, %o0
|
|
||||||
.size memcpy_user_stub, .-memcpy_user_stub
|
|
||||||
|
|
|
@ -1803,6 +1803,17 @@ config DMAR
|
||||||
and include PCI device scope covered by these DMA
|
and include PCI device scope covered by these DMA
|
||||||
remapping devices.
|
remapping devices.
|
||||||
|
|
||||||
|
config DMAR_DEFAULT_ON
|
||||||
|
def_bool n
|
||||||
|
prompt "Enable DMA Remapping Devices by default"
|
||||||
|
depends on DMAR
|
||||||
|
help
|
||||||
|
Selecting this option will enable a DMAR device at boot time if
|
||||||
|
one is found. If this option is not selected, DMAR support can
|
||||||
|
be enabled by passing intel_iommu=on to the kernel. It is
|
||||||
|
recommended you say N here while the DMAR code remains
|
||||||
|
experimental.
|
||||||
|
|
||||||
config DMAR_GFX_WA
|
config DMAR_GFX_WA
|
||||||
def_bool y
|
def_bool y
|
||||||
prompt "Support for Graphics workaround"
|
prompt "Support for Graphics workaround"
|
||||||
|
|
|
@ -167,9 +167,9 @@ config MK7
|
||||||
config MK8
|
config MK8
|
||||||
bool "Opteron/Athlon64/Hammer/K8"
|
bool "Opteron/Athlon64/Hammer/K8"
|
||||||
help
|
help
|
||||||
Select this for an AMD Opteron or Athlon64 Hammer-family processor. Enables
|
Select this for an AMD Opteron or Athlon64 Hammer-family processor.
|
||||||
use of some extended instructions, and passes appropriate optimization
|
Enables use of some extended instructions, and passes appropriate
|
||||||
flags to GCC.
|
optimization flags to GCC.
|
||||||
|
|
||||||
config MCRUSOE
|
config MCRUSOE
|
||||||
bool "Crusoe"
|
bool "Crusoe"
|
||||||
|
@ -256,9 +256,11 @@ config MPSC
|
||||||
config MCORE2
|
config MCORE2
|
||||||
bool "Core 2/newer Xeon"
|
bool "Core 2/newer Xeon"
|
||||||
help
|
help
|
||||||
Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and 53xx)
|
|
||||||
CPUs. You can distinguish newer from older Xeons by the CPU family
|
Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and
|
||||||
in /proc/cpuinfo. Newer ones have 6 and older ones 15 (not a typo)
|
53xx) CPUs. You can distinguish newer from older Xeons by the CPU
|
||||||
|
family in /proc/cpuinfo. Newer ones have 6 and older ones 15
|
||||||
|
(not a typo)
|
||||||
|
|
||||||
config GENERIC_CPU
|
config GENERIC_CPU
|
||||||
bool "Generic-x86-64"
|
bool "Generic-x86-64"
|
||||||
|
@ -320,14 +322,14 @@ config X86_PPRO_FENCE
|
||||||
bool "PentiumPro memory ordering errata workaround"
|
bool "PentiumPro memory ordering errata workaround"
|
||||||
depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1
|
depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1
|
||||||
help
|
help
|
||||||
Old PentiumPro multiprocessor systems had errata that could cause memory
|
Old PentiumPro multiprocessor systems had errata that could cause
|
||||||
operations to violate the x86 ordering standard in rare cases. Enabling this
|
memory operations to violate the x86 ordering standard in rare cases.
|
||||||
option will attempt to work around some (but not all) occurances of
|
Enabling this option will attempt to work around some (but not all)
|
||||||
this problem, at the cost of much heavier spinlock and memory barrier
|
occurances of this problem, at the cost of much heavier spinlock and
|
||||||
operations.
|
memory barrier operations.
|
||||||
|
|
||||||
If unsure, say n here. Even distro kernels should think twice before enabling
|
If unsure, say n here. Even distro kernels should think twice before
|
||||||
this: there are few systems, and an unlikely bug.
|
enabling this: there are few systems, and an unlikely bug.
|
||||||
|
|
||||||
config X86_F00F_BUG
|
config X86_F00F_BUG
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
|
@ -23,8 +23,6 @@
|
||||||
*/
|
*/
|
||||||
static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump)
|
static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump)
|
||||||
{
|
{
|
||||||
u16 gs;
|
|
||||||
|
|
||||||
/* changed the size calculations - should hopefully work better. lbt */
|
/* changed the size calculations - should hopefully work better. lbt */
|
||||||
dump->magic = CMAGIC;
|
dump->magic = CMAGIC;
|
||||||
dump->start_code = 0;
|
dump->start_code = 0;
|
||||||
|
@ -57,7 +55,7 @@ static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump)
|
||||||
dump->regs.ds = (u16)regs->ds;
|
dump->regs.ds = (u16)regs->ds;
|
||||||
dump->regs.es = (u16)regs->es;
|
dump->regs.es = (u16)regs->es;
|
||||||
dump->regs.fs = (u16)regs->fs;
|
dump->regs.fs = (u16)regs->fs;
|
||||||
savesegment(gs, gs);
|
savesegment(gs, dump->regs.gs);
|
||||||
dump->regs.orig_ax = regs->orig_ax;
|
dump->regs.orig_ax = regs->orig_ax;
|
||||||
dump->regs.ip = regs->ip;
|
dump->regs.ip = regs->ip;
|
||||||
dump->regs.cs = (u16)regs->cs;
|
dump->regs.cs = (u16)regs->cs;
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
#define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */
|
#define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */
|
||||||
#define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */
|
#define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */
|
||||||
#define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */
|
#define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */
|
||||||
|
#define X86_FEATURE_CLFLUSH_MONITOR (3*32+25) /* "" clflush reqd with monitor */
|
||||||
|
|
||||||
/* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
|
/* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
|
||||||
#define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */
|
#define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */
|
||||||
|
|
|
@ -1,31 +1,18 @@
|
||||||
#ifndef _ASM_X86_MATH_EMU_H
|
#ifndef _ASM_X86_MATH_EMU_H
|
||||||
#define _ASM_X86_MATH_EMU_H
|
#define _ASM_X86_MATH_EMU_H
|
||||||
|
|
||||||
|
#include <asm/ptrace.h>
|
||||||
|
#include <asm/vm86.h>
|
||||||
|
|
||||||
/* This structure matches the layout of the data saved to the stack
|
/* This structure matches the layout of the data saved to the stack
|
||||||
following a device-not-present interrupt, part of it saved
|
following a device-not-present interrupt, part of it saved
|
||||||
automatically by the 80386/80486.
|
automatically by the 80386/80486.
|
||||||
*/
|
*/
|
||||||
struct info {
|
struct math_emu_info {
|
||||||
long ___orig_eip;
|
long ___orig_eip;
|
||||||
long ___ebx;
|
union {
|
||||||
long ___ecx;
|
struct pt_regs *regs;
|
||||||
long ___edx;
|
struct kernel_vm86_regs *vm86;
|
||||||
long ___esi;
|
};
|
||||||
long ___edi;
|
|
||||||
long ___ebp;
|
|
||||||
long ___eax;
|
|
||||||
long ___ds;
|
|
||||||
long ___es;
|
|
||||||
long ___fs;
|
|
||||||
long ___orig_eax;
|
|
||||||
long ___eip;
|
|
||||||
long ___cs;
|
|
||||||
long ___eflags;
|
|
||||||
long ___esp;
|
|
||||||
long ___ss;
|
|
||||||
long ___vm86_es; /* This and the following only in vm86 mode */
|
|
||||||
long ___vm86_ds;
|
|
||||||
long ___vm86_fs;
|
|
||||||
long ___vm86_gs;
|
|
||||||
};
|
};
|
||||||
#endif /* _ASM_X86_MATH_EMU_H */
|
#endif /* _ASM_X86_MATH_EMU_H */
|
||||||
|
|
|
@ -60,6 +60,7 @@ extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger,
|
||||||
u32 gsi);
|
u32 gsi);
|
||||||
extern void mp_config_acpi_legacy_irqs(void);
|
extern void mp_config_acpi_legacy_irqs(void);
|
||||||
extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low);
|
extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low);
|
||||||
|
extern int acpi_probe_gsi(void);
|
||||||
#ifdef CONFIG_X86_IO_APIC
|
#ifdef CONFIG_X86_IO_APIC
|
||||||
extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
|
extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
|
||||||
u32 gsi, int triggering, int polarity);
|
u32 gsi, int triggering, int polarity);
|
||||||
|
@ -71,6 +72,11 @@ mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#else /* !CONFIG_ACPI: */
|
||||||
|
static inline int acpi_probe_gsi(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif /* CONFIG_ACPI */
|
#endif /* CONFIG_ACPI */
|
||||||
|
|
||||||
#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)
|
#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)
|
||||||
|
|
|
@ -302,16 +302,30 @@ static inline pte_t pte_mkspecial(pte_t pte)
|
||||||
|
|
||||||
extern pteval_t __supported_pte_mask;
|
extern pteval_t __supported_pte_mask;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mask out unsupported bits in a present pgprot. Non-present pgprots
|
||||||
|
* can use those bits for other purposes, so leave them be.
|
||||||
|
*/
|
||||||
|
static inline pgprotval_t massage_pgprot(pgprot_t pgprot)
|
||||||
|
{
|
||||||
|
pgprotval_t protval = pgprot_val(pgprot);
|
||||||
|
|
||||||
|
if (protval & _PAGE_PRESENT)
|
||||||
|
protval &= __supported_pte_mask;
|
||||||
|
|
||||||
|
return protval;
|
||||||
|
}
|
||||||
|
|
||||||
static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
|
static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
|
||||||
{
|
{
|
||||||
return __pte((((phys_addr_t)page_nr << PAGE_SHIFT) |
|
return __pte(((phys_addr_t)page_nr << PAGE_SHIFT) |
|
||||||
pgprot_val(pgprot)) & __supported_pte_mask);
|
massage_pgprot(pgprot));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
|
static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
|
||||||
{
|
{
|
||||||
return __pmd((((phys_addr_t)page_nr << PAGE_SHIFT) |
|
return __pmd(((phys_addr_t)page_nr << PAGE_SHIFT) |
|
||||||
pgprot_val(pgprot)) & __supported_pte_mask);
|
massage_pgprot(pgprot));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||||
|
@ -323,7 +337,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||||
* the newprot (if present):
|
* the newprot (if present):
|
||||||
*/
|
*/
|
||||||
val &= _PAGE_CHG_MASK;
|
val &= _PAGE_CHG_MASK;
|
||||||
val |= pgprot_val(newprot) & (~_PAGE_CHG_MASK) & __supported_pte_mask;
|
val |= massage_pgprot(newprot) & ~_PAGE_CHG_MASK;
|
||||||
|
|
||||||
return __pte(val);
|
return __pte(val);
|
||||||
}
|
}
|
||||||
|
@ -339,7 +353,7 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
||||||
|
|
||||||
#define pte_pgprot(x) __pgprot(pte_flags(x) & PTE_FLAGS_MASK)
|
#define pte_pgprot(x) __pgprot(pte_flags(x) & PTE_FLAGS_MASK)
|
||||||
|
|
||||||
#define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask)
|
#define canon_pgprot(p) __pgprot(massage_pgprot(p))
|
||||||
|
|
||||||
static inline int is_new_memtype_allowed(unsigned long flags,
|
static inline int is_new_memtype_allowed(unsigned long flags,
|
||||||
unsigned long new_flags)
|
unsigned long new_flags)
|
||||||
|
|
|
@ -353,7 +353,7 @@ struct i387_soft_struct {
|
||||||
u8 no_update;
|
u8 no_update;
|
||||||
u8 rm;
|
u8 rm;
|
||||||
u8 alimit;
|
u8 alimit;
|
||||||
struct info *info;
|
struct math_emu_info *info;
|
||||||
u32 entry_eip;
|
u32 entry_eip;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ dotraplinkage void do_int3(struct pt_regs *, long);
|
||||||
dotraplinkage void do_overflow(struct pt_regs *, long);
|
dotraplinkage void do_overflow(struct pt_regs *, long);
|
||||||
dotraplinkage void do_bounds(struct pt_regs *, long);
|
dotraplinkage void do_bounds(struct pt_regs *, long);
|
||||||
dotraplinkage void do_invalid_op(struct pt_regs *, long);
|
dotraplinkage void do_invalid_op(struct pt_regs *, long);
|
||||||
dotraplinkage void do_device_not_available(struct pt_regs *, long);
|
dotraplinkage void do_device_not_available(struct pt_regs);
|
||||||
dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long);
|
dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long);
|
||||||
dotraplinkage void do_invalid_TSS(struct pt_regs *, long);
|
dotraplinkage void do_invalid_TSS(struct pt_regs *, long);
|
||||||
dotraplinkage void do_segment_not_present(struct pt_regs *, long);
|
dotraplinkage void do_segment_not_present(struct pt_regs *, long);
|
||||||
|
@ -77,7 +77,7 @@ extern int panic_on_unrecovered_nmi;
|
||||||
extern int kstack_depth_to_print;
|
extern int kstack_depth_to_print;
|
||||||
|
|
||||||
void math_error(void __user *);
|
void math_error(void __user *);
|
||||||
asmlinkage void math_emulate(long);
|
void math_emulate(struct math_emu_info *);
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
unsigned long patch_espfix_desc(unsigned long, unsigned long);
|
unsigned long patch_espfix_desc(unsigned long, unsigned long);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -137,7 +137,7 @@ static inline pte_t mfn_pte(unsigned long page_nr, pgprot_t pgprot)
|
||||||
pte_t pte;
|
pte_t pte;
|
||||||
|
|
||||||
pte.pte = ((phys_addr_t)page_nr << PAGE_SHIFT) |
|
pte.pte = ((phys_addr_t)page_nr << PAGE_SHIFT) |
|
||||||
(pgprot_val(pgprot) & __supported_pte_mask);
|
massage_pgprot(pgprot);
|
||||||
|
|
||||||
return pte;
|
return pte;
|
||||||
}
|
}
|
||||||
|
|
|
@ -973,6 +973,29 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base)
|
||||||
nr_ioapics++;
|
nr_ioapics++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __init acpi_probe_gsi(void)
|
||||||
|
{
|
||||||
|
int idx;
|
||||||
|
int gsi;
|
||||||
|
int max_gsi = 0;
|
||||||
|
|
||||||
|
if (acpi_disabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!acpi_ioapic)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
max_gsi = 0;
|
||||||
|
for (idx = 0; idx < nr_ioapics; idx++) {
|
||||||
|
gsi = mp_ioapic_routing[idx].gsi_end;
|
||||||
|
|
||||||
|
if (gsi > max_gsi)
|
||||||
|
max_gsi = gsi;
|
||||||
|
}
|
||||||
|
|
||||||
|
return max_gsi + 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void assign_to_mp_irq(struct mp_config_intsrc *m,
|
static void assign_to_mp_irq(struct mp_config_intsrc *m,
|
||||||
struct mp_config_intsrc *mp_irq)
|
struct mp_config_intsrc *mp_irq)
|
||||||
{
|
{
|
||||||
|
|
|
@ -291,6 +291,9 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
|
||||||
ds_init_intel(c);
|
ds_init_intel(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c->x86 == 6 && c->x86_model == 29 && cpu_has_clflush)
|
||||||
|
set_cpu_cap(c, X86_FEATURE_CLFLUSH_MONITOR);
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
if (c->x86 == 15)
|
if (c->x86 == 15)
|
||||||
c->x86_cache_alignment = c->x86_clflush_size * 2;
|
c->x86_cache_alignment = c->x86_clflush_size * 2;
|
||||||
|
|
|
@ -897,13 +897,21 @@ static unsigned long hpet_rtc_flags;
|
||||||
static int hpet_prev_update_sec;
|
static int hpet_prev_update_sec;
|
||||||
static struct rtc_time hpet_alarm_time;
|
static struct rtc_time hpet_alarm_time;
|
||||||
static unsigned long hpet_pie_count;
|
static unsigned long hpet_pie_count;
|
||||||
static unsigned long hpet_t1_cmp;
|
static u32 hpet_t1_cmp;
|
||||||
static unsigned long hpet_default_delta;
|
static unsigned long hpet_default_delta;
|
||||||
static unsigned long hpet_pie_delta;
|
static unsigned long hpet_pie_delta;
|
||||||
static unsigned long hpet_pie_limit;
|
static unsigned long hpet_pie_limit;
|
||||||
|
|
||||||
static rtc_irq_handler irq_handler;
|
static rtc_irq_handler irq_handler;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check that the hpet counter c1 is ahead of the c2
|
||||||
|
*/
|
||||||
|
static inline int hpet_cnt_ahead(u32 c1, u32 c2)
|
||||||
|
{
|
||||||
|
return (s32)(c2 - c1) < 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Registers a IRQ handler.
|
* Registers a IRQ handler.
|
||||||
*/
|
*/
|
||||||
|
@ -1075,7 +1083,7 @@ static void hpet_rtc_timer_reinit(void)
|
||||||
hpet_t1_cmp += delta;
|
hpet_t1_cmp += delta;
|
||||||
hpet_writel(hpet_t1_cmp, HPET_T1_CMP);
|
hpet_writel(hpet_t1_cmp, HPET_T1_CMP);
|
||||||
lost_ints++;
|
lost_ints++;
|
||||||
} while ((long)(hpet_readl(HPET_COUNTER) - hpet_t1_cmp) > 0);
|
} while (!hpet_cnt_ahead(hpet_t1_cmp, hpet_readl(HPET_COUNTER)));
|
||||||
|
|
||||||
if (lost_ints) {
|
if (lost_ints) {
|
||||||
if (hpet_rtc_flags & RTC_PIE)
|
if (hpet_rtc_flags & RTC_PIE)
|
||||||
|
|
|
@ -28,10 +28,10 @@ static int i8237A_resume(struct sys_device *dev)
|
||||||
|
|
||||||
flags = claim_dma_lock();
|
flags = claim_dma_lock();
|
||||||
|
|
||||||
dma_outb(DMA1_RESET_REG, 0);
|
dma_outb(0, DMA1_RESET_REG);
|
||||||
dma_outb(DMA2_RESET_REG, 0);
|
dma_outb(0, DMA2_RESET_REG);
|
||||||
|
|
||||||
for (i = 0;i < 8;i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
set_dma_addr(i, 0x000000);
|
set_dma_addr(i, 0x000000);
|
||||||
/* DMA count is a bit weird so this is not 0 */
|
/* DMA count is a bit weird so this is not 0 */
|
||||||
set_dma_count(i, 1);
|
set_dma_count(i, 1);
|
||||||
|
@ -51,14 +51,14 @@ static int i8237A_suspend(struct sys_device *dev, pm_message_t state)
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sysdev_class i8237_sysdev_class = {
|
static struct sysdev_class i8237_sysdev_class = {
|
||||||
.name = "i8237",
|
.name = "i8237",
|
||||||
.suspend = i8237A_suspend,
|
.suspend = i8237A_suspend,
|
||||||
.resume = i8237A_resume,
|
.resume = i8237A_resume,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sys_device device_i8237A = {
|
static struct sys_device device_i8237A = {
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.cls = &i8237_sysdev_class,
|
.cls = &i8237_sysdev_class,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init i8237A_init_sysfs(void)
|
static int __init i8237A_init_sysfs(void)
|
||||||
|
@ -68,5 +68,4 @@ static int __init i8237A_init_sysfs(void)
|
||||||
error = sysdev_register(&device_i8237A);
|
error = sysdev_register(&device_i8237A);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
device_initcall(i8237A_init_sysfs);
|
device_initcall(i8237A_init_sysfs);
|
||||||
|
|
|
@ -3841,14 +3841,24 @@ int __init io_apic_get_redir_entries (int ioapic)
|
||||||
|
|
||||||
void __init probe_nr_irqs_gsi(void)
|
void __init probe_nr_irqs_gsi(void)
|
||||||
{
|
{
|
||||||
int idx;
|
|
||||||
int nr = 0;
|
int nr = 0;
|
||||||
|
|
||||||
for (idx = 0; idx < nr_ioapics; idx++)
|
nr = acpi_probe_gsi();
|
||||||
nr += io_apic_get_redir_entries(idx) + 1;
|
if (nr > nr_irqs_gsi) {
|
||||||
|
|
||||||
if (nr > nr_irqs_gsi)
|
|
||||||
nr_irqs_gsi = nr;
|
nr_irqs_gsi = nr;
|
||||||
|
} else {
|
||||||
|
/* for acpi=off or acpi is not compiled in */
|
||||||
|
int idx;
|
||||||
|
|
||||||
|
nr = 0;
|
||||||
|
for (idx = 0; idx < nr_ioapics; idx++)
|
||||||
|
nr += io_apic_get_redir_entries(idx) + 1;
|
||||||
|
|
||||||
|
if (nr > nr_irqs_gsi)
|
||||||
|
nr_irqs_gsi = nr;
|
||||||
|
}
|
||||||
|
|
||||||
|
printk(KERN_DEBUG "nr_irqs_gsi: %d\n", nr_irqs_gsi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
|
|
|
@ -180,6 +180,9 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx)
|
||||||
|
|
||||||
trace_power_start(&it, POWER_CSTATE, (ax>>4)+1);
|
trace_power_start(&it, POWER_CSTATE, (ax>>4)+1);
|
||||||
if (!need_resched()) {
|
if (!need_resched()) {
|
||||||
|
if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR))
|
||||||
|
clflush((void *)¤t_thread_info()->flags);
|
||||||
|
|
||||||
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
||||||
smp_mb();
|
smp_mb();
|
||||||
if (!need_resched())
|
if (!need_resched())
|
||||||
|
@ -194,6 +197,9 @@ static void mwait_idle(void)
|
||||||
struct power_trace it;
|
struct power_trace it;
|
||||||
if (!need_resched()) {
|
if (!need_resched()) {
|
||||||
trace_power_start(&it, POWER_CSTATE, 1);
|
trace_power_start(&it, POWER_CSTATE, 1);
|
||||||
|
if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR))
|
||||||
|
clflush((void *)¤t_thread_info()->flags);
|
||||||
|
|
||||||
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
||||||
smp_mb();
|
smp_mb();
|
||||||
if (!need_resched())
|
if (!need_resched())
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
|
#include <linux/dmi.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
@ -151,14 +152,18 @@ void __show_regs(struct pt_regs *regs, int all)
|
||||||
unsigned long d0, d1, d2, d3, d6, d7;
|
unsigned long d0, d1, d2, d3, d6, d7;
|
||||||
unsigned int fsindex, gsindex;
|
unsigned int fsindex, gsindex;
|
||||||
unsigned int ds, cs, es;
|
unsigned int ds, cs, es;
|
||||||
|
const char *board;
|
||||||
|
|
||||||
printk("\n");
|
printk("\n");
|
||||||
print_modules();
|
print_modules();
|
||||||
printk(KERN_INFO "Pid: %d, comm: %.20s %s %s %.*s\n",
|
board = dmi_get_system_info(DMI_PRODUCT_NAME);
|
||||||
|
if (!board)
|
||||||
|
board = "";
|
||||||
|
printk(KERN_INFO "Pid: %d, comm: %.20s %s %s %.*s %s\n",
|
||||||
current->pid, current->comm, print_tainted(),
|
current->pid, current->comm, print_tainted(),
|
||||||
init_utsname()->release,
|
init_utsname()->release,
|
||||||
(int)strcspn(init_utsname()->version, " "),
|
(int)strcspn(init_utsname()->version, " "),
|
||||||
init_utsname()->version);
|
init_utsname()->version, board);
|
||||||
printk(KERN_INFO "RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->ip);
|
printk(KERN_INFO "RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->ip);
|
||||||
printk_address(regs->ip, 1);
|
printk_address(regs->ip, 1);
|
||||||
printk(KERN_INFO "RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss,
|
printk(KERN_INFO "RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss,
|
||||||
|
|
|
@ -607,7 +607,7 @@ struct x86_quirks *x86_quirks __initdata = &default_x86_quirks;
|
||||||
static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
|
static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
|
||||||
{
|
{
|
||||||
printk(KERN_NOTICE
|
printk(KERN_NOTICE
|
||||||
"%s detected: BIOS may corrupt low RAM, working it around.\n",
|
"%s detected: BIOS may corrupt low RAM, working around it.\n",
|
||||||
d->ident);
|
d->ident);
|
||||||
|
|
||||||
e820_update_range(0, 0x10000, E820_RAM, E820_RESERVED);
|
e820_update_range(0, 0x10000, E820_RAM, E820_RESERVED);
|
||||||
|
|
|
@ -896,7 +896,7 @@ asmlinkage void math_state_restore(void)
|
||||||
EXPORT_SYMBOL_GPL(math_state_restore);
|
EXPORT_SYMBOL_GPL(math_state_restore);
|
||||||
|
|
||||||
#ifndef CONFIG_MATH_EMULATION
|
#ifndef CONFIG_MATH_EMULATION
|
||||||
asmlinkage void math_emulate(long arg)
|
void math_emulate(struct math_emu_info *info)
|
||||||
{
|
{
|
||||||
printk(KERN_EMERG
|
printk(KERN_EMERG
|
||||||
"math-emulation not enabled and no coprocessor found.\n");
|
"math-emulation not enabled and no coprocessor found.\n");
|
||||||
|
@ -906,16 +906,19 @@ asmlinkage void math_emulate(long arg)
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_MATH_EMULATION */
|
#endif /* CONFIG_MATH_EMULATION */
|
||||||
|
|
||||||
dotraplinkage void __kprobes
|
dotraplinkage void __kprobes do_device_not_available(struct pt_regs regs)
|
||||||
do_device_not_available(struct pt_regs *regs, long error)
|
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
if (read_cr0() & X86_CR0_EM) {
|
if (read_cr0() & X86_CR0_EM) {
|
||||||
conditional_sti(regs);
|
struct math_emu_info info = { };
|
||||||
math_emulate(0);
|
|
||||||
|
conditional_sti(®s);
|
||||||
|
|
||||||
|
info.regs = ®s;
|
||||||
|
math_emulate(&info);
|
||||||
} else {
|
} else {
|
||||||
math_state_restore(); /* interrupts still off */
|
math_state_restore(); /* interrupts still off */
|
||||||
conditional_sti(regs);
|
conditional_sti(®s);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
math_state_restore();
|
math_state_restore();
|
||||||
|
|
|
@ -320,6 +320,16 @@ static void vmi_release_pmd(unsigned long pfn)
|
||||||
vmi_ops.release_page(pfn, VMI_PAGE_L2);
|
vmi_ops.release_page(pfn, VMI_PAGE_L2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We use the pgd_free hook for releasing the pgd page:
|
||||||
|
*/
|
||||||
|
static void vmi_pgd_free(struct mm_struct *mm, pgd_t *pgd)
|
||||||
|
{
|
||||||
|
unsigned long pfn = __pa(pgd) >> PAGE_SHIFT;
|
||||||
|
|
||||||
|
vmi_ops.release_page(pfn, VMI_PAGE_L2);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Helper macros for MMU update flags. We can defer updates until a flush
|
* Helper macros for MMU update flags. We can defer updates until a flush
|
||||||
* or page invalidation only if the update is to the current address space
|
* or page invalidation only if the update is to the current address space
|
||||||
|
@ -762,6 +772,7 @@ static inline int __init activate_vmi(void)
|
||||||
if (vmi_ops.release_page) {
|
if (vmi_ops.release_page) {
|
||||||
pv_mmu_ops.release_pte = vmi_release_pte;
|
pv_mmu_ops.release_pte = vmi_release_pte;
|
||||||
pv_mmu_ops.release_pmd = vmi_release_pmd;
|
pv_mmu_ops.release_pmd = vmi_release_pmd;
|
||||||
|
pv_mmu_ops.pgd_free = vmi_pgd_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set linear is needed in all cases */
|
/* Set linear is needed in all cases */
|
||||||
|
|
|
@ -131,7 +131,7 @@ u_char emulating = 0;
|
||||||
static int valid_prefix(u_char *Byte, u_char __user ** fpu_eip,
|
static int valid_prefix(u_char *Byte, u_char __user ** fpu_eip,
|
||||||
overrides * override);
|
overrides * override);
|
||||||
|
|
||||||
asmlinkage void math_emulate(long arg)
|
void math_emulate(struct math_emu_info *info)
|
||||||
{
|
{
|
||||||
u_char FPU_modrm, byte1;
|
u_char FPU_modrm, byte1;
|
||||||
unsigned short code;
|
unsigned short code;
|
||||||
|
@ -161,7 +161,7 @@ asmlinkage void math_emulate(long arg)
|
||||||
RE_ENTRANT_CHECK_ON;
|
RE_ENTRANT_CHECK_ON;
|
||||||
#endif /* RE_ENTRANT_CHECKING */
|
#endif /* RE_ENTRANT_CHECKING */
|
||||||
|
|
||||||
SETUP_DATA_AREA(arg);
|
FPU_info = info;
|
||||||
|
|
||||||
FPU_ORIG_EIP = FPU_EIP;
|
FPU_ORIG_EIP = FPU_EIP;
|
||||||
|
|
||||||
|
@ -659,7 +659,7 @@ static int valid_prefix(u_char *Byte, u_char __user **fpu_eip,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void math_abort(struct info *info, unsigned int signal)
|
void math_abort(struct math_emu_info *info, unsigned int signal)
|
||||||
{
|
{
|
||||||
FPU_EIP = FPU_ORIG_EIP;
|
FPU_EIP = FPU_ORIG_EIP;
|
||||||
current->thread.trap_no = 16;
|
current->thread.trap_no = 16;
|
||||||
|
|
|
@ -51,8 +51,8 @@ extern void ffreep(void);
|
||||||
extern void fst_i_(void);
|
extern void fst_i_(void);
|
||||||
extern void fstp_i(void);
|
extern void fstp_i(void);
|
||||||
/* fpu_entry.c */
|
/* fpu_entry.c */
|
||||||
asmlinkage extern void math_emulate(long arg);
|
extern void math_emulate(struct math_emu_info *info);
|
||||||
extern void math_abort(struct info *info, unsigned int signal);
|
extern void math_abort(struct math_emu_info *info, unsigned int signal);
|
||||||
/* fpu_etc.c */
|
/* fpu_etc.c */
|
||||||
extern void FPU_etc(void);
|
extern void FPU_etc(void);
|
||||||
/* fpu_tags.c */
|
/* fpu_tags.c */
|
||||||
|
|
|
@ -16,10 +16,6 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
||||||
/* This sets the pointer FPU_info to point to the argument part
|
|
||||||
of the stack frame of math_emulate() */
|
|
||||||
#define SETUP_DATA_AREA(arg) FPU_info = (struct info *) &arg
|
|
||||||
|
|
||||||
/* s is always from a cpu register, and the cpu does bounds checking
|
/* s is always from a cpu register, and the cpu does bounds checking
|
||||||
* during register load --> no further bounds checks needed */
|
* during register load --> no further bounds checks needed */
|
||||||
#define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3])
|
#define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3])
|
||||||
|
@ -38,12 +34,12 @@
|
||||||
#define I387 (current->thread.xstate)
|
#define I387 (current->thread.xstate)
|
||||||
#define FPU_info (I387->soft.info)
|
#define FPU_info (I387->soft.info)
|
||||||
|
|
||||||
#define FPU_CS (*(unsigned short *) &(FPU_info->___cs))
|
#define FPU_CS (*(unsigned short *) &(FPU_info->regs->cs))
|
||||||
#define FPU_SS (*(unsigned short *) &(FPU_info->___ss))
|
#define FPU_SS (*(unsigned short *) &(FPU_info->regs->ss))
|
||||||
#define FPU_DS (*(unsigned short *) &(FPU_info->___ds))
|
#define FPU_DS (*(unsigned short *) &(FPU_info->regs->ds))
|
||||||
#define FPU_EAX (FPU_info->___eax)
|
#define FPU_EAX (FPU_info->regs->ax)
|
||||||
#define FPU_EFLAGS (FPU_info->___eflags)
|
#define FPU_EFLAGS (FPU_info->regs->flags)
|
||||||
#define FPU_EIP (FPU_info->___eip)
|
#define FPU_EIP (FPU_info->regs->ip)
|
||||||
#define FPU_ORIG_EIP (FPU_info->___orig_eip)
|
#define FPU_ORIG_EIP (FPU_info->___orig_eip)
|
||||||
|
|
||||||
#define FPU_lookahead (I387->soft.lookahead)
|
#define FPU_lookahead (I387->soft.lookahead)
|
||||||
|
|
|
@ -29,46 +29,43 @@
|
||||||
#define FPU_WRITE_BIT 0x10
|
#define FPU_WRITE_BIT 0x10
|
||||||
|
|
||||||
static int reg_offset[] = {
|
static int reg_offset[] = {
|
||||||
offsetof(struct info, ___eax),
|
offsetof(struct pt_regs, ax),
|
||||||
offsetof(struct info, ___ecx),
|
offsetof(struct pt_regs, cx),
|
||||||
offsetof(struct info, ___edx),
|
offsetof(struct pt_regs, dx),
|
||||||
offsetof(struct info, ___ebx),
|
offsetof(struct pt_regs, bx),
|
||||||
offsetof(struct info, ___esp),
|
offsetof(struct pt_regs, sp),
|
||||||
offsetof(struct info, ___ebp),
|
offsetof(struct pt_regs, bp),
|
||||||
offsetof(struct info, ___esi),
|
offsetof(struct pt_regs, si),
|
||||||
offsetof(struct info, ___edi)
|
offsetof(struct pt_regs, di)
|
||||||
};
|
};
|
||||||
|
|
||||||
#define REG_(x) (*(long *)(reg_offset[(x)]+(u_char *) FPU_info))
|
#define REG_(x) (*(long *)(reg_offset[(x)] + (u_char *)FPU_info->regs))
|
||||||
|
|
||||||
static int reg_offset_vm86[] = {
|
static int reg_offset_vm86[] = {
|
||||||
offsetof(struct info, ___cs),
|
offsetof(struct pt_regs, cs),
|
||||||
offsetof(struct info, ___vm86_ds),
|
offsetof(struct kernel_vm86_regs, ds),
|
||||||
offsetof(struct info, ___vm86_es),
|
offsetof(struct kernel_vm86_regs, es),
|
||||||
offsetof(struct info, ___vm86_fs),
|
offsetof(struct kernel_vm86_regs, fs),
|
||||||
offsetof(struct info, ___vm86_gs),
|
offsetof(struct kernel_vm86_regs, gs),
|
||||||
offsetof(struct info, ___ss),
|
offsetof(struct pt_regs, ss),
|
||||||
offsetof(struct info, ___vm86_ds)
|
offsetof(struct kernel_vm86_regs, ds)
|
||||||
};
|
};
|
||||||
|
|
||||||
#define VM86_REG_(x) (*(unsigned short *) \
|
#define VM86_REG_(x) (*(unsigned short *) \
|
||||||
(reg_offset_vm86[((unsigned)x)]+(u_char *) FPU_info))
|
(reg_offset_vm86[((unsigned)x)] + (u_char *)FPU_info->regs))
|
||||||
|
|
||||||
/* This dummy, gs is not saved on the stack. */
|
|
||||||
#define ___GS ___ds
|
|
||||||
|
|
||||||
static int reg_offset_pm[] = {
|
static int reg_offset_pm[] = {
|
||||||
offsetof(struct info, ___cs),
|
offsetof(struct pt_regs, cs),
|
||||||
offsetof(struct info, ___ds),
|
offsetof(struct pt_regs, ds),
|
||||||
offsetof(struct info, ___es),
|
offsetof(struct pt_regs, es),
|
||||||
offsetof(struct info, ___fs),
|
offsetof(struct pt_regs, fs),
|
||||||
offsetof(struct info, ___GS),
|
offsetof(struct pt_regs, ds), /* dummy, not saved on stack */
|
||||||
offsetof(struct info, ___ss),
|
offsetof(struct pt_regs, ss),
|
||||||
offsetof(struct info, ___ds)
|
offsetof(struct pt_regs, ds)
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PM_REG_(x) (*(unsigned short *) \
|
#define PM_REG_(x) (*(unsigned short *) \
|
||||||
(reg_offset_pm[((unsigned)x)]+(u_char *) FPU_info))
|
(reg_offset_pm[((unsigned)x)] + (u_char *)FPU_info->regs))
|
||||||
|
|
||||||
/* Decode the SIB byte. This function assumes mod != 0 */
|
/* Decode the SIB byte. This function assumes mod != 0 */
|
||||||
static int sib(int mod, unsigned long *fpu_eip)
|
static int sib(int mod, unsigned long *fpu_eip)
|
||||||
|
@ -349,34 +346,34 @@ void __user *FPU_get_address_16(u_char FPU_modrm, unsigned long *fpu_eip,
|
||||||
}
|
}
|
||||||
switch (rm) {
|
switch (rm) {
|
||||||
case 0:
|
case 0:
|
||||||
address += FPU_info->___ebx + FPU_info->___esi;
|
address += FPU_info->regs->bx + FPU_info->regs->si;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
address += FPU_info->___ebx + FPU_info->___edi;
|
address += FPU_info->regs->bx + FPU_info->regs->di;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
address += FPU_info->___ebp + FPU_info->___esi;
|
address += FPU_info->regs->bp + FPU_info->regs->si;
|
||||||
if (addr_modes.override.segment == PREFIX_DEFAULT)
|
if (addr_modes.override.segment == PREFIX_DEFAULT)
|
||||||
addr_modes.override.segment = PREFIX_SS_;
|
addr_modes.override.segment = PREFIX_SS_;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
address += FPU_info->___ebp + FPU_info->___edi;
|
address += FPU_info->regs->bp + FPU_info->regs->di;
|
||||||
if (addr_modes.override.segment == PREFIX_DEFAULT)
|
if (addr_modes.override.segment == PREFIX_DEFAULT)
|
||||||
addr_modes.override.segment = PREFIX_SS_;
|
addr_modes.override.segment = PREFIX_SS_;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
address += FPU_info->___esi;
|
address += FPU_info->regs->si;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
address += FPU_info->___edi;
|
address += FPU_info->regs->di;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
address += FPU_info->___ebp;
|
address += FPU_info->regs->bp;
|
||||||
if (addr_modes.override.segment == PREFIX_DEFAULT)
|
if (addr_modes.override.segment == PREFIX_DEFAULT)
|
||||||
addr_modes.override.segment = PREFIX_SS_;
|
addr_modes.override.segment = PREFIX_SS_;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
address += FPU_info->___ebx;
|
address += FPU_info->regs->bx;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -685,6 +685,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
out_release_regions:
|
out_release_regions:
|
||||||
pci_release_regions(dev);
|
pci_release_regions(dev);
|
||||||
out:
|
out:
|
||||||
|
kfree(card);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -549,6 +549,15 @@ static void do_nbd_request(struct request_queue * q)
|
||||||
|
|
||||||
BUG_ON(lo->magic != LO_MAGIC);
|
BUG_ON(lo->magic != LO_MAGIC);
|
||||||
|
|
||||||
|
if (unlikely(!lo->sock)) {
|
||||||
|
printk(KERN_ERR "%s: Attempted send on closed socket\n",
|
||||||
|
lo->disk->disk_name);
|
||||||
|
req->errors++;
|
||||||
|
nbd_end_request(req);
|
||||||
|
spin_lock_irq(q->queue_lock);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock_irq(&lo->queue_lock);
|
spin_lock_irq(&lo->queue_lock);
|
||||||
list_add_tail(&req->queuelist, &lo->waiting_queue);
|
list_add_tail(&req->queuelist, &lo->waiting_queue);
|
||||||
spin_unlock_irq(&lo->queue_lock);
|
spin_unlock_irq(&lo->queue_lock);
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* SLD 9630 TT 1.1 and SLB 9635 TT 1.2 Trusted Platform Module
|
* SLD 9630 TT 1.1 and SLB 9635 TT 1.2 Trusted Platform Module
|
||||||
* Specifications at www.trustedcomputinggroup.org
|
* Specifications at www.trustedcomputinggroup.org
|
||||||
*
|
*
|
||||||
* Copyright (C) 2005, Marcel Selhorst <selhorst@crypto.rub.de>
|
* Copyright (C) 2005, Marcel Selhorst <m.selhorst@sirrix.com>
|
||||||
* Sirrix AG - security technologies, http://www.sirrix.com and
|
* Sirrix AG - security technologies, http://www.sirrix.com and
|
||||||
* Applied Data Security Group, Ruhr-University Bochum, Germany
|
* Applied Data Security Group, Ruhr-University Bochum, Germany
|
||||||
* Project-Homepage: http://www.prosec.rub.de/tpm
|
* Project-Homepage: http://www.prosec.rub.de/tpm
|
||||||
|
@ -636,7 +636,7 @@ static void __exit cleanup_inf(void)
|
||||||
module_init(init_inf);
|
module_init(init_inf);
|
||||||
module_exit(cleanup_inf);
|
module_exit(cleanup_inf);
|
||||||
|
|
||||||
MODULE_AUTHOR("Marcel Selhorst <selhorst@crypto.rub.de>");
|
MODULE_AUTHOR("Marcel Selhorst <m.selhorst@sirrix.com>");
|
||||||
MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2");
|
MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2");
|
||||||
MODULE_VERSION("1.9");
|
MODULE_VERSION("1.9");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
|
@ -4599,6 +4599,7 @@ init_e1_port(struct hfc_multi *hc, struct hm_map *m)
|
||||||
printk(KERN_ERR "%s: no memory for coeffs\n",
|
printk(KERN_ERR "%s: no memory for coeffs\n",
|
||||||
__func__);
|
__func__);
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
kfree(bch);
|
||||||
goto free_chan;
|
goto free_chan;
|
||||||
}
|
}
|
||||||
bch->nr = ch;
|
bch->nr = ch;
|
||||||
|
@ -4767,6 +4768,7 @@ init_multi_port(struct hfc_multi *hc, int pt)
|
||||||
printk(KERN_ERR "%s: no memory for coeffs\n",
|
printk(KERN_ERR "%s: no memory for coeffs\n",
|
||||||
__func__);
|
__func__);
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
kfree(bch);
|
||||||
goto free_chan;
|
goto free_chan;
|
||||||
}
|
}
|
||||||
bch->nr = ch + 1;
|
bch->nr = ch + 1;
|
||||||
|
|
|
@ -1475,6 +1475,7 @@ el3_resume(struct device *pdev)
|
||||||
spin_lock_irqsave(&lp->lock, flags);
|
spin_lock_irqsave(&lp->lock, flags);
|
||||||
|
|
||||||
outw(PowerUp, ioaddr + EL3_CMD);
|
outw(PowerUp, ioaddr + EL3_CMD);
|
||||||
|
EL3WINDOW(0);
|
||||||
el3_up(dev);
|
el3_up(dev);
|
||||||
|
|
||||||
if (netif_running(dev))
|
if (netif_running(dev))
|
||||||
|
|
|
@ -1629,6 +1629,12 @@ static void gfar_schedule_cleanup(struct net_device *dev)
|
||||||
if (netif_rx_schedule_prep(&priv->napi)) {
|
if (netif_rx_schedule_prep(&priv->napi)) {
|
||||||
gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED);
|
gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED);
|
||||||
__netif_rx_schedule(&priv->napi);
|
__netif_rx_schedule(&priv->napi);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Clear IEVENT, so interrupts aren't called again
|
||||||
|
* because of the packets that have already arrived.
|
||||||
|
*/
|
||||||
|
gfar_write(&priv->regs->ievent, IEVENT_RTX_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock(&priv->rxlock);
|
spin_unlock(&priv->rxlock);
|
||||||
|
|
|
@ -1203,7 +1203,7 @@ typedef struct {
|
||||||
#define NETXEN_IS_MSI_FAMILY(adapter) \
|
#define NETXEN_IS_MSI_FAMILY(adapter) \
|
||||||
((adapter)->flags & (NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED))
|
((adapter)->flags & (NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED))
|
||||||
|
|
||||||
#define MSIX_ENTRIES_PER_ADAPTER 8
|
#define MSIX_ENTRIES_PER_ADAPTER 1
|
||||||
#define NETXEN_MSIX_TBL_SPACE 8192
|
#define NETXEN_MSIX_TBL_SPACE 8192
|
||||||
#define NETXEN_PCI_REG_MSIX_TBL 0x44
|
#define NETXEN_PCI_REG_MSIX_TBL 0x44
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ static void netxen_nic_poll_controller(struct net_device *netdev);
|
||||||
#endif
|
#endif
|
||||||
static irqreturn_t netxen_intr(int irq, void *data);
|
static irqreturn_t netxen_intr(int irq, void *data);
|
||||||
static irqreturn_t netxen_msi_intr(int irq, void *data);
|
static irqreturn_t netxen_msi_intr(int irq, void *data);
|
||||||
|
static irqreturn_t netxen_msix_intr(int irq, void *data);
|
||||||
|
|
||||||
/* PCI Device ID Table */
|
/* PCI Device ID Table */
|
||||||
#define ENTRY(device) \
|
#define ENTRY(device) \
|
||||||
|
@ -1084,7 +1085,9 @@ static int netxen_nic_open(struct net_device *netdev)
|
||||||
for (ring = 0; ring < adapter->max_rds_rings; ring++)
|
for (ring = 0; ring < adapter->max_rds_rings; ring++)
|
||||||
netxen_post_rx_buffers(adapter, ctx, ring);
|
netxen_post_rx_buffers(adapter, ctx, ring);
|
||||||
}
|
}
|
||||||
if (NETXEN_IS_MSI_FAMILY(adapter))
|
if (adapter->flags & NETXEN_NIC_MSIX_ENABLED)
|
||||||
|
handler = netxen_msix_intr;
|
||||||
|
else if (adapter->flags & NETXEN_NIC_MSI_ENABLED)
|
||||||
handler = netxen_msi_intr;
|
handler = netxen_msi_intr;
|
||||||
else {
|
else {
|
||||||
flags |= IRQF_SHARED;
|
flags |= IRQF_SHARED;
|
||||||
|
@ -1612,6 +1615,14 @@ static irqreturn_t netxen_msi_intr(int irq, void *data)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static irqreturn_t netxen_msix_intr(int irq, void *data)
|
||||||
|
{
|
||||||
|
struct netxen_adapter *adapter = data;
|
||||||
|
|
||||||
|
napi_schedule(&adapter->napi);
|
||||||
|
return IRQ_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
static int netxen_nic_poll(struct napi_struct *napi, int budget)
|
static int netxen_nic_poll(struct napi_struct *napi, int budget)
|
||||||
{
|
{
|
||||||
struct netxen_adapter *adapter = container_of(napi, struct netxen_adapter, napi);
|
struct netxen_adapter *adapter = container_of(napi, struct netxen_adapter, napi);
|
||||||
|
|
|
@ -437,6 +437,22 @@ enum features {
|
||||||
RTL_FEATURE_GMII = (1 << 2),
|
RTL_FEATURE_GMII = (1 << 2),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct rtl8169_counters {
|
||||||
|
__le64 tx_packets;
|
||||||
|
__le64 rx_packets;
|
||||||
|
__le64 tx_errors;
|
||||||
|
__le32 rx_errors;
|
||||||
|
__le16 rx_missed;
|
||||||
|
__le16 align_errors;
|
||||||
|
__le32 tx_one_collision;
|
||||||
|
__le32 tx_multi_collision;
|
||||||
|
__le64 rx_unicast;
|
||||||
|
__le64 rx_broadcast;
|
||||||
|
__le32 rx_multicast;
|
||||||
|
__le16 tx_aborted;
|
||||||
|
__le16 tx_underun;
|
||||||
|
};
|
||||||
|
|
||||||
struct rtl8169_private {
|
struct rtl8169_private {
|
||||||
void __iomem *mmio_addr; /* memory map physical address */
|
void __iomem *mmio_addr; /* memory map physical address */
|
||||||
struct pci_dev *pci_dev; /* Index of PCI device */
|
struct pci_dev *pci_dev; /* Index of PCI device */
|
||||||
|
@ -480,6 +496,7 @@ struct rtl8169_private {
|
||||||
unsigned features;
|
unsigned features;
|
||||||
|
|
||||||
struct mii_if_info mii;
|
struct mii_if_info mii;
|
||||||
|
struct rtl8169_counters counters;
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
|
MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
|
||||||
|
@ -1100,22 +1117,6 @@ static const char rtl8169_gstrings[][ETH_GSTRING_LEN] = {
|
||||||
"tx_underrun",
|
"tx_underrun",
|
||||||
};
|
};
|
||||||
|
|
||||||
struct rtl8169_counters {
|
|
||||||
__le64 tx_packets;
|
|
||||||
__le64 rx_packets;
|
|
||||||
__le64 tx_errors;
|
|
||||||
__le32 rx_errors;
|
|
||||||
__le16 rx_missed;
|
|
||||||
__le16 align_errors;
|
|
||||||
__le32 tx_one_collision;
|
|
||||||
__le32 tx_multi_collision;
|
|
||||||
__le64 rx_unicast;
|
|
||||||
__le64 rx_broadcast;
|
|
||||||
__le32 rx_multicast;
|
|
||||||
__le16 tx_aborted;
|
|
||||||
__le16 tx_underun;
|
|
||||||
};
|
|
||||||
|
|
||||||
static int rtl8169_get_sset_count(struct net_device *dev, int sset)
|
static int rtl8169_get_sset_count(struct net_device *dev, int sset)
|
||||||
{
|
{
|
||||||
switch (sset) {
|
switch (sset) {
|
||||||
|
@ -1126,16 +1127,21 @@ static int rtl8169_get_sset_count(struct net_device *dev, int sset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl8169_get_ethtool_stats(struct net_device *dev,
|
static void rtl8169_update_counters(struct net_device *dev)
|
||||||
struct ethtool_stats *stats, u64 *data)
|
|
||||||
{
|
{
|
||||||
struct rtl8169_private *tp = netdev_priv(dev);
|
struct rtl8169_private *tp = netdev_priv(dev);
|
||||||
void __iomem *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
struct rtl8169_counters *counters;
|
struct rtl8169_counters *counters;
|
||||||
dma_addr_t paddr;
|
dma_addr_t paddr;
|
||||||
u32 cmd;
|
u32 cmd;
|
||||||
|
int wait = 1000;
|
||||||
|
|
||||||
ASSERT_RTNL();
|
/*
|
||||||
|
* Some chips are unable to dump tally counters when the receiver
|
||||||
|
* is disabled.
|
||||||
|
*/
|
||||||
|
if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr);
|
counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr);
|
||||||
if (!counters)
|
if (!counters)
|
||||||
|
@ -1146,31 +1152,45 @@ static void rtl8169_get_ethtool_stats(struct net_device *dev,
|
||||||
RTL_W32(CounterAddrLow, cmd);
|
RTL_W32(CounterAddrLow, cmd);
|
||||||
RTL_W32(CounterAddrLow, cmd | CounterDump);
|
RTL_W32(CounterAddrLow, cmd | CounterDump);
|
||||||
|
|
||||||
while (RTL_R32(CounterAddrLow) & CounterDump) {
|
while (wait--) {
|
||||||
if (msleep_interruptible(1))
|
if ((RTL_R32(CounterAddrLow) & CounterDump) == 0) {
|
||||||
|
/* copy updated counters */
|
||||||
|
memcpy(&tp->counters, counters, sizeof(*counters));
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
udelay(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
RTL_W32(CounterAddrLow, 0);
|
RTL_W32(CounterAddrLow, 0);
|
||||||
RTL_W32(CounterAddrHigh, 0);
|
RTL_W32(CounterAddrHigh, 0);
|
||||||
|
|
||||||
data[0] = le64_to_cpu(counters->tx_packets);
|
|
||||||
data[1] = le64_to_cpu(counters->rx_packets);
|
|
||||||
data[2] = le64_to_cpu(counters->tx_errors);
|
|
||||||
data[3] = le32_to_cpu(counters->rx_errors);
|
|
||||||
data[4] = le16_to_cpu(counters->rx_missed);
|
|
||||||
data[5] = le16_to_cpu(counters->align_errors);
|
|
||||||
data[6] = le32_to_cpu(counters->tx_one_collision);
|
|
||||||
data[7] = le32_to_cpu(counters->tx_multi_collision);
|
|
||||||
data[8] = le64_to_cpu(counters->rx_unicast);
|
|
||||||
data[9] = le64_to_cpu(counters->rx_broadcast);
|
|
||||||
data[10] = le32_to_cpu(counters->rx_multicast);
|
|
||||||
data[11] = le16_to_cpu(counters->tx_aborted);
|
|
||||||
data[12] = le16_to_cpu(counters->tx_underun);
|
|
||||||
|
|
||||||
pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr);
|
pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rtl8169_get_ethtool_stats(struct net_device *dev,
|
||||||
|
struct ethtool_stats *stats, u64 *data)
|
||||||
|
{
|
||||||
|
struct rtl8169_private *tp = netdev_priv(dev);
|
||||||
|
|
||||||
|
ASSERT_RTNL();
|
||||||
|
|
||||||
|
rtl8169_update_counters(dev);
|
||||||
|
|
||||||
|
data[0] = le64_to_cpu(tp->counters.tx_packets);
|
||||||
|
data[1] = le64_to_cpu(tp->counters.rx_packets);
|
||||||
|
data[2] = le64_to_cpu(tp->counters.tx_errors);
|
||||||
|
data[3] = le32_to_cpu(tp->counters.rx_errors);
|
||||||
|
data[4] = le16_to_cpu(tp->counters.rx_missed);
|
||||||
|
data[5] = le16_to_cpu(tp->counters.align_errors);
|
||||||
|
data[6] = le32_to_cpu(tp->counters.tx_one_collision);
|
||||||
|
data[7] = le32_to_cpu(tp->counters.tx_multi_collision);
|
||||||
|
data[8] = le64_to_cpu(tp->counters.rx_unicast);
|
||||||
|
data[9] = le64_to_cpu(tp->counters.rx_broadcast);
|
||||||
|
data[10] = le32_to_cpu(tp->counters.rx_multicast);
|
||||||
|
data[11] = le16_to_cpu(tp->counters.tx_aborted);
|
||||||
|
data[12] = le16_to_cpu(tp->counters.tx_underun);
|
||||||
|
}
|
||||||
|
|
||||||
static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data)
|
static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data)
|
||||||
{
|
{
|
||||||
switch(stringset) {
|
switch(stringset) {
|
||||||
|
@ -3682,6 +3702,9 @@ static int rtl8169_close(struct net_device *dev)
|
||||||
struct rtl8169_private *tp = netdev_priv(dev);
|
struct rtl8169_private *tp = netdev_priv(dev);
|
||||||
struct pci_dev *pdev = tp->pci_dev;
|
struct pci_dev *pdev = tp->pci_dev;
|
||||||
|
|
||||||
|
/* update counters before going down */
|
||||||
|
rtl8169_update_counters(dev);
|
||||||
|
|
||||||
rtl8169_down(dev);
|
rtl8169_down(dev);
|
||||||
|
|
||||||
free_irq(dev->irq, dev);
|
free_irq(dev->irq, dev);
|
||||||
|
|
|
@ -2221,6 +2221,8 @@ static int gem_do_start(struct net_device *dev)
|
||||||
|
|
||||||
gp->running = 1;
|
gp->running = 1;
|
||||||
|
|
||||||
|
napi_enable(&gp->napi);
|
||||||
|
|
||||||
if (gp->lstate == link_up) {
|
if (gp->lstate == link_up) {
|
||||||
netif_carrier_on(gp->dev);
|
netif_carrier_on(gp->dev);
|
||||||
gem_set_link_modes(gp);
|
gem_set_link_modes(gp);
|
||||||
|
@ -2238,6 +2240,8 @@ static int gem_do_start(struct net_device *dev)
|
||||||
spin_lock_irqsave(&gp->lock, flags);
|
spin_lock_irqsave(&gp->lock, flags);
|
||||||
spin_lock(&gp->tx_lock);
|
spin_lock(&gp->tx_lock);
|
||||||
|
|
||||||
|
napi_disable(&gp->napi);
|
||||||
|
|
||||||
gp->running = 0;
|
gp->running = 0;
|
||||||
gem_reset(gp);
|
gem_reset(gp);
|
||||||
gem_clean_rings(gp);
|
gem_clean_rings(gp);
|
||||||
|
@ -2338,8 +2342,6 @@ static int gem_open(struct net_device *dev)
|
||||||
if (!gp->asleep)
|
if (!gp->asleep)
|
||||||
rc = gem_do_start(dev);
|
rc = gem_do_start(dev);
|
||||||
gp->opened = (rc == 0);
|
gp->opened = (rc == 0);
|
||||||
if (gp->opened)
|
|
||||||
napi_enable(&gp->napi);
|
|
||||||
|
|
||||||
mutex_unlock(&gp->pm_mutex);
|
mutex_unlock(&gp->pm_mutex);
|
||||||
|
|
||||||
|
@ -2476,8 +2478,6 @@ static int gem_resume(struct pci_dev *pdev)
|
||||||
|
|
||||||
/* Re-attach net device */
|
/* Re-attach net device */
|
||||||
netif_device_attach(dev);
|
netif_device_attach(dev);
|
||||||
|
|
||||||
napi_enable(&gp->napi);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&gp->lock, flags);
|
spin_lock_irqsave(&gp->lock, flags);
|
||||||
|
|
|
@ -2629,6 +2629,14 @@ static int __devinit happy_meal_sbus_probe_one(struct of_device *op, int is_qfe)
|
||||||
int i, qfe_slot = -1;
|
int i, qfe_slot = -1;
|
||||||
int err = -ENODEV;
|
int err = -ENODEV;
|
||||||
|
|
||||||
|
sbus_dp = to_of_device(op->dev.parent)->node;
|
||||||
|
if (is_qfe)
|
||||||
|
sbus_dp = to_of_device(op->dev.parent->parent)->node;
|
||||||
|
|
||||||
|
/* We can match PCI devices too, do not accept those here. */
|
||||||
|
if (strcmp(sbus_dp->name, "sbus"))
|
||||||
|
return err;
|
||||||
|
|
||||||
if (is_qfe) {
|
if (is_qfe) {
|
||||||
qp = quattro_sbus_find(op);
|
qp = quattro_sbus_find(op);
|
||||||
if (qp == NULL)
|
if (qp == NULL)
|
||||||
|
@ -2734,10 +2742,6 @@ static int __devinit happy_meal_sbus_probe_one(struct of_device *op, int is_qfe)
|
||||||
if (qp != NULL)
|
if (qp != NULL)
|
||||||
hp->happy_flags |= HFLAG_QUATTRO;
|
hp->happy_flags |= HFLAG_QUATTRO;
|
||||||
|
|
||||||
sbus_dp = to_of_device(op->dev.parent)->node;
|
|
||||||
if (is_qfe)
|
|
||||||
sbus_dp = to_of_device(op->dev.parent->parent)->node;
|
|
||||||
|
|
||||||
/* Get the supported DVMA burst sizes from our Happy SBUS. */
|
/* Get the supported DVMA burst sizes from our Happy SBUS. */
|
||||||
hp->happy_bursts = of_getintprop_default(sbus_dp,
|
hp->happy_bursts = of_getintprop_default(sbus_dp,
|
||||||
"burst-sizes", 0x00);
|
"burst-sizes", 0x00);
|
||||||
|
|
|
@ -464,13 +464,14 @@ static void de_rx (struct de_private *de)
|
||||||
drop = 1;
|
drop = 1;
|
||||||
|
|
||||||
rx_next:
|
rx_next:
|
||||||
de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
|
|
||||||
if (rx_tail == (DE_RX_RING_SIZE - 1))
|
if (rx_tail == (DE_RX_RING_SIZE - 1))
|
||||||
de->rx_ring[rx_tail].opts2 =
|
de->rx_ring[rx_tail].opts2 =
|
||||||
cpu_to_le32(RingEnd | de->rx_buf_sz);
|
cpu_to_le32(RingEnd | de->rx_buf_sz);
|
||||||
else
|
else
|
||||||
de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz);
|
de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz);
|
||||||
de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping);
|
de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping);
|
||||||
|
wmb();
|
||||||
|
de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
|
||||||
rx_tail = NEXT_RX(rx_tail);
|
rx_tail = NEXT_RX(rx_tail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,10 +157,16 @@ static int update_filter(struct tap_filter *filter, void __user *arg)
|
||||||
|
|
||||||
nexact = n;
|
nexact = n;
|
||||||
|
|
||||||
/* The rest is hashed */
|
/* Remaining multicast addresses are hashed,
|
||||||
|
* unicast will leave the filter disabled. */
|
||||||
memset(filter->mask, 0, sizeof(filter->mask));
|
memset(filter->mask, 0, sizeof(filter->mask));
|
||||||
for (; n < uf.count; n++)
|
for (; n < uf.count; n++) {
|
||||||
|
if (!is_multicast_ether_addr(addr[n].u)) {
|
||||||
|
err = 0; /* no filter */
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
addr_hash_set(filter->mask, addr[n].u);
|
addr_hash_set(filter->mask, addr[n].u);
|
||||||
|
}
|
||||||
|
|
||||||
/* For ALLMULTI just set the mask to all ones.
|
/* For ALLMULTI just set the mask to all ones.
|
||||||
* This overrides the mask populated above. */
|
* This overrides the mask populated above. */
|
||||||
|
|
|
@ -64,6 +64,11 @@ struct parport_pc_pci {
|
||||||
|
|
||||||
static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *card, int autoirq, int autodma)
|
static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *card, int autoirq, int autodma)
|
||||||
{
|
{
|
||||||
|
/* the rule described below doesn't hold for this device */
|
||||||
|
if (dev->device == PCI_DEVICE_ID_NETMOS_9835 &&
|
||||||
|
dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
|
||||||
|
dev->subsystem_device == 0x0299)
|
||||||
|
return -ENODEV;
|
||||||
/*
|
/*
|
||||||
* Netmos uses the subdevice ID to indicate the number of parallel
|
* Netmos uses the subdevice ID to indicate the number of parallel
|
||||||
* and serial ports. The form is 0x00PS, where <P> is the number of
|
* and serial ports. The form is 0x00PS, where <P> is the number of
|
||||||
|
|
|
@ -268,7 +268,12 @@ static long list_size;
|
||||||
|
|
||||||
static void domain_remove_dev_info(struct dmar_domain *domain);
|
static void domain_remove_dev_info(struct dmar_domain *domain);
|
||||||
|
|
||||||
int dmar_disabled;
|
#ifdef CONFIG_DMAR_DEFAULT_ON
|
||||||
|
int dmar_disabled = 0;
|
||||||
|
#else
|
||||||
|
int dmar_disabled = 1;
|
||||||
|
#endif /*CONFIG_DMAR_DEFAULT_ON*/
|
||||||
|
|
||||||
static int __initdata dmar_map_gfx = 1;
|
static int __initdata dmar_map_gfx = 1;
|
||||||
static int dmar_forcedac;
|
static int dmar_forcedac;
|
||||||
static int intel_iommu_strict;
|
static int intel_iommu_strict;
|
||||||
|
@ -284,9 +289,12 @@ static int __init intel_iommu_setup(char *str)
|
||||||
if (!str)
|
if (!str)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
while (*str) {
|
while (*str) {
|
||||||
if (!strncmp(str, "off", 3)) {
|
if (!strncmp(str, "on", 2)) {
|
||||||
|
dmar_disabled = 0;
|
||||||
|
printk(KERN_INFO "Intel-IOMMU: enabled\n");
|
||||||
|
} else if (!strncmp(str, "off", 3)) {
|
||||||
dmar_disabled = 1;
|
dmar_disabled = 1;
|
||||||
printk(KERN_INFO"Intel-IOMMU: disabled\n");
|
printk(KERN_INFO "Intel-IOMMU: disabled\n");
|
||||||
} else if (!strncmp(str, "igfx_off", 8)) {
|
} else if (!strncmp(str, "igfx_off", 8)) {
|
||||||
dmar_map_gfx = 0;
|
dmar_map_gfx = 0;
|
||||||
printk(KERN_INFO
|
printk(KERN_INFO
|
||||||
|
|
|
@ -199,7 +199,8 @@ static int adapter_get_property(struct power_supply *psy,
|
||||||
enum power_supply_property psp,
|
enum power_supply_property psp,
|
||||||
union power_supply_propval *val)
|
union power_supply_propval *val)
|
||||||
{
|
{
|
||||||
struct pcf50633_mbc *mbc = container_of(psy, struct pcf50633_mbc, usb);
|
struct pcf50633_mbc *mbc = container_of(psy,
|
||||||
|
struct pcf50633_mbc, adapter);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
switch (psp) {
|
switch (psp) {
|
||||||
|
|
|
@ -81,7 +81,7 @@ static int __devinit au1xtoy_rtc_probe(struct platform_device *pdev)
|
||||||
if (au_readl(SYS_TOYTRIM) != 32767) {
|
if (au_readl(SYS_TOYTRIM) != 32767) {
|
||||||
/* wait until hardware gives access to TRIM register */
|
/* wait until hardware gives access to TRIM register */
|
||||||
t = 0x00100000;
|
t = 0x00100000;
|
||||||
while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T0S) && t--)
|
while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T0S) && --t)
|
||||||
msleep(1);
|
msleep(1);
|
||||||
|
|
||||||
if (!t) {
|
if (!t) {
|
||||||
|
|
|
@ -485,7 +485,7 @@ static void __exit pxa_rtc_exit(void)
|
||||||
module_init(pxa_rtc_init);
|
module_init(pxa_rtc_init);
|
||||||
module_exit(pxa_rtc_exit);
|
module_exit(pxa_rtc_exit);
|
||||||
|
|
||||||
MODULE_AUTHOR("Robert Jarzmik");
|
MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
|
||||||
MODULE_DESCRIPTION("PXA27x/PXA3xx Realtime Clock Driver (RTC)");
|
MODULE_DESCRIPTION("PXA27x/PXA3xx Realtime Clock Driver (RTC)");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_ALIAS("platform:pxa-rtc");
|
MODULE_ALIAS("platform:pxa-rtc");
|
||||||
|
|
|
@ -57,6 +57,8 @@ static void dasd_device_tasklet(struct dasd_device *);
|
||||||
static void dasd_block_tasklet(struct dasd_block *);
|
static void dasd_block_tasklet(struct dasd_block *);
|
||||||
static void do_kick_device(struct work_struct *);
|
static void do_kick_device(struct work_struct *);
|
||||||
static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *);
|
static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *);
|
||||||
|
static void dasd_device_timeout(unsigned long);
|
||||||
|
static void dasd_block_timeout(unsigned long);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SECTION: Operations on the device structure.
|
* SECTION: Operations on the device structure.
|
||||||
|
@ -99,6 +101,8 @@ struct dasd_device *dasd_alloc_device(void)
|
||||||
(unsigned long) device);
|
(unsigned long) device);
|
||||||
INIT_LIST_HEAD(&device->ccw_queue);
|
INIT_LIST_HEAD(&device->ccw_queue);
|
||||||
init_timer(&device->timer);
|
init_timer(&device->timer);
|
||||||
|
device->timer.function = dasd_device_timeout;
|
||||||
|
device->timer.data = (unsigned long) device;
|
||||||
INIT_WORK(&device->kick_work, do_kick_device);
|
INIT_WORK(&device->kick_work, do_kick_device);
|
||||||
device->state = DASD_STATE_NEW;
|
device->state = DASD_STATE_NEW;
|
||||||
device->target = DASD_STATE_NEW;
|
device->target = DASD_STATE_NEW;
|
||||||
|
@ -138,6 +142,8 @@ struct dasd_block *dasd_alloc_block(void)
|
||||||
INIT_LIST_HEAD(&block->ccw_queue);
|
INIT_LIST_HEAD(&block->ccw_queue);
|
||||||
spin_lock_init(&block->queue_lock);
|
spin_lock_init(&block->queue_lock);
|
||||||
init_timer(&block->timer);
|
init_timer(&block->timer);
|
||||||
|
block->timer.function = dasd_block_timeout;
|
||||||
|
block->timer.data = (unsigned long) block;
|
||||||
|
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
|
@ -915,19 +921,10 @@ static void dasd_device_timeout(unsigned long ptr)
|
||||||
*/
|
*/
|
||||||
void dasd_device_set_timer(struct dasd_device *device, int expires)
|
void dasd_device_set_timer(struct dasd_device *device, int expires)
|
||||||
{
|
{
|
||||||
if (expires == 0) {
|
if (expires == 0)
|
||||||
if (timer_pending(&device->timer))
|
del_timer(&device->timer);
|
||||||
del_timer(&device->timer);
|
else
|
||||||
return;
|
mod_timer(&device->timer, jiffies + expires);
|
||||||
}
|
|
||||||
if (timer_pending(&device->timer)) {
|
|
||||||
if (mod_timer(&device->timer, jiffies + expires))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
device->timer.function = dasd_device_timeout;
|
|
||||||
device->timer.data = (unsigned long) device;
|
|
||||||
device->timer.expires = jiffies + expires;
|
|
||||||
add_timer(&device->timer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -935,8 +932,7 @@ void dasd_device_set_timer(struct dasd_device *device, int expires)
|
||||||
*/
|
*/
|
||||||
void dasd_device_clear_timer(struct dasd_device *device)
|
void dasd_device_clear_timer(struct dasd_device *device)
|
||||||
{
|
{
|
||||||
if (timer_pending(&device->timer))
|
del_timer(&device->timer);
|
||||||
del_timer(&device->timer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dasd_handle_killed_request(struct ccw_device *cdev,
|
static void dasd_handle_killed_request(struct ccw_device *cdev,
|
||||||
|
@ -1586,19 +1582,10 @@ static void dasd_block_timeout(unsigned long ptr)
|
||||||
*/
|
*/
|
||||||
void dasd_block_set_timer(struct dasd_block *block, int expires)
|
void dasd_block_set_timer(struct dasd_block *block, int expires)
|
||||||
{
|
{
|
||||||
if (expires == 0) {
|
if (expires == 0)
|
||||||
if (timer_pending(&block->timer))
|
del_timer(&block->timer);
|
||||||
del_timer(&block->timer);
|
else
|
||||||
return;
|
mod_timer(&block->timer, jiffies + expires);
|
||||||
}
|
|
||||||
if (timer_pending(&block->timer)) {
|
|
||||||
if (mod_timer(&block->timer, jiffies + expires))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
block->timer.function = dasd_block_timeout;
|
|
||||||
block->timer.data = (unsigned long) block;
|
|
||||||
block->timer.expires = jiffies + expires;
|
|
||||||
add_timer(&block->timer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1606,8 +1593,7 @@ void dasd_block_set_timer(struct dasd_block *block, int expires)
|
||||||
*/
|
*/
|
||||||
void dasd_block_clear_timer(struct dasd_block *block)
|
void dasd_block_clear_timer(struct dasd_block *block)
|
||||||
{
|
{
|
||||||
if (timer_pending(&block->timer))
|
del_timer(&block->timer);
|
||||||
del_timer(&block->timer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -677,7 +677,7 @@ static ssize_t dasd_ff_show(struct device *dev, struct device_attribute *attr,
|
||||||
struct dasd_devmap *devmap;
|
struct dasd_devmap *devmap;
|
||||||
int ff_flag;
|
int ff_flag;
|
||||||
|
|
||||||
devmap = dasd_find_busid(dev->bus_id);
|
devmap = dasd_find_busid(dev_name(dev));
|
||||||
if (!IS_ERR(devmap))
|
if (!IS_ERR(devmap))
|
||||||
ff_flag = (devmap->features & DASD_FEATURE_FAILFAST) != 0;
|
ff_flag = (devmap->features & DASD_FEATURE_FAILFAST) != 0;
|
||||||
else
|
else
|
||||||
|
|
|
@ -447,7 +447,7 @@ static irqreturn_t bfin_t350mcqb_irq_error(int irq, void *dev_id)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init bfin_t350mcqb_probe(struct platform_device *pdev)
|
static int __devinit bfin_t350mcqb_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct bfin_t350mcqbfb_info *info;
|
struct bfin_t350mcqbfb_info *info;
|
||||||
struct fb_info *fbinfo;
|
struct fb_info *fbinfo;
|
||||||
|
|
|
@ -136,13 +136,10 @@ static int gx1fb_set_par(struct fb_info *info)
|
||||||
{
|
{
|
||||||
struct geodefb_par *par = info->par;
|
struct geodefb_par *par = info->par;
|
||||||
|
|
||||||
if (info->var.bits_per_pixel == 16) {
|
if (info->var.bits_per_pixel == 16)
|
||||||
info->fix.visual = FB_VISUAL_TRUECOLOR;
|
info->fix.visual = FB_VISUAL_TRUECOLOR;
|
||||||
fb_dealloc_cmap(&info->cmap);
|
else
|
||||||
} else {
|
|
||||||
info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
|
info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
|
||||||
fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
info->fix.line_length = gx1_line_delta(info->var.xres, info->var.bits_per_pixel);
|
info->fix.line_length = gx1_line_delta(info->var.xres, info->var.bits_per_pixel);
|
||||||
|
|
||||||
|
@ -315,6 +312,10 @@ static struct fb_info * __init gx1fb_init_fbinfo(struct device *dev)
|
||||||
if (!par->panel_x)
|
if (!par->panel_x)
|
||||||
par->enable_crt = 1; /* fall back to CRT if no panel is specified */
|
par->enable_crt = 1; /* fall back to CRT if no panel is specified */
|
||||||
|
|
||||||
|
if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
|
||||||
|
framebuffer_release(info);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,8 +375,11 @@ static int __init gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id *
|
||||||
release_mem_region(gx1_gx_base() + 0x8300, 0x100);
|
release_mem_region(gx1_gx_base() + 0x8300, 0x100);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info)
|
if (info) {
|
||||||
|
fb_dealloc_cmap(&info->cmap);
|
||||||
framebuffer_release(info);
|
framebuffer_release(info);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,6 +399,7 @@ static void gx1fb_remove(struct pci_dev *pdev)
|
||||||
iounmap(par->dc_regs);
|
iounmap(par->dc_regs);
|
||||||
release_mem_region(gx1_gx_base() + 0x8300, 0x100);
|
release_mem_region(gx1_gx_base() + 0x8300, 0x100);
|
||||||
|
|
||||||
|
fb_dealloc_cmap(&info->cmap);
|
||||||
pci_set_drvdata(pdev, NULL);
|
pci_set_drvdata(pdev, NULL);
|
||||||
|
|
||||||
framebuffer_release(info);
|
framebuffer_release(info);
|
||||||
|
|
|
@ -171,13 +171,10 @@ static int gxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||||
|
|
||||||
static int gxfb_set_par(struct fb_info *info)
|
static int gxfb_set_par(struct fb_info *info)
|
||||||
{
|
{
|
||||||
if (info->var.bits_per_pixel > 8) {
|
if (info->var.bits_per_pixel > 8)
|
||||||
info->fix.visual = FB_VISUAL_TRUECOLOR;
|
info->fix.visual = FB_VISUAL_TRUECOLOR;
|
||||||
fb_dealloc_cmap(&info->cmap);
|
else
|
||||||
} else {
|
|
||||||
info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
|
info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
|
||||||
fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
info->fix.line_length = gx_line_delta(info->var.xres, info->var.bits_per_pixel);
|
info->fix.line_length = gx_line_delta(info->var.xres, info->var.bits_per_pixel);
|
||||||
|
|
||||||
|
@ -331,6 +328,11 @@ static struct fb_info * __init gxfb_init_fbinfo(struct device *dev)
|
||||||
|
|
||||||
info->var.grayscale = 0;
|
info->var.grayscale = 0;
|
||||||
|
|
||||||
|
if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
|
||||||
|
framebuffer_release(info);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,8 +445,10 @@ static int __init gxfb_probe(struct pci_dev *pdev, const struct pci_device_id *i
|
||||||
pci_release_region(pdev, 1);
|
pci_release_region(pdev, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info)
|
if (info) {
|
||||||
|
fb_dealloc_cmap(&info->cmap);
|
||||||
framebuffer_release(info);
|
framebuffer_release(info);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,6 +471,7 @@ static void gxfb_remove(struct pci_dev *pdev)
|
||||||
iounmap(par->gp_regs);
|
iounmap(par->gp_regs);
|
||||||
pci_release_region(pdev, 1);
|
pci_release_region(pdev, 1);
|
||||||
|
|
||||||
|
fb_dealloc_cmap(&info->cmap);
|
||||||
pci_set_drvdata(pdev, NULL);
|
pci_set_drvdata(pdev, NULL);
|
||||||
|
|
||||||
framebuffer_release(info);
|
framebuffer_release(info);
|
||||||
|
|
|
@ -278,13 +278,10 @@ static int lxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||||
|
|
||||||
static int lxfb_set_par(struct fb_info *info)
|
static int lxfb_set_par(struct fb_info *info)
|
||||||
{
|
{
|
||||||
if (info->var.bits_per_pixel > 8) {
|
if (info->var.bits_per_pixel > 8)
|
||||||
info->fix.visual = FB_VISUAL_TRUECOLOR;
|
info->fix.visual = FB_VISUAL_TRUECOLOR;
|
||||||
fb_dealloc_cmap(&info->cmap);
|
else
|
||||||
} else {
|
|
||||||
info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
|
info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
|
||||||
fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
info->fix.line_length = lx_get_pitch(info->var.xres,
|
info->fix.line_length = lx_get_pitch(info->var.xres,
|
||||||
info->var.bits_per_pixel);
|
info->var.bits_per_pixel);
|
||||||
|
@ -451,6 +448,11 @@ static struct fb_info * __init lxfb_init_fbinfo(struct device *dev)
|
||||||
|
|
||||||
info->pseudo_palette = (void *)par + sizeof(struct lxfb_par);
|
info->pseudo_palette = (void *)par + sizeof(struct lxfb_par);
|
||||||
|
|
||||||
|
if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
|
||||||
|
framebuffer_release(info);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
info->var.grayscale = 0;
|
info->var.grayscale = 0;
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
|
@ -579,8 +581,10 @@ err:
|
||||||
pci_release_region(pdev, 3);
|
pci_release_region(pdev, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info)
|
if (info) {
|
||||||
|
fb_dealloc_cmap(&info->cmap);
|
||||||
framebuffer_release(info);
|
framebuffer_release(info);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -604,6 +608,7 @@ static void lxfb_remove(struct pci_dev *pdev)
|
||||||
iounmap(par->vp_regs);
|
iounmap(par->vp_regs);
|
||||||
pci_release_region(pdev, 3);
|
pci_release_region(pdev, 3);
|
||||||
|
|
||||||
|
fb_dealloc_cmap(&info->cmap);
|
||||||
pci_set_drvdata(pdev, NULL);
|
pci_set_drvdata(pdev, NULL);
|
||||||
framebuffer_release(info);
|
framebuffer_release(info);
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ static struct w1_therm_family_converter w1_therm_families[] = {
|
||||||
|
|
||||||
static inline int w1_DS18B20_convert_temp(u8 rom[9])
|
static inline int w1_DS18B20_convert_temp(u8 rom[9])
|
||||||
{
|
{
|
||||||
s16 t = (rom[1] << 8) | rom[0];
|
int t = ((s16)rom[1] << 8) | rom[0];
|
||||||
t = t*1000/16;
|
t = t*1000/16;
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1185,9 +1185,12 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
|
||||||
es = sbi->s_es;
|
es = sbi->s_es;
|
||||||
if (((sbi->s_mount_opt & EXT2_MOUNT_XIP) !=
|
if (((sbi->s_mount_opt & EXT2_MOUNT_XIP) !=
|
||||||
(old_mount_opt & EXT2_MOUNT_XIP)) &&
|
(old_mount_opt & EXT2_MOUNT_XIP)) &&
|
||||||
invalidate_inodes(sb))
|
invalidate_inodes(sb)) {
|
||||||
ext2_warning(sb, __func__, "busy inodes while remounting "\
|
ext2_warning(sb, __func__, "refusing change of xip flag "
|
||||||
"xip remain in cache (no functional problem)");
|
"with busy inodes while remounting");
|
||||||
|
sbi->s_mount_opt &= ~EXT2_MOUNT_XIP;
|
||||||
|
sbi->s_mount_opt |= old_mount_opt & EXT2_MOUNT_XIP;
|
||||||
|
}
|
||||||
if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
|
if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
|
||||||
return 0;
|
return 0;
|
||||||
if (*flags & MS_RDONLY) {
|
if (*flags & MS_RDONLY) {
|
||||||
|
|
|
@ -2428,12 +2428,13 @@ static void ext3_write_super (struct super_block * sb)
|
||||||
|
|
||||||
static int ext3_sync_fs(struct super_block *sb, int wait)
|
static int ext3_sync_fs(struct super_block *sb, int wait)
|
||||||
{
|
{
|
||||||
sb->s_dirt = 0;
|
tid_t target;
|
||||||
if (wait)
|
|
||||||
ext3_force_commit(sb);
|
|
||||||
else
|
|
||||||
journal_start_commit(EXT3_SB(sb)->s_journal, NULL);
|
|
||||||
|
|
||||||
|
sb->s_dirt = 0;
|
||||||
|
if (journal_start_commit(EXT3_SB(sb)->s_journal, &target)) {
|
||||||
|
if (wait)
|
||||||
|
log_wait_commit(EXT3_SB(sb)->s_journal, target);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,8 @@ static int hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma)
|
||||||
|
|
||||||
if (hugetlb_reserve_pages(inode,
|
if (hugetlb_reserve_pages(inode,
|
||||||
vma->vm_pgoff >> huge_page_order(h),
|
vma->vm_pgoff >> huge_page_order(h),
|
||||||
len >> huge_page_shift(h), vma))
|
len >> huge_page_shift(h), vma,
|
||||||
|
vma->vm_flags))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
@ -947,7 +948,7 @@ static int can_do_hugetlb_shm(void)
|
||||||
can_do_mlock());
|
can_do_mlock());
|
||||||
}
|
}
|
||||||
|
|
||||||
struct file *hugetlb_file_setup(const char *name, size_t size)
|
struct file *hugetlb_file_setup(const char *name, size_t size, int acctflag)
|
||||||
{
|
{
|
||||||
int error = -ENOMEM;
|
int error = -ENOMEM;
|
||||||
struct file *file;
|
struct file *file;
|
||||||
|
@ -981,7 +982,8 @@ struct file *hugetlb_file_setup(const char *name, size_t size)
|
||||||
|
|
||||||
error = -ENOMEM;
|
error = -ENOMEM;
|
||||||
if (hugetlb_reserve_pages(inode, 0,
|
if (hugetlb_reserve_pages(inode, 0,
|
||||||
size >> huge_page_shift(hstate_inode(inode)), NULL))
|
size >> huge_page_shift(hstate_inode(inode)), NULL,
|
||||||
|
acctflag))
|
||||||
goto out_inode;
|
goto out_inode;
|
||||||
|
|
||||||
d_instantiate(dentry, inode);
|
d_instantiate(dentry, inode);
|
||||||
|
|
|
@ -427,7 +427,7 @@ int __log_space_left(journal_t *journal)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called under j_state_lock. Returns true if a transaction was started.
|
* Called under j_state_lock. Returns true if a transaction commit was started.
|
||||||
*/
|
*/
|
||||||
int __log_start_commit(journal_t *journal, tid_t target)
|
int __log_start_commit(journal_t *journal, tid_t target)
|
||||||
{
|
{
|
||||||
|
@ -495,7 +495,8 @@ int journal_force_commit_nested(journal_t *journal)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start a commit of the current running transaction (if any). Returns true
|
* Start a commit of the current running transaction (if any). Returns true
|
||||||
* if a transaction was started, and fills its tid in at *ptid
|
* if a transaction is going to be committed (or is currently already
|
||||||
|
* committing), and fills its tid in at *ptid
|
||||||
*/
|
*/
|
||||||
int journal_start_commit(journal_t *journal, tid_t *ptid)
|
int journal_start_commit(journal_t *journal, tid_t *ptid)
|
||||||
{
|
{
|
||||||
|
@ -505,15 +506,19 @@ int journal_start_commit(journal_t *journal, tid_t *ptid)
|
||||||
if (journal->j_running_transaction) {
|
if (journal->j_running_transaction) {
|
||||||
tid_t tid = journal->j_running_transaction->t_tid;
|
tid_t tid = journal->j_running_transaction->t_tid;
|
||||||
|
|
||||||
ret = __log_start_commit(journal, tid);
|
__log_start_commit(journal, tid);
|
||||||
if (ret && ptid)
|
/* There's a running transaction and we've just made sure
|
||||||
|
* it's commit has been scheduled. */
|
||||||
|
if (ptid)
|
||||||
*ptid = tid;
|
*ptid = tid;
|
||||||
} else if (journal->j_committing_transaction && ptid) {
|
ret = 1;
|
||||||
|
} else if (journal->j_committing_transaction) {
|
||||||
/*
|
/*
|
||||||
* If ext3_write_super() recently started a commit, then we
|
* If ext3_write_super() recently started a commit, then we
|
||||||
* have to wait for completion of that transaction
|
* have to wait for completion of that transaction
|
||||||
*/
|
*/
|
||||||
*ptid = journal->j_committing_transaction->t_tid;
|
if (ptid)
|
||||||
|
*ptid = journal->j_committing_transaction->t_tid;
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
spin_unlock(&journal->j_state_lock);
|
spin_unlock(&journal->j_state_lock);
|
||||||
|
|
|
@ -378,6 +378,7 @@ struct cgroup_subsys {
|
||||||
* - initiating hotplug events
|
* - initiating hotplug events
|
||||||
*/
|
*/
|
||||||
struct mutex hierarchy_mutex;
|
struct mutex hierarchy_mutex;
|
||||||
|
struct lock_class_key subsys_key;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Link to parent, and list entry in parent's children.
|
* Link to parent, and list entry in parent's children.
|
||||||
|
|
|
@ -282,6 +282,18 @@ static inline void dmaengine_put(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_DMA
|
||||||
|
#define net_dmaengine_get() dmaengine_get()
|
||||||
|
#define net_dmaengine_put() dmaengine_put()
|
||||||
|
#else
|
||||||
|
static inline void net_dmaengine_get(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void net_dmaengine_put(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan,
|
dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan,
|
||||||
void *dest, void *src, size_t len);
|
void *dest, void *src, size_t len);
|
||||||
dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan,
|
dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan,
|
||||||
|
|
|
@ -33,7 +33,8 @@ unsigned long hugetlb_total_pages(void);
|
||||||
int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||||
unsigned long address, int write_access);
|
unsigned long address, int write_access);
|
||||||
int hugetlb_reserve_pages(struct inode *inode, long from, long to,
|
int hugetlb_reserve_pages(struct inode *inode, long from, long to,
|
||||||
struct vm_area_struct *vma);
|
struct vm_area_struct *vma,
|
||||||
|
int acctflags);
|
||||||
void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
|
void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
|
||||||
|
|
||||||
extern unsigned long hugepages_treat_as_movable;
|
extern unsigned long hugepages_treat_as_movable;
|
||||||
|
@ -138,7 +139,7 @@ static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb)
|
||||||
|
|
||||||
extern const struct file_operations hugetlbfs_file_operations;
|
extern const struct file_operations hugetlbfs_file_operations;
|
||||||
extern struct vm_operations_struct hugetlb_vm_ops;
|
extern struct vm_operations_struct hugetlb_vm_ops;
|
||||||
struct file *hugetlb_file_setup(const char *name, size_t);
|
struct file *hugetlb_file_setup(const char *name, size_t, int);
|
||||||
int hugetlb_get_quota(struct address_space *mapping, long delta);
|
int hugetlb_get_quota(struct address_space *mapping, long delta);
|
||||||
void hugetlb_put_quota(struct address_space *mapping, long delta);
|
void hugetlb_put_quota(struct address_space *mapping, long delta);
|
||||||
|
|
||||||
|
@ -158,9 +159,9 @@ static inline void set_file_hugepages(struct file *file)
|
||||||
}
|
}
|
||||||
#else /* !CONFIG_HUGETLBFS */
|
#else /* !CONFIG_HUGETLBFS */
|
||||||
|
|
||||||
#define is_file_hugepages(file) 0
|
#define is_file_hugepages(file) 0
|
||||||
#define set_file_hugepages(file) BUG()
|
#define set_file_hugepages(file) BUG()
|
||||||
#define hugetlb_file_setup(name,size) ERR_PTR(-ENOSYS)
|
#define hugetlb_file_setup(name,size,acctflag) ERR_PTR(-ENOSYS)
|
||||||
|
|
||||||
#endif /* !CONFIG_HUGETLBFS */
|
#endif /* !CONFIG_HUGETLBFS */
|
||||||
|
|
||||||
|
|
|
@ -48,12 +48,11 @@ extern struct fs_struct init_fs;
|
||||||
.posix_timers = LIST_HEAD_INIT(sig.posix_timers), \
|
.posix_timers = LIST_HEAD_INIT(sig.posix_timers), \
|
||||||
.cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \
|
.cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \
|
||||||
.rlim = INIT_RLIMITS, \
|
.rlim = INIT_RLIMITS, \
|
||||||
.cputime = { .totals = { \
|
.cputimer = { \
|
||||||
.utime = cputime_zero, \
|
.cputime = INIT_CPUTIME, \
|
||||||
.stime = cputime_zero, \
|
.running = 0, \
|
||||||
.sum_exec_runtime = 0, \
|
.lock = __SPIN_LOCK_UNLOCKED(sig.cputimer.lock), \
|
||||||
.lock = __SPIN_LOCK_UNLOCKED(sig.cputime.totals.lock), \
|
}, \
|
||||||
}, }, \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern struct nsproxy init_nsproxy;
|
extern struct nsproxy init_nsproxy;
|
||||||
|
|
|
@ -1129,8 +1129,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
|
||||||
unsigned long flag, unsigned long pgoff);
|
unsigned long flag, unsigned long pgoff);
|
||||||
extern unsigned long mmap_region(struct file *file, unsigned long addr,
|
extern unsigned long mmap_region(struct file *file, unsigned long addr,
|
||||||
unsigned long len, unsigned long flags,
|
unsigned long len, unsigned long flags,
|
||||||
unsigned int vm_flags, unsigned long pgoff,
|
unsigned int vm_flags, unsigned long pgoff);
|
||||||
int accountable);
|
|
||||||
|
|
||||||
static inline unsigned long do_mmap(struct file *file, unsigned long addr,
|
static inline unsigned long do_mmap(struct file *file, unsigned long addr,
|
||||||
unsigned long len, unsigned long prot,
|
unsigned long len, unsigned long prot,
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue