diff --git a/[refs] b/[refs]
index df00727842c5..5aedfd7b77ba 100644
--- a/[refs]
+++ b/[refs]
@@ -1,2 +1,2 @@
---
-refs/heads/master: 43e347a1c451ff61ac16cc0e88ea9f48bbc6351d
+refs/heads/master: ee5324ea33d373558da43a22f3c1074a5fd5496e
diff --git a/trunk/Documentation/DMA-attributes.txt b/trunk/Documentation/DMA-attributes.txt
index 5c72eed89563..b768cc0e402b 100644
--- a/trunk/Documentation/DMA-attributes.txt
+++ b/trunk/Documentation/DMA-attributes.txt
@@ -31,21 +31,3 @@ may be weakly ordered, that is that reads and writes may pass each other.
Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING,
those that do not will simply ignore the attribute and exhibit default
behavior.
-
-DMA_ATTR_WRITE_COMBINE
-----------------------
-
-DMA_ATTR_WRITE_COMBINE specifies that writes to the mapping may be
-buffered to improve performance.
-
-Since it is optional for platforms to implement DMA_ATTR_WRITE_COMBINE,
-those that do not will simply ignore the attribute and exhibit default
-behavior.
-
-DMA_ATTR_NON_CONSISTENT
------------------------
-
-DMA_ATTR_NON_CONSISTENT lets the platform to choose to return either
-consistent or non-consistent memory as it sees fit. By using this API,
-you are guaranteeing to the platform that you have all the correct and
-necessary sync points for this memory in the driver.
diff --git a/trunk/Documentation/DocBook/device-drivers.tmpl b/trunk/Documentation/DocBook/device-drivers.tmpl
index 7514dbf0a679..9c27e5125dd2 100644
--- a/trunk/Documentation/DocBook/device-drivers.tmpl
+++ b/trunk/Documentation/DocBook/device-drivers.tmpl
@@ -446,21 +446,4 @@ X!Idrivers/video/console/fonts.c
!Edrivers/i2c/i2c-core.c
-
- High Speed Synchronous Serial Interface (HSI)
-
-
- High Speed Synchronous Serial Interface (HSI) is a
- serial interface mainly used for connecting application
- engines (APE) with cellular modem engines (CMT) in cellular
- handsets.
-
- HSI provides multiplexing for up to 16 logical channels,
- low-latency and full duplex communication.
-
-
-!Iinclude/linux/hsi/hsi.h
-!Edrivers/hsi/hsi.c
-
-
diff --git a/trunk/Documentation/cgroups/cpusets.txt b/trunk/Documentation/cgroups/cpusets.txt
index cefd3d8bbd11..5c51ed406d1d 100644
--- a/trunk/Documentation/cgroups/cpusets.txt
+++ b/trunk/Documentation/cgroups/cpusets.txt
@@ -217,7 +217,7 @@ and name space for cpusets, with a minimum of additional kernel code.
The cpus and mems files in the root (top_cpuset) cpuset are
read-only. The cpus file automatically tracks the value of
-cpu_online_mask using a CPU hotplug notifier, and the mems file
+cpu_online_map using a CPU hotplug notifier, and the mems file
automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e.,
nodes with memory--using the cpuset_track_online_nodes() hook.
diff --git a/trunk/Documentation/cpu-hotplug.txt b/trunk/Documentation/cpu-hotplug.txt
index 66ef8f35613d..a20bfd415e41 100644
--- a/trunk/Documentation/cpu-hotplug.txt
+++ b/trunk/Documentation/cpu-hotplug.txt
@@ -47,7 +47,7 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using
other cpus later online, read FAQ's for more info.
additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets
- cpu_possible_mask = cpu_present_mask + additional_cpus
+ cpu_possible_map = cpu_present_map + additional_cpus
cede_offline={"off","on"} Use this option to disable/enable putting offlined
processors to an extended H_CEDE state on
@@ -64,11 +64,11 @@ should only rely on this to count the # of cpus, but *MUST* not rely
on the apicid values in those tables for disabled apics. In the event
BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could
use this parameter "additional_cpus=x" to represent those cpus in the
-cpu_possible_mask.
+cpu_possible_map.
possible_cpus=n [s390,x86_64] use this to set hotpluggable cpus.
This option sets possible_cpus bits in
- cpu_possible_mask. Thus keeping the numbers of bits set
+ cpu_possible_map. Thus keeping the numbers of bits set
constant even if the machine gets rebooted.
CPU maps and such
@@ -76,7 +76,7 @@ CPU maps and such
[More on cpumaps and primitive to manipulate, please check
include/linux/cpumask.h that has more descriptive text.]
-cpu_possible_mask: Bitmap of possible CPUs that can ever be available in the
+cpu_possible_map: Bitmap of possible CPUs that can ever be available in the
system. This is used to allocate some boot time memory for per_cpu variables
that aren't designed to grow/shrink as CPUs are made available or removed.
Once set during boot time discovery phase, the map is static, i.e no bits
@@ -84,13 +84,13 @@ are added or removed anytime. Trimming it accurately for your system needs
upfront can save some boot time memory. See below for how we use heuristics
in x86_64 case to keep this under check.
-cpu_online_mask: Bitmap of all CPUs currently online. Its set in __cpu_up()
+cpu_online_map: Bitmap of all CPUs currently online. Its set in __cpu_up()
after a cpu is available for kernel scheduling and ready to receive
interrupts from devices. Its cleared when a cpu is brought down using
__cpu_disable(), before which all OS services including interrupts are
migrated to another target CPU.
-cpu_present_mask: Bitmap of CPUs currently present in the system. Not all
+cpu_present_map: Bitmap of CPUs currently present in the system. Not all
of them may be online. When physical hotplug is processed by the relevant
subsystem (e.g ACPI) can change and new bit either be added or removed
from the map depending on the event is hot-add/hot-remove. There are currently
@@ -99,22 +99,22 @@ at which time hotplug is disabled.
You really dont need to manipulate any of the system cpu maps. They should
be read-only for most use. When setting up per-cpu resources almost always use
-cpu_possible_mask/for_each_possible_cpu() to iterate.
+cpu_possible_map/for_each_possible_cpu() to iterate.
Never use anything other than cpumask_t to represent bitmap of CPUs.
#include
- for_each_possible_cpu - Iterate over cpu_possible_mask
- for_each_online_cpu - Iterate over cpu_online_mask
- for_each_present_cpu - Iterate over cpu_present_mask
+ for_each_possible_cpu - Iterate over cpu_possible_map
+ for_each_online_cpu - Iterate over cpu_online_map
+ for_each_present_cpu - Iterate over cpu_present_map
for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask.
#include
get_online_cpus() and put_online_cpus():
The above calls are used to inhibit cpu hotplug operations. While the
-cpu_hotplug.refcount is non zero, the cpu_online_mask will not change.
+cpu_hotplug.refcount is non zero, the cpu_online_map will not change.
If you merely need to avoid cpus going away, you could also use
preempt_disable() and preempt_enable() for those sections.
Just remember the critical section cannot call any
diff --git a/trunk/Documentation/devicetree/bindings/regulator/anatop-regulator.txt b/trunk/Documentation/devicetree/bindings/regulator/anatop-regulator.txt
deleted file mode 100644
index 357758cb6e92..000000000000
--- a/trunk/Documentation/devicetree/bindings/regulator/anatop-regulator.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-Anatop Voltage regulators
-
-Required properties:
-- compatible: Must be "fsl,anatop-regulator"
-- anatop-reg-offset: Anatop MFD register offset
-- anatop-vol-bit-shift: Bit shift for the register
-- anatop-vol-bit-width: Number of bits used in the register
-- anatop-min-bit-val: Minimum value of this register
-- anatop-min-voltage: Minimum voltage of this regulator
-- anatop-max-voltage: Maximum voltage of this regulator
-
-Any property defined as part of the core regulator
-binding, defined in regulator.txt, can also be used.
-
-Example:
-
- regulator-vddpu {
- compatible = "fsl,anatop-regulator";
- regulator-name = "vddpu";
- regulator-min-microvolt = <725000>;
- regulator-max-microvolt = <1300000>;
- regulator-always-on;
- anatop-reg-offset = <0x140>;
- anatop-vol-bit-shift = <9>;
- anatop-vol-bit-width = <5>;
- anatop-min-bit-val = <1>;
- anatop-min-voltage = <725000>;
- anatop-max-voltage = <1300000>;
- };
diff --git a/trunk/Documentation/feature-removal-schedule.txt b/trunk/Documentation/feature-removal-schedule.txt
index 709e08e9a222..c1be8066ea59 100644
--- a/trunk/Documentation/feature-removal-schedule.txt
+++ b/trunk/Documentation/feature-removal-schedule.txt
@@ -6,6 +6,14 @@ be removed from this file.
---------------------------
+What: x86 floppy disable_hlt
+When: 2012
+Why: ancient workaround of dubious utility clutters the
+ code used by everybody else.
+Who: Len Brown
+
+---------------------------
+
What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle
When: 2012
Why: This optional sub-feature of APM is of dubious reliability,
diff --git a/trunk/Documentation/hwmon/k10temp b/trunk/Documentation/hwmon/k10temp
index 90956b618025..a10f73624ad3 100644
--- a/trunk/Documentation/hwmon/k10temp
+++ b/trunk/Documentation/hwmon/k10temp
@@ -11,7 +11,7 @@ Supported chips:
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
* AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series)
* AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
-* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity"
+* AMD Family 15h processors: "Bulldozer"
Prefix: 'k10temp'
Addresses scanned: PCI space
diff --git a/trunk/Documentation/ioctl/ioctl-number.txt b/trunk/Documentation/ioctl/ioctl-number.txt
index e34b531dc316..3b7488fc3373 100644
--- a/trunk/Documentation/ioctl/ioctl-number.txt
+++ b/trunk/Documentation/ioctl/ioctl-number.txt
@@ -225,7 +225,6 @@ Code Seq#(hex) Include File Comments
'j' 00-3F linux/joystick.h
'k' 00-0F linux/spi/spidev.h conflict!
'k' 00-05 video/kyro.h conflict!
-'k' 10-17 linux/hsi/hsi_char.h HSI character device
'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system
'l' 40-7F linux/udf_fs_i.h in development:
diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS
index 3e25ba82e0fa..eecf3441ac21 100644
--- a/trunk/MAINTAINERS
+++ b/trunk/MAINTAINERS
@@ -1251,6 +1251,7 @@ ATHEROS ATH5K WIRELESS DRIVER
M: Jiri Slaby
M: Nick Kossifidis
M: "Luis R. Rodriguez"
+M: Bob Copeland
L: linux-wireless@vger.kernel.org
L: ath5k-devel@lists.ath5k.org
W: http://wireless.kernel.org/en/users/Drivers/ath5k
@@ -3556,13 +3557,17 @@ L: linux-pm@vger.kernel.org
S: Supported
F: arch/x86/platform/mrst/pmu.*
-INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT
-M: Stanislav Yakovlev
+INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
L: linux-wireless@vger.kernel.org
-S: Maintained
+S: Orphan
F: Documentation/networking/README.ipw2100
+F: drivers/net/wireless/ipw2x00/ipw2100.*
+
+INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
+L: linux-wireless@vger.kernel.org
+S: Orphan
F: Documentation/networking/README.ipw2200
-F: drivers/net/wireless/ipw2x00/
+F: drivers/net/wireless/ipw2x00/ipw2200.*
INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
M: Joseph Cihula
@@ -5637,7 +5642,7 @@ M: Ohad Ben-Cohen
S: Maintained
F: drivers/remoteproc/
F: Documentation/remoteproc.txt
-F: include/linux/remoteproc.h
+F: include/linux/remoteproc.txt
RFKILL
M: Johannes Berg
@@ -6287,15 +6292,6 @@ F: drivers/tty/serial/sunsu.c
F: drivers/tty/serial/sunzilog.c
F: drivers/tty/serial/sunzilog.h
-SPARSE CHECKER
-M: "Christopher Li"
-L: linux-sparse@vger.kernel.org
-W: https://sparse.wiki.kernel.org/
-T: git git://git.kernel.org/pub/scm/devel/sparse/sparse.git
-T: git git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git
-S: Maintained
-F: include/linux/compiler.h
-
SPEAR PLATFORM SUPPORT
M: Viresh Kumar
L: spear-devel@list.st.com
diff --git a/trunk/arch/alpha/include/asm/dma-mapping.h b/trunk/arch/alpha/include/asm/dma-mapping.h
index dfa32f061320..4567aca6fdd6 100644
--- a/trunk/arch/alpha/include/asm/dma-mapping.h
+++ b/trunk/arch/alpha/include/asm/dma-mapping.h
@@ -12,22 +12,16 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev)
#include
-#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
-
-static inline void *dma_alloc_attrs(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t gfp,
- struct dma_attrs *attrs)
+static inline void *dma_alloc_coherent(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t gfp)
{
- return get_dma_ops(dev)->alloc(dev, size, dma_handle, gfp, attrs);
+ return get_dma_ops(dev)->alloc_coherent(dev, size, dma_handle, gfp);
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *vaddr, dma_addr_t dma_handle)
{
- get_dma_ops(dev)->free(dev, size, vaddr, dma_handle, attrs);
+ get_dma_ops(dev)->free_coherent(dev, size, vaddr, dma_handle);
}
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
diff --git a/trunk/arch/alpha/kernel/pci-noop.c b/trunk/arch/alpha/kernel/pci-noop.c
index df24b76f9246..04eea4894ef3 100644
--- a/trunk/arch/alpha/kernel/pci-noop.c
+++ b/trunk/arch/alpha/kernel/pci-noop.c
@@ -108,8 +108,7 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,
}
static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t gfp,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t gfp)
{
void *ret;
@@ -124,8 +123,7 @@ static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
}
static void alpha_noop_free_coherent(struct device *dev, size_t size,
- void *cpu_addr, dma_addr_t dma_addr,
- struct dma_attrs *attrs)
+ void *cpu_addr, dma_addr_t dma_addr)
{
free_pages((unsigned long)cpu_addr, get_order(size));
}
@@ -176,8 +174,8 @@ static int alpha_noop_set_mask(struct device *dev, u64 mask)
}
struct dma_map_ops alpha_noop_ops = {
- .alloc = alpha_noop_alloc_coherent,
- .free = alpha_noop_free_coherent,
+ .alloc_coherent = alpha_noop_alloc_coherent,
+ .free_coherent = alpha_noop_free_coherent,
.map_page = alpha_noop_map_page,
.map_sg = alpha_noop_map_sg,
.mapping_error = alpha_noop_mapping_error,
diff --git a/trunk/arch/alpha/kernel/pci_iommu.c b/trunk/arch/alpha/kernel/pci_iommu.c
index cd634795aa9c..43610804987d 100644
--- a/trunk/arch/alpha/kernel/pci_iommu.c
+++ b/trunk/arch/alpha/kernel/pci_iommu.c
@@ -434,8 +434,7 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr,
else DMA_ADDRP is undefined. */
static void *alpha_pci_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_addrp, gfp_t gfp,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_addrp, gfp_t gfp)
{
struct pci_dev *pdev = alpha_gendev_to_pci(dev);
void *cpu_addr;
@@ -479,8 +478,7 @@ static void *alpha_pci_alloc_coherent(struct device *dev, size_t size,
DMA_ADDR past this call are illegal. */
static void alpha_pci_free_coherent(struct device *dev, size_t size,
- void *cpu_addr, dma_addr_t dma_addr,
- struct dma_attrs *attrs)
+ void *cpu_addr, dma_addr_t dma_addr)
{
struct pci_dev *pdev = alpha_gendev_to_pci(dev);
pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
@@ -954,8 +952,8 @@ static int alpha_pci_set_mask(struct device *dev, u64 mask)
}
struct dma_map_ops alpha_pci_ops = {
- .alloc = alpha_pci_alloc_coherent,
- .free = alpha_pci_free_coherent,
+ .alloc_coherent = alpha_pci_alloc_coherent,
+ .free_coherent = alpha_pci_free_coherent,
.map_page = alpha_pci_map_page,
.unmap_page = alpha_pci_unmap_page,
.map_sg = alpha_pci_map_sg,
diff --git a/trunk/arch/alpha/kernel/signal.c b/trunk/arch/alpha/kernel/signal.c
index 35f2ef44de12..6f7feb5db271 100644
--- a/trunk/arch/alpha/kernel/signal.c
+++ b/trunk/arch/alpha/kernel/signal.c
@@ -120,13 +120,12 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act,
*/
SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask)
{
- sigset_t blocked;
-
- current->saved_sigmask = current->blocked;
-
mask &= _BLOCKABLE;
- siginitset(&blocked, mask);
- set_current_blocked(&blocked);
+ spin_lock_irq(¤t->sighand->siglock);
+ current->saved_sigmask = current->blocked;
+ siginitset(¤t->blocked, mask);
+ recalc_sigpending();
+ spin_unlock_irq(¤t->sighand->siglock);
current->state = TASK_INTERRUPTIBLE;
schedule();
@@ -239,7 +238,10 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs,
goto give_sigsegv;
sigdelsetmask(&set, ~_BLOCKABLE);
- set_current_blocked(&set);
+ spin_lock_irq(¤t->sighand->siglock);
+ current->blocked = set;
+ recalc_sigpending();
+ spin_unlock_irq(¤t->sighand->siglock);
if (restore_sigcontext(sc, regs, sw))
goto give_sigsegv;
@@ -274,7 +276,10 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs,
goto give_sigsegv;
sigdelsetmask(&set, ~_BLOCKABLE);
- set_current_blocked(&set);
+ spin_lock_irq(¤t->sighand->siglock);
+ current->blocked = set;
+ recalc_sigpending();
+ spin_unlock_irq(¤t->sighand->siglock);
if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw))
goto give_sigsegv;
@@ -496,8 +501,14 @@ handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info,
else
ret = setup_frame(sig, ka, oldset, regs, sw);
- if (ret == 0)
- block_sigmask(ka, sig);
+ if (ret == 0) {
+ spin_lock_irq(¤t->sighand->siglock);
+ sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask);
+ if (!(ka->sa.sa_flags & SA_NODEFER))
+ sigaddset(¤t->blocked,sig);
+ recalc_sigpending();
+ spin_unlock_irq(¤t->sighand->siglock);
+ }
return ret;
}
diff --git a/trunk/arch/alpha/kernel/smp.c b/trunk/arch/alpha/kernel/smp.c
index 50d438db1f6b..4087a569b43b 100644
--- a/trunk/arch/alpha/kernel/smp.c
+++ b/trunk/arch/alpha/kernel/smp.c
@@ -450,7 +450,7 @@ setup_smp(void)
smp_num_probed = 1;
}
- printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n",
+ printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_map = %lx\n",
smp_num_probed, cpumask_bits(cpu_present_mask)[0]);
}
diff --git a/trunk/arch/arm/kernel/bios32.c b/trunk/arch/arm/kernel/bios32.c
index ede5f7741c42..632df9a66f8c 100644
--- a/trunk/arch/arm/kernel/bios32.c
+++ b/trunk/arch/arm/kernel/bios32.c
@@ -299,6 +299,7 @@ static inline int pdev_bad_for_parity(struct pci_dev *dev)
*/
void pcibios_fixup_bus(struct pci_bus *bus)
{
+ struct pci_sys_data *root = bus->sysdata;
struct pci_dev *dev;
u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK;
diff --git a/trunk/arch/arm/kernel/insn.c b/trunk/arch/arm/kernel/insn.c
index b760340b7014..ab312e516546 100644
--- a/trunk/arch/arm/kernel/insn.c
+++ b/trunk/arch/arm/kernel/insn.c
@@ -1,4 +1,3 @@
-#include
#include
#include
diff --git a/trunk/arch/arm/kernel/kprobes.c b/trunk/arch/arm/kernel/kprobes.c
index 4dd41fc9e235..ab1869dac97a 100644
--- a/trunk/arch/arm/kernel/kprobes.c
+++ b/trunk/arch/arm/kernel/kprobes.c
@@ -152,7 +152,7 @@ int __kprobes __arch_disarm_kprobe(void *p)
void __kprobes arch_disarm_kprobe(struct kprobe *p)
{
- stop_machine(__arch_disarm_kprobe, p, cpu_online_mask);
+ stop_machine(__arch_disarm_kprobe, p, &cpu_online_map);
}
void __kprobes arch_remove_kprobe(struct kprobe *p)
diff --git a/trunk/arch/arm/kernel/ptrace.c b/trunk/arch/arm/kernel/ptrace.c
index 80abafb9bf33..45956c9d0ef0 100644
--- a/trunk/arch/arm/kernel/ptrace.c
+++ b/trunk/arch/arm/kernel/ptrace.c
@@ -256,7 +256,7 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
{
unsigned long tmp;
- if (off & 3)
+ if (off & 3 || off >= sizeof(struct user))
return -EIO;
tmp = 0;
@@ -268,8 +268,6 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
tmp = tsk->mm->end_code;
else if (off < sizeof(struct pt_regs))
tmp = get_user_reg(tsk, off >> 2);
- else if (off >= sizeof(struct user))
- return -EIO;
return put_user(tmp, ret);
}
diff --git a/trunk/arch/arm/kernel/smp.c b/trunk/arch/arm/kernel/smp.c
index addbbe8028c2..2cee7d1eb958 100644
--- a/trunk/arch/arm/kernel/smp.c
+++ b/trunk/arch/arm/kernel/smp.c
@@ -349,7 +349,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
* re-initialize the map in platform_smp_prepare_cpus() if
* present != possible (e.g. physical hotplug).
*/
- init_cpu_present(cpu_possible_mask);
+ init_cpu_present(&cpu_possible_map);
/*
* Initialise the SCU if there are more than one CPU
@@ -581,9 +581,8 @@ void smp_send_stop(void)
unsigned long timeout;
if (num_online_cpus() > 1) {
- struct cpumask mask;
- cpumask_copy(&mask, cpu_online_mask);
- cpumask_clear_cpu(smp_processor_id(), &mask);
+ cpumask_t mask = cpu_online_map;
+ cpu_clear(smp_processor_id(), mask);
smp_cross_call(&mask, IPI_CPU_STOP);
}
diff --git a/trunk/arch/arm/mach-msm/include/mach/uncompress.h b/trunk/arch/arm/mach-msm/include/mach/uncompress.h
index c14011fe832d..169a84007456 100644
--- a/trunk/arch/arm/mach-msm/include/mach/uncompress.h
+++ b/trunk/arch/arm/mach-msm/include/mach/uncompress.h
@@ -16,7 +16,6 @@
#ifndef __ASM_ARCH_MSM_UNCOMPRESS_H
#define __ASM_ARCH_MSM_UNCOMPRESS_H
-#include
#include
#include
diff --git a/trunk/arch/arm/mach-msm/smd_debug.c b/trunk/arch/arm/mach-msm/smd_debug.c
index c56df9e932ae..0c56a5aaf588 100644
--- a/trunk/arch/arm/mach-msm/smd_debug.c
+++ b/trunk/arch/arm/mach-msm/smd_debug.c
@@ -203,9 +203,15 @@ static ssize_t debug_read(struct file *file, char __user *buf,
return simple_read_from_buffer(buf, count, ppos, debug_buffer, bsize);
}
+static int debug_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static const struct file_operations debug_ops = {
.read = debug_read,
- .open = simple_open,
+ .open = debug_open,
.llseek = default_llseek,
};
diff --git a/trunk/arch/arm/mach-omap2/include/mach/barriers.h b/trunk/arch/arm/mach-omap2/include/mach/barriers.h
index 1c582a8592b9..4fa72c7cc7cd 100644
--- a/trunk/arch/arm/mach-omap2/include/mach/barriers.h
+++ b/trunk/arch/arm/mach-omap2/include/mach/barriers.h
@@ -22,8 +22,6 @@
#ifndef __MACH_BARRIERS_H
#define __MACH_BARRIERS_H
-#include
-
extern void omap_bus_sync(void);
#define rmb() dsb()
diff --git a/trunk/arch/arm/mach-versatile/pci.c b/trunk/arch/arm/mach-versatile/pci.c
index a6e23f464528..d2268be8c34c 100644
--- a/trunk/arch/arm/mach-versatile/pci.c
+++ b/trunk/arch/arm/mach-versatile/pci.c
@@ -190,7 +190,7 @@ static struct resource pre_mem = {
.flags = IORESOURCE_MEM | IORESOURCE_PREFETCH,
};
-static int __init pci_versatile_setup_resources(struct list_head *resources)
+static int __init pci_versatile_setup_resources(struct pci_sys_data *sys)
{
int ret = 0;
@@ -218,9 +218,9 @@ static int __init pci_versatile_setup_resources(struct list_head *resources)
* the mem resource for this bus
* the prefetch mem resource for this bus
*/
- pci_add_resource_offset(resources, &io_mem, sys->io_offset);
- pci_add_resource_offset(resources, &non_mem, sys->mem_offset);
- pci_add_resource_offset(resources, &pre_mem, sys->mem_offset);
+ pci_add_resource_offset(&sys->resources, &io_mem, sys->io_offset);
+ pci_add_resource_offset(&sys->resources, &non_mem, sys->mem_offset);
+ pci_add_resource_offset(&sys->resources, &pre_mem, sys->mem_offset);
goto out;
@@ -249,7 +249,7 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
if (nr == 0) {
sys->mem_offset = 0;
- ret = pci_versatile_setup_resources(&sys->resources);
+ ret = pci_versatile_setup_resources(sys);
if (ret < 0) {
printk("pci_versatile_setup: resources... oops?\n");
goto out;
diff --git a/trunk/arch/avr32/include/asm/barrier.h b/trunk/arch/avr32/include/asm/barrier.h
index 0961275373db..808001c9cf8c 100644
--- a/trunk/arch/avr32/include/asm/barrier.h
+++ b/trunk/arch/avr32/include/asm/barrier.h
@@ -8,8 +8,6 @@
#ifndef __ASM_AVR32_BARRIER_H
#define __ASM_AVR32_BARRIER_H
-#define nop() asm volatile("nop")
-
#define mb() asm volatile("" : : : "memory")
#define rmb() mb()
#define wmb() asm volatile("sync 0" : : : "memory")
diff --git a/trunk/arch/avr32/include/asm/special_insns.h b/trunk/arch/avr32/include/asm/special_insns.h
new file mode 100644
index 000000000000..f922218dfaa5
--- /dev/null
+++ b/trunk/arch/avr32/include/asm/special_insns.h
@@ -0,0 +1,13 @@
+/*
+ * Copyright (C) 2004-2006 Atmel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __ASM_AVR32_SPECIAL_INSNS_H
+#define __ASM_AVR32_SPECIAL_INSNS_H
+
+#define nop() asm volatile("nop")
+
+#endif /* __ASM_AVR32_SPECIAL_INSNS_H */
diff --git a/trunk/arch/avr32/mach-at32ap/include/mach/board.h b/trunk/arch/avr32/mach-at32ap/include/mach/board.h
index 70742ec997f8..71733866cb4f 100644
--- a/trunk/arch/avr32/mach-at32ap/include/mach/board.h
+++ b/trunk/arch/avr32/mach-at32ap/include/mach/board.h
@@ -7,7 +7,7 @@
#include
#include
#include
-#include
+#include
#define GPIO_PIN_NONE (-1)
diff --git a/trunk/arch/blackfin/Kconfig b/trunk/arch/blackfin/Kconfig
index 373a6902d8fa..c1269a1085e1 100644
--- a/trunk/arch/blackfin/Kconfig
+++ b/trunk/arch/blackfin/Kconfig
@@ -823,7 +823,7 @@ config CACHELINE_ALIGNED_L1
bool "Locate cacheline_aligned data to L1 Data Memory"
default y if !BF54x
default n if BF54x
- depends on !SMP && !BF531 && !CRC32
+ depends on !SMP && !BF531
help
If enabled, cacheline_aligned data is linked
into L1 data memory. (less latency)
diff --git a/trunk/arch/blackfin/configs/BF527-EZKIT_defconfig b/trunk/arch/blackfin/configs/BF527-EZKIT_defconfig
index 90b175323644..9ccc18a6b4df 100644
--- a/trunk/arch/blackfin/configs/BF527-EZKIT_defconfig
+++ b/trunk/arch/blackfin/configs/BF527-EZKIT_defconfig
@@ -147,7 +147,6 @@ CONFIG_USB_OTG_BLACKLIST_HUB=y
CONFIG_USB_MON=y
CONFIG_USB_MUSB_HDRC=y
CONFIG_USB_MUSB_BLACKFIN=y
-CONFIG_MUSB_PIO_ONLY=y
CONFIG_USB_STORAGE=y
CONFIG_USB_GADGET=y
CONFIG_RTC_CLASS=y
diff --git a/trunk/arch/blackfin/include/asm/cmpxchg.h b/trunk/arch/blackfin/include/asm/cmpxchg.h
index c05868cc61c1..ba2484f4cb2a 100644
--- a/trunk/arch/blackfin/include/asm/cmpxchg.h
+++ b/trunk/arch/blackfin/include/asm/cmpxchg.h
@@ -122,8 +122,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
(unsigned long)(n), sizeof(*(ptr))))
#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
-#define cmpxchg(ptr, o, n) cmpxchg_local((ptr), (o), (n))
-#define cmpxchg64(ptr, o, n) cmpxchg64_local((ptr), (o), (n))
+#include
#endif /* !CONFIG_SMP */
diff --git a/trunk/arch/blackfin/include/asm/gpio.h b/trunk/arch/blackfin/include/asm/gpio.h
index 12d3571b5232..5a25856381ff 100644
--- a/trunk/arch/blackfin/include/asm/gpio.h
+++ b/trunk/arch/blackfin/include/asm/gpio.h
@@ -244,24 +244,14 @@ static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
return -EINVAL;
}
-static inline int __gpio_get_value(unsigned gpio)
-{
- return bfin_gpio_get_value(gpio);
-}
-
-static inline void __gpio_set_value(unsigned gpio, int value)
-{
- return bfin_gpio_set_value(gpio, value);
-}
-
static inline int gpio_get_value(unsigned gpio)
{
- return __gpio_get_value(gpio);
+ return bfin_gpio_get_value(gpio);
}
static inline void gpio_set_value(unsigned gpio, int value)
{
- return __gpio_set_value(gpio, value);
+ return bfin_gpio_set_value(gpio, value);
}
static inline int gpio_to_irq(unsigned gpio)
diff --git a/trunk/arch/c6x/kernel/signal.c b/trunk/arch/c6x/kernel/signal.c
index 3b5a05099989..304f675826e9 100644
--- a/trunk/arch/c6x/kernel/signal.c
+++ b/trunk/arch/c6x/kernel/signal.c
@@ -85,7 +85,10 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs)
goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
- set_current_blocked(&set);
+ spin_lock_irq(¤t->sighand->siglock);
+ current->blocked = set;
+ recalc_sigpending();
+ spin_unlock_irq(¤t->sighand->siglock);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
goto badframe;
@@ -276,8 +279,15 @@ static int handle_signal(int sig,
/* Set up the stack frame */
ret = setup_rt_frame(sig, ka, info, oldset, regs);
- if (ret == 0)
- block_sigmask(ka, sig);
+ if (ret == 0) {
+ spin_lock_irq(¤t->sighand->siglock);
+ sigorsets(¤t->blocked, ¤t->blocked,
+ &ka->sa.sa_mask);
+ if (!(ka->sa.sa_flags & SA_NODEFER))
+ sigaddset(¤t->blocked, sig);
+ recalc_sigpending();
+ spin_unlock_irq(¤t->sighand->siglock);
+ }
return ret;
}
diff --git a/trunk/arch/frv/mb93090-mb00/pci-dma.c b/trunk/arch/frv/mb93090-mb00/pci-dma.c
index 4f8d8bcdc7de..41098a3803a2 100644
--- a/trunk/arch/frv/mb93090-mb00/pci-dma.c
+++ b/trunk/arch/frv/mb93090-mb00/pci-dma.c
@@ -13,7 +13,6 @@
#include
#include
#include
-#include
#include
#include
#include
diff --git a/trunk/arch/hexagon/include/asm/dma-mapping.h b/trunk/arch/hexagon/include/asm/dma-mapping.h
index 233ed3d2d25e..448b224ba4ef 100644
--- a/trunk/arch/hexagon/include/asm/dma-mapping.h
+++ b/trunk/arch/hexagon/include/asm/dma-mapping.h
@@ -71,35 +71,29 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
return (dma_addr == bad_dma_address);
}
-#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
-
-static inline void *dma_alloc_attrs(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+static inline void *dma_alloc_coherent(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t flag)
{
void *ret;
struct dma_map_ops *ops = get_dma_ops(dev);
BUG_ON(!dma_ops);
- ret = ops->alloc(dev, size, dma_handle, flag, attrs);
+ ret = ops->alloc_coherent(dev, size, dma_handle, flag);
debug_dma_alloc_coherent(dev, size, *dma_handle, ret);
return ret;
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *cpu_addr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *cpu_addr, dma_addr_t dma_handle)
{
struct dma_map_ops *dma_ops = get_dma_ops(dev);
BUG_ON(!dma_ops);
- dma_ops->free(dev, size, cpu_addr, dma_handle, attrs);
+ dma_ops->free_coherent(dev, size, cpu_addr, dma_handle);
debug_dma_free_coherent(dev, size, cpu_addr, dma_handle);
}
diff --git a/trunk/arch/hexagon/kernel/dma.c b/trunk/arch/hexagon/kernel/dma.c
index 37302218ca4a..e711ace62fdf 100644
--- a/trunk/arch/hexagon/kernel/dma.c
+++ b/trunk/arch/hexagon/kernel/dma.c
@@ -54,8 +54,7 @@ static struct gen_pool *coherent_pool;
/* Allocates from a pool of uncached memory that was reserved at boot time */
void *hexagon_dma_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_addr, gfp_t flag,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_addr, gfp_t flag)
{
void *ret;
@@ -82,7 +81,7 @@ void *hexagon_dma_alloc_coherent(struct device *dev, size_t size,
}
static void hexagon_free_coherent(struct device *dev, size_t size, void *vaddr,
- dma_addr_t dma_addr, struct dma_attrs *attrs)
+ dma_addr_t dma_addr)
{
gen_pool_free(coherent_pool, (unsigned long) vaddr, size);
}
@@ -203,8 +202,8 @@ static void hexagon_sync_single_for_device(struct device *dev,
}
struct dma_map_ops hexagon_dma_ops = {
- .alloc = hexagon_dma_alloc_coherent,
- .free = hexagon_free_coherent,
+ .alloc_coherent = hexagon_dma_alloc_coherent,
+ .free_coherent = hexagon_free_coherent,
.map_sg = hexagon_map_sg,
.map_page = hexagon_map_page,
.sync_single_for_cpu = hexagon_sync_single_for_cpu,
diff --git a/trunk/arch/hexagon/kernel/smp.c b/trunk/arch/hexagon/kernel/smp.c
index 9b44a9e2d05a..15d1fd22bbc5 100644
--- a/trunk/arch/hexagon/kernel/smp.c
+++ b/trunk/arch/hexagon/kernel/smp.c
@@ -35,7 +35,7 @@
#define BASE_IPI_IRQ 26
/*
- * cpu_possible_mask needs to be filled out prior to setup_per_cpu_areas
+ * cpu_possible_map needs to be filled out prior to setup_per_cpu_areas
* (which is prior to any of our smp_prepare_cpu crap), in order to set
* up the... per_cpu areas.
*/
@@ -208,7 +208,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
stack_start = ((void *) thread) + THREAD_SIZE;
__vmstart(start_secondary, stack_start);
- while (!cpu_online(cpu))
+ while (!cpu_isset(cpu, cpu_online_map))
barrier();
return 0;
@@ -229,7 +229,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
/* Right now, let's just fake it. */
for (i = 0; i < max_cpus; i++)
- set_cpu_present(i, true);
+ cpu_set(i, cpu_present_map);
/* Also need to register the interrupts for IPI */
if (max_cpus > 1)
@@ -269,5 +269,5 @@ void smp_start_cpus(void)
int i;
for (i = 0; i < NR_CPUS; i++)
- set_cpu_possible(i, true);
+ cpu_set(i, cpu_possible_map);
}
diff --git a/trunk/arch/ia64/hp/common/sba_iommu.c b/trunk/arch/ia64/hp/common/sba_iommu.c
index bcda5b2d121a..f6ea3a3b4a84 100644
--- a/trunk/arch/ia64/hp/common/sba_iommu.c
+++ b/trunk/arch/ia64/hp/common/sba_iommu.c
@@ -1129,8 +1129,7 @@ void sba_unmap_single_attrs(struct device *dev, dma_addr_t iova, size_t size,
* See Documentation/DMA-API-HOWTO.txt
*/
static void *
-sba_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
- gfp_t flags, struct dma_attrs *attrs)
+sba_alloc_coherent (struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags)
{
struct ioc *ioc;
void *addr;
@@ -1192,8 +1191,8 @@ sba_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
*
* See Documentation/DMA-API-HOWTO.txt
*/
-static void sba_free_coherent(struct device *dev, size_t size, void *vaddr,
- dma_addr_t dma_handle, struct dma_attrs *attrs)
+static void sba_free_coherent (struct device *dev, size_t size, void *vaddr,
+ dma_addr_t dma_handle)
{
sba_unmap_single_attrs(dev, dma_handle, size, 0, NULL);
free_pages((unsigned long) vaddr, get_order(size));
@@ -2213,8 +2212,8 @@ sba_page_override(char *str)
__setup("sbapagesize=",sba_page_override);
struct dma_map_ops sba_dma_ops = {
- .alloc = sba_alloc_coherent,
- .free = sba_free_coherent,
+ .alloc_coherent = sba_alloc_coherent,
+ .free_coherent = sba_free_coherent,
.map_page = sba_map_page,
.unmap_page = sba_unmap_page,
.map_sg = sba_map_sg_attrs,
diff --git a/trunk/arch/ia64/include/asm/dma-mapping.h b/trunk/arch/ia64/include/asm/dma-mapping.h
index 4f5e8148440d..4336d080b241 100644
--- a/trunk/arch/ia64/include/asm/dma-mapping.h
+++ b/trunk/arch/ia64/include/asm/dma-mapping.h
@@ -23,29 +23,23 @@ extern void machvec_dma_sync_single(struct device *, dma_addr_t, size_t,
extern void machvec_dma_sync_sg(struct device *, struct scatterlist *, int,
enum dma_data_direction);
-#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
-
-static inline void *dma_alloc_attrs(struct device *dev, size_t size,
- dma_addr_t *daddr, gfp_t gfp,
- struct dma_attrs *attrs)
+static inline void *dma_alloc_coherent(struct device *dev, size_t size,
+ dma_addr_t *daddr, gfp_t gfp)
{
struct dma_map_ops *ops = platform_dma_get_ops(dev);
void *caddr;
- caddr = ops->alloc(dev, size, daddr, gfp, attrs);
+ caddr = ops->alloc_coherent(dev, size, daddr, gfp);
debug_dma_alloc_coherent(dev, size, *daddr, caddr);
return caddr;
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *caddr, dma_addr_t daddr,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *caddr, dma_addr_t daddr)
{
struct dma_map_ops *ops = platform_dma_get_ops(dev);
debug_dma_free_coherent(dev, size, caddr, daddr);
- ops->free(dev, size, caddr, daddr, attrs);
+ ops->free_coherent(dev, size, caddr, daddr);
}
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
diff --git a/trunk/arch/ia64/kernel/acpi.c b/trunk/arch/ia64/kernel/acpi.c
index 6f38b6120d96..ac795d311f44 100644
--- a/trunk/arch/ia64/kernel/acpi.c
+++ b/trunk/arch/ia64/kernel/acpi.c
@@ -839,7 +839,7 @@ static __init int setup_additional_cpus(char *s)
early_param("additional_cpus", setup_additional_cpus);
/*
- * cpu_possible_mask should be static, it cannot change as CPUs
+ * cpu_possible_map should be static, it cannot change as CPUs
* are onlined, or offlined. The reason is per-cpu data-structures
* are allocated by some modules at init time, and dont expect to
* do this dynamically on cpu arrival/departure.
diff --git a/trunk/arch/ia64/kernel/pci-swiotlb.c b/trunk/arch/ia64/kernel/pci-swiotlb.c
index 939260aeac98..d9485d952ed0 100644
--- a/trunk/arch/ia64/kernel/pci-swiotlb.c
+++ b/trunk/arch/ia64/kernel/pci-swiotlb.c
@@ -15,24 +15,16 @@ int swiotlb __read_mostly;
EXPORT_SYMBOL(swiotlb);
static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t gfp,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t gfp)
{
if (dev->coherent_dma_mask != DMA_BIT_MASK(64))
gfp |= GFP_DMA;
return swiotlb_alloc_coherent(dev, size, dma_handle, gfp);
}
-static void ia64_swiotlb_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_addr,
- struct dma_attrs *attrs)
-{
- swiotlb_free_coherent(dev, size, vaddr, dma_addr);
-}
-
struct dma_map_ops swiotlb_dma_ops = {
- .alloc = ia64_swiotlb_alloc_coherent,
- .free = ia64_swiotlb_free_coherent,
+ .alloc_coherent = ia64_swiotlb_alloc_coherent,
+ .free_coherent = swiotlb_free_coherent,
.map_page = swiotlb_map_page,
.unmap_page = swiotlb_unmap_page,
.map_sg = swiotlb_map_sg_attrs,
diff --git a/trunk/arch/ia64/sn/pci/pci_dma.c b/trunk/arch/ia64/sn/pci/pci_dma.c
index 3290d6e00c31..a9d310de57da 100644
--- a/trunk/arch/ia64/sn/pci/pci_dma.c
+++ b/trunk/arch/ia64/sn/pci/pci_dma.c
@@ -76,8 +76,7 @@ EXPORT_SYMBOL(sn_dma_set_mask);
* more information.
*/
static void *sn_dma_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t * dma_handle, gfp_t flags,
- struct dma_attrs *attrs)
+ dma_addr_t * dma_handle, gfp_t flags)
{
void *cpuaddr;
unsigned long phys_addr;
@@ -138,7 +137,7 @@ static void *sn_dma_alloc_coherent(struct device *dev, size_t size,
* any associated IOMMU mappings.
*/
static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
- dma_addr_t dma_handle, struct dma_attrs *attrs)
+ dma_addr_t dma_handle)
{
struct pci_dev *pdev = to_pci_dev(dev);
struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev);
@@ -467,8 +466,8 @@ int sn_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
}
static struct dma_map_ops sn_dma_ops = {
- .alloc = sn_dma_alloc_coherent,
- .free = sn_dma_free_coherent,
+ .alloc_coherent = sn_dma_alloc_coherent,
+ .free_coherent = sn_dma_free_coherent,
.map_page = sn_dma_map_page,
.unmap_page = sn_dma_unmap_page,
.map_sg = sn_dma_map_sg,
diff --git a/trunk/arch/m68k/include/asm/atomic.h b/trunk/arch/m68k/include/asm/atomic.h
index f4e32de263a7..336e6173794f 100644
--- a/trunk/arch/m68k/include/asm/atomic.h
+++ b/trunk/arch/m68k/include/asm/atomic.h
@@ -3,7 +3,6 @@
#include
#include
-#include
/*
* Atomic operations that C can't guarantee us. Useful for
diff --git a/trunk/arch/m68k/mac/config.c b/trunk/arch/m68k/mac/config.c
index d9f62e0f46c0..96fa6ed7e799 100644
--- a/trunk/arch/m68k/mac/config.c
+++ b/trunk/arch/m68k/mac/config.c
@@ -980,9 +980,6 @@ int __init mac_platform_init(void)
{
u8 *swim_base;
- if (!MACH_IS_MAC)
- return -ENODEV;
-
/*
* Serial devices
*/
diff --git a/trunk/arch/m68k/q40/config.c b/trunk/arch/m68k/q40/config.c
index 8a1ce327c963..512adb64f7dd 100644
--- a/trunk/arch/m68k/q40/config.c
+++ b/trunk/arch/m68k/q40/config.c
@@ -334,9 +334,6 @@ static __init int q40_add_kbd_device(void)
{
struct platform_device *pdev;
- if (!MACH_IS_Q40)
- return -ENODEV;
-
pdev = platform_device_register_simple("q40kbd", -1, NULL, 0);
if (IS_ERR(pdev))
return PTR_ERR(pdev);
diff --git a/trunk/arch/microblaze/include/asm/cmpxchg.h b/trunk/arch/microblaze/include/asm/cmpxchg.h
index 538afc0ab9f3..0094859abd9b 100644
--- a/trunk/arch/microblaze/include/asm/cmpxchg.h
+++ b/trunk/arch/microblaze/include/asm/cmpxchg.h
@@ -1,8 +1,6 @@
#ifndef _ASM_MICROBLAZE_CMPXCHG_H
#define _ASM_MICROBLAZE_CMPXCHG_H
-#include
-
void __bad_xchg(volatile void *ptr, int size);
static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
diff --git a/trunk/arch/microblaze/include/asm/dma-mapping.h b/trunk/arch/microblaze/include/asm/dma-mapping.h
index 01d228286cb0..3a3e5b886854 100644
--- a/trunk/arch/microblaze/include/asm/dma-mapping.h
+++ b/trunk/arch/microblaze/include/asm/dma-mapping.h
@@ -123,34 +123,28 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
-#define dma_alloc_coherent(d, s, h, f) dma_alloc_attrs(d, s, h, f, NULL)
-
-static inline void *dma_alloc_attrs(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+static inline void *dma_alloc_coherent(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t flag)
{
struct dma_map_ops *ops = get_dma_ops(dev);
void *memory;
BUG_ON(!ops);
- memory = ops->alloc(dev, size, dma_handle, flag, attrs);
+ memory = ops->alloc_coherent(dev, size, dma_handle, flag);
debug_dma_alloc_coherent(dev, size, *dma_handle, memory);
return memory;
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d, s, c, h, NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *cpu_addr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *cpu_addr, dma_addr_t dma_handle)
{
struct dma_map_ops *ops = get_dma_ops(dev);
BUG_ON(!ops);
debug_dma_free_coherent(dev, size, cpu_addr, dma_handle);
- ops->free(dev, size, cpu_addr, dma_handle, attrs);
+ ops->free_coherent(dev, size, cpu_addr, dma_handle);
}
static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
diff --git a/trunk/arch/microblaze/include/asm/futex.h b/trunk/arch/microblaze/include/asm/futex.h
index ff8cde159d9a..b0526d2716fa 100644
--- a/trunk/arch/microblaze/include/asm/futex.h
+++ b/trunk/arch/microblaze/include/asm/futex.h
@@ -24,7 +24,7 @@
.word 1b,4b,2b,4b; \
.previous;" \
: "=&r" (oldval), "=&r" (ret) \
- : "r" (uaddr), "i" (-EFAULT), "r" (oparg) \
+ : "b" (uaddr), "i" (-EFAULT), "r" (oparg) \
); \
})
diff --git a/trunk/arch/microblaze/include/asm/processor.h b/trunk/arch/microblaze/include/asm/processor.h
index bffb54527299..510a8e1c16ba 100644
--- a/trunk/arch/microblaze/include/asm/processor.h
+++ b/trunk/arch/microblaze/include/asm/processor.h
@@ -31,8 +31,6 @@ extern const struct seq_operations cpuinfo_op;
/* Do necessary setup to start up a newly executed thread. */
void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp);
-extern void ret_from_fork(void);
-
# endif /* __ASSEMBLY__ */
# ifndef CONFIG_MMU
@@ -145,6 +143,8 @@ static inline void exit_thread(void)
unsigned long get_wchan(struct task_struct *p);
+extern void ret_from_fork(void);
+
/* The size allocated for kernel stacks. This _must_ be a power of two! */
# define KERNEL_STACK_SIZE 0x2000
diff --git a/trunk/arch/microblaze/kernel/dma.c b/trunk/arch/microblaze/kernel/dma.c
index a2bfa2ca5730..65a4af4cbbbe 100644
--- a/trunk/arch/microblaze/kernel/dma.c
+++ b/trunk/arch/microblaze/kernel/dma.c
@@ -33,8 +33,7 @@ static unsigned long get_dma_direct_offset(struct device *dev)
#define NOT_COHERENT_CACHE
static void *dma_direct_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flag)
{
#ifdef NOT_COHERENT_CACHE
return consistent_alloc(flag, size, dma_handle);
@@ -58,8 +57,7 @@ static void *dma_direct_alloc_coherent(struct device *dev, size_t size,
}
static void dma_direct_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+ void *vaddr, dma_addr_t dma_handle)
{
#ifdef NOT_COHERENT_CACHE
consistent_free(size, vaddr);
@@ -178,8 +176,8 @@ dma_direct_sync_sg_for_device(struct device *dev,
}
struct dma_map_ops dma_direct_ops = {
- .alloc = dma_direct_alloc_coherent,
- .free = dma_direct_free_coherent,
+ .alloc_coherent = dma_direct_alloc_coherent,
+ .free_coherent = dma_direct_free_coherent,
.map_sg = dma_direct_map_sg,
.unmap_sg = dma_direct_unmap_sg,
.dma_supported = dma_direct_dma_supported,
diff --git a/trunk/arch/microblaze/kernel/early_printk.c b/trunk/arch/microblaze/kernel/early_printk.c
index aba1f9a97d5d..ec485876d0d0 100644
--- a/trunk/arch/microblaze/kernel/early_printk.c
+++ b/trunk/arch/microblaze/kernel/early_printk.c
@@ -176,7 +176,6 @@ void __init remap_early_printk(void)
base_addr = (u32) ioremap(base_addr, PAGE_SIZE);
printk(KERN_CONT "0x%x\n", base_addr);
-#ifdef CONFIG_MMU
/*
* Early console is on the top of skipped TLB entries
* decrease tlb_skip size ensure that hardcoded TLB entry will be
@@ -190,7 +189,6 @@ void __init remap_early_printk(void)
* cmp rX, orig_base_addr
*/
tlb_skip -= 1;
-#endif
}
void __init disable_early_printk(void)
diff --git a/trunk/arch/microblaze/kernel/setup.c b/trunk/arch/microblaze/kernel/setup.c
index 16d8dfd9094b..71af974aa24a 100644
--- a/trunk/arch/microblaze/kernel/setup.c
+++ b/trunk/arch/microblaze/kernel/setup.c
@@ -206,7 +206,6 @@ static int microblaze_debugfs_init(void)
}
arch_initcall(microblaze_debugfs_init);
-# ifdef CONFIG_MMU
static int __init debugfs_tlb(void)
{
struct dentry *d;
@@ -219,7 +218,6 @@ static int __init debugfs_tlb(void)
return -ENOMEM;
}
device_initcall(debugfs_tlb);
-# endif
#endif
static int dflt_bus_notify(struct notifier_block *nb,
diff --git a/trunk/arch/microblaze/kernel/unwind.c b/trunk/arch/microblaze/kernel/unwind.c
index 6be4ae3c3351..9781a528cfc9 100644
--- a/trunk/arch/microblaze/kernel/unwind.c
+++ b/trunk/arch/microblaze/kernel/unwind.c
@@ -24,7 +24,6 @@
#include
#include
#include
-#include
struct stack_trace;
diff --git a/trunk/arch/microblaze/lib/uaccess_old.S b/trunk/arch/microblaze/lib/uaccess_old.S
index f085995ee848..f037266cdaf3 100644
--- a/trunk/arch/microblaze/lib/uaccess_old.S
+++ b/trunk/arch/microblaze/lib/uaccess_old.S
@@ -122,22 +122,22 @@ __strnlen_user:
15: swi r24, r5, 0x0018 + offset; \
16: swi r25, r5, 0x001C + offset; \
.section __ex_table,"a"; \
- .word 1b, 33f; \
- .word 2b, 33f; \
- .word 3b, 33f; \
- .word 4b, 33f; \
- .word 5b, 33f; \
- .word 6b, 33f; \
- .word 7b, 33f; \
- .word 8b, 33f; \
- .word 9b, 33f; \
- .word 10b, 33f; \
- .word 11b, 33f; \
- .word 12b, 33f; \
- .word 13b, 33f; \
- .word 14b, 33f; \
- .word 15b, 33f; \
- .word 16b, 33f; \
+ .word 1b, 0f; \
+ .word 2b, 0f; \
+ .word 3b, 0f; \
+ .word 4b, 0f; \
+ .word 5b, 0f; \
+ .word 6b, 0f; \
+ .word 7b, 0f; \
+ .word 8b, 0f; \
+ .word 9b, 0f; \
+ .word 10b, 0f; \
+ .word 11b, 0f; \
+ .word 12b, 0f; \
+ .word 13b, 0f; \
+ .word 14b, 0f; \
+ .word 15b, 0f; \
+ .word 16b, 0f; \
.text
#define COPY_80(offset) \
@@ -190,17 +190,14 @@ w2: sw r4, r5, r3
.align 4 /* Alignment is important to keep icache happy */
page: /* Create room on stack and save registers for storign values */
- addik r1, r1, -40
- swi r5, r1, 0
- swi r6, r1, 4
- swi r7, r1, 8
- swi r19, r1, 12
- swi r20, r1, 16
- swi r21, r1, 20
- swi r22, r1, 24
- swi r23, r1, 28
- swi r24, r1, 32
- swi r25, r1, 36
+ addik r1, r1, -32
+ swi r19, r1, 4
+ swi r20, r1, 8
+ swi r21, r1, 12
+ swi r22, r1, 16
+ swi r23, r1, 20
+ swi r24, r1, 24
+ swi r25, r1, 28
loop: /* r4, r19, r20, r21, r22, r23, r24, r25 are used for storing values */
/* Loop unrolling to get performance boost */
COPY_80(0x000);
@@ -208,44 +205,21 @@ loop: /* r4, r19, r20, r21, r22, r23, r24, r25 are used for storing values */
COPY_80(0x100);
COPY_80(0x180);
/* copy loop */
- addik r6, r6, 0x200
- addik r7, r7, -0x200
- bneid r7, loop
- addik r5, r5, 0x200
-
+ addik r6, r6, 0x200
+ addik r7, r7, -0x200
+ bneid r7, loop
+ addik r5, r5, 0x200
/* Restore register content */
- lwi r5, r1, 0
- lwi r6, r1, 4
- lwi r7, r1, 8
- lwi r19, r1, 12
- lwi r20, r1, 16
- lwi r21, r1, 20
- lwi r22, r1, 24
- lwi r23, r1, 28
- lwi r24, r1, 32
- lwi r25, r1, 36
- addik r1, r1, 40
+ lwi r19, r1, 4
+ lwi r20, r1, 8
+ lwi r21, r1, 12
+ lwi r22, r1, 16
+ lwi r23, r1, 20
+ lwi r24, r1, 24
+ lwi r25, r1, 28
+ addik r1, r1, 32
/* return back */
- addik r3, r0, 0
- rtsd r15, 8
- nop
-
-/* Fault case - return temp count */
-33:
addik r3, r7, 0
- /* Restore register content */
- lwi r5, r1, 0
- lwi r6, r1, 4
- lwi r7, r1, 8
- lwi r19, r1, 12
- lwi r20, r1, 16
- lwi r21, r1, 20
- lwi r22, r1, 24
- lwi r23, r1, 28
- lwi r24, r1, 32
- lwi r25, r1, 36
- addik r1, r1, 40
- /* return back */
rtsd r15, 8
nop
diff --git a/trunk/arch/mips/cavium-octeon/dma-octeon.c b/trunk/arch/mips/cavium-octeon/dma-octeon.c
index 41dd00884975..b6bb92c16a47 100644
--- a/trunk/arch/mips/cavium-octeon/dma-octeon.c
+++ b/trunk/arch/mips/cavium-octeon/dma-octeon.c
@@ -157,7 +157,7 @@ static void octeon_dma_sync_sg_for_device(struct device *dev,
}
static void *octeon_dma_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t gfp)
{
void *ret;
@@ -192,7 +192,7 @@ static void *octeon_dma_alloc_coherent(struct device *dev, size_t size,
}
static void octeon_dma_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle, struct dma_attrs *attrs)
+ void *vaddr, dma_addr_t dma_handle)
{
int order = get_order(size);
@@ -240,8 +240,8 @@ EXPORT_SYMBOL(dma_to_phys);
static struct octeon_dma_map_ops octeon_linear_dma_map_ops = {
.dma_map_ops = {
- .alloc = octeon_dma_alloc_coherent,
- .free = octeon_dma_free_coherent,
+ .alloc_coherent = octeon_dma_alloc_coherent,
+ .free_coherent = octeon_dma_free_coherent,
.map_page = octeon_dma_map_page,
.unmap_page = swiotlb_unmap_page,
.map_sg = octeon_dma_map_sg,
@@ -325,8 +325,8 @@ void __init plat_swiotlb_setup(void)
#ifdef CONFIG_PCI
static struct octeon_dma_map_ops _octeon_pci_dma_map_ops = {
.dma_map_ops = {
- .alloc = octeon_dma_alloc_coherent,
- .free = octeon_dma_free_coherent,
+ .alloc_coherent = octeon_dma_alloc_coherent,
+ .free_coherent = octeon_dma_free_coherent,
.map_page = octeon_dma_map_page,
.unmap_page = swiotlb_unmap_page,
.map_sg = octeon_dma_map_sg,
diff --git a/trunk/arch/mips/cavium-octeon/smp.c b/trunk/arch/mips/cavium-octeon/smp.c
index 97e7ce9b50ed..c3e2b85c3b02 100644
--- a/trunk/arch/mips/cavium-octeon/smp.c
+++ b/trunk/arch/mips/cavium-octeon/smp.c
@@ -78,7 +78,7 @@ static inline void octeon_send_ipi_mask(const struct cpumask *mask,
}
/**
- * Detect available CPUs, populate cpu_possible_mask
+ * Detect available CPUs, populate cpu_possible_map
*/
static void octeon_smp_hotplug_setup(void)
{
@@ -268,7 +268,7 @@ static int octeon_cpu_disable(void)
spin_lock(&smp_reserve_lock);
- set_cpu_online(cpu, false);
+ cpu_clear(cpu, cpu_online_map);
cpu_clear(cpu, cpu_callin_map);
local_irq_disable();
fixup_irqs();
diff --git a/trunk/arch/mips/include/asm/dma-mapping.h b/trunk/arch/mips/include/asm/dma-mapping.h
index be39a12901c6..7aa37ddfca4b 100644
--- a/trunk/arch/mips/include/asm/dma-mapping.h
+++ b/trunk/arch/mips/include/asm/dma-mapping.h
@@ -57,31 +57,25 @@ dma_set_mask(struct device *dev, u64 mask)
extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
enum dma_data_direction direction);
-#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
-
-static inline void *dma_alloc_attrs(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t gfp,
- struct dma_attrs *attrs)
+static inline void *dma_alloc_coherent(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t gfp)
{
void *ret;
struct dma_map_ops *ops = get_dma_ops(dev);
- ret = ops->alloc(dev, size, dma_handle, gfp, attrs);
+ ret = ops->alloc_coherent(dev, size, dma_handle, gfp);
debug_dma_alloc_coherent(dev, size, *dma_handle, ret);
return ret;
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *vaddr, dma_addr_t dma_handle)
{
struct dma_map_ops *ops = get_dma_ops(dev);
- ops->free(dev, size, vaddr, dma_handle, attrs);
+ ops->free_coherent(dev, size, vaddr, dma_handle);
debug_dma_free_coherent(dev, size, vaddr, dma_handle);
}
diff --git a/trunk/arch/mips/kernel/mips-mt-fpaff.c b/trunk/arch/mips/kernel/mips-mt-fpaff.c
index 33f63bab478a..802e6160f37e 100644
--- a/trunk/arch/mips/kernel/mips-mt-fpaff.c
+++ b/trunk/arch/mips/kernel/mips-mt-fpaff.c
@@ -173,7 +173,7 @@ asmlinkage long mipsmt_sys_sched_getaffinity(pid_t pid, unsigned int len,
if (retval)
goto out_unlock;
- cpumask_and(&mask, &p->thread.user_cpus_allowed, cpu_possible_mask);
+ cpus_and(mask, p->thread.user_cpus_allowed, cpu_possible_map);
out_unlock:
read_unlock(&tasklist_lock);
diff --git a/trunk/arch/mips/kernel/proc.c b/trunk/arch/mips/kernel/proc.c
index f8b2c592514d..e309665b6c81 100644
--- a/trunk/arch/mips/kernel/proc.c
+++ b/trunk/arch/mips/kernel/proc.c
@@ -25,7 +25,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
int i;
#ifdef CONFIG_SMP
- if (!cpu_online(n))
+ if (!cpu_isset(n, cpu_online_map))
return 0;
#endif
diff --git a/trunk/arch/mips/kernel/smp-bmips.c b/trunk/arch/mips/kernel/smp-bmips.c
index 3046e2986006..ca673569fd24 100644
--- a/trunk/arch/mips/kernel/smp-bmips.c
+++ b/trunk/arch/mips/kernel/smp-bmips.c
@@ -317,7 +317,7 @@ static int bmips_cpu_disable(void)
pr_info("SMP: CPU%d is offline\n", cpu);
- set_cpu_online(cpu, false);
+ cpu_clear(cpu, cpu_online_map);
cpu_clear(cpu, cpu_callin_map);
local_flush_tlb_all();
diff --git a/trunk/arch/mips/kernel/smp.c b/trunk/arch/mips/kernel/smp.c
index ba9376bf52a1..9c1cce9de35f 100644
--- a/trunk/arch/mips/kernel/smp.c
+++ b/trunk/arch/mips/kernel/smp.c
@@ -148,7 +148,7 @@ static void stop_this_cpu(void *dummy)
/*
* Remove this CPU:
*/
- set_cpu_online(smp_processor_id(), false);
+ cpu_clear(smp_processor_id(), cpu_online_map);
for (;;) {
if (cpu_wait)
(*cpu_wait)(); /* Wait if available. */
@@ -174,7 +174,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
mp_ops->prepare_cpus(max_cpus);
set_cpu_sibling_map(0);
#ifndef CONFIG_HOTPLUG_CPU
- init_cpu_present(cpu_possible_mask);
+ init_cpu_present(&cpu_possible_map);
#endif
}
@@ -248,7 +248,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
while (!cpu_isset(cpu, cpu_callin_map))
udelay(100);
- set_cpu_online(cpu, true);
+ cpu_set(cpu, cpu_online_map);
return 0;
}
@@ -320,12 +320,13 @@ void flush_tlb_mm(struct mm_struct *mm)
if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) {
smp_on_other_tlbs(flush_tlb_mm_ipi, mm);
} else {
+ cpumask_t mask = cpu_online_map;
unsigned int cpu;
- for_each_online_cpu(cpu) {
- if (cpu != smp_processor_id() && cpu_context(cpu, mm))
+ cpu_clear(smp_processor_id(), mask);
+ for_each_cpu_mask(cpu, mask)
+ if (cpu_context(cpu, mm))
cpu_context(cpu, mm) = 0;
- }
}
local_flush_tlb_mm(mm);
@@ -359,12 +360,13 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned l
smp_on_other_tlbs(flush_tlb_range_ipi, &fd);
} else {
+ cpumask_t mask = cpu_online_map;
unsigned int cpu;
- for_each_online_cpu(cpu) {
- if (cpu != smp_processor_id() && cpu_context(cpu, mm))
+ cpu_clear(smp_processor_id(), mask);
+ for_each_cpu_mask(cpu, mask)
+ if (cpu_context(cpu, mm))
cpu_context(cpu, mm) = 0;
- }
}
local_flush_tlb_range(vma, start, end);
preempt_enable();
@@ -405,12 +407,13 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
smp_on_other_tlbs(flush_tlb_page_ipi, &fd);
} else {
+ cpumask_t mask = cpu_online_map;
unsigned int cpu;
- for_each_online_cpu(cpu) {
- if (cpu != smp_processor_id() && cpu_context(cpu, vma->vm_mm))
+ cpu_clear(smp_processor_id(), mask);
+ for_each_cpu_mask(cpu, mask)
+ if (cpu_context(cpu, vma->vm_mm))
cpu_context(cpu, vma->vm_mm) = 0;
- }
}
local_flush_tlb_page(vma, page);
preempt_enable();
diff --git a/trunk/arch/mips/kernel/smtc.c b/trunk/arch/mips/kernel/smtc.c
index f5dd38f1d015..c4f75bbc0bd6 100644
--- a/trunk/arch/mips/kernel/smtc.c
+++ b/trunk/arch/mips/kernel/smtc.c
@@ -291,7 +291,7 @@ static void smtc_configure_tlb(void)
* possibly leave some TCs/VPEs as "slave" processors.
*
* Use c0_MVPConf0 to find out how many TCs are available, setting up
- * cpu_possible_mask and the logical/physical mappings.
+ * cpu_possible_map and the logical/physical mappings.
*/
int __init smtc_build_cpu_map(int start_cpu_slot)
diff --git a/trunk/arch/mips/mm/c-octeon.c b/trunk/arch/mips/mm/c-octeon.c
index 47037ec5589b..1f9ca07f53c8 100644
--- a/trunk/arch/mips/mm/c-octeon.c
+++ b/trunk/arch/mips/mm/c-octeon.c
@@ -80,9 +80,9 @@ static void octeon_flush_icache_all_cores(struct vm_area_struct *vma)
if (vma)
mask = *mm_cpumask(vma->vm_mm);
else
- mask = *cpu_online_mask;
- cpumask_clear_cpu(cpu, &mask);
- for_each_cpu(cpu, &mask)
+ mask = cpu_online_map;
+ cpu_clear(cpu, mask);
+ for_each_cpu_mask(cpu, mask)
octeon_send_ipi_single(cpu, SMP_ICACHE_FLUSH);
preempt_enable();
diff --git a/trunk/arch/mips/mm/dma-default.c b/trunk/arch/mips/mm/dma-default.c
index 3fab2046c8a4..46084912e588 100644
--- a/trunk/arch/mips/mm/dma-default.c
+++ b/trunk/arch/mips/mm/dma-default.c
@@ -98,7 +98,7 @@ void *dma_alloc_noncoherent(struct device *dev, size_t size,
EXPORT_SYMBOL(dma_alloc_noncoherent);
static void *mips_dma_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t * dma_handle, gfp_t gfp, struct dma_attrs *attrs)
+ dma_addr_t * dma_handle, gfp_t gfp)
{
void *ret;
@@ -132,7 +132,7 @@ void dma_free_noncoherent(struct device *dev, size_t size, void *vaddr,
EXPORT_SYMBOL(dma_free_noncoherent);
static void mips_dma_free_coherent(struct device *dev, size_t size, void *vaddr,
- dma_addr_t dma_handle, struct dma_attrs *attrs)
+ dma_addr_t dma_handle)
{
unsigned long addr = (unsigned long) vaddr;
int order = get_order(size);
@@ -323,8 +323,8 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
EXPORT_SYMBOL(dma_cache_sync);
static struct dma_map_ops mips_default_dma_map_ops = {
- .alloc = mips_dma_alloc_coherent,
- .free = mips_dma_free_coherent,
+ .alloc_coherent = mips_dma_alloc_coherent,
+ .free_coherent = mips_dma_free_coherent,
.map_page = mips_dma_map_page,
.unmap_page = mips_dma_unmap_page,
.map_sg = mips_dma_map_sg,
diff --git a/trunk/arch/mips/netlogic/common/smp.c b/trunk/arch/mips/netlogic/common/smp.c
index fab316de57e9..db17f49886c2 100644
--- a/trunk/arch/mips/netlogic/common/smp.c
+++ b/trunk/arch/mips/netlogic/common/smp.c
@@ -165,7 +165,7 @@ void __init nlm_smp_setup(void)
cpu_set(boot_cpu, phys_cpu_present_map);
__cpu_number_map[boot_cpu] = 0;
__cpu_logical_map[0] = boot_cpu;
- set_cpu_possible(0, true);
+ cpu_set(0, cpu_possible_map);
num_cpus = 1;
for (i = 0; i < NR_CPUS; i++) {
@@ -177,14 +177,14 @@ void __init nlm_smp_setup(void)
cpu_set(i, phys_cpu_present_map);
__cpu_number_map[i] = num_cpus;
__cpu_logical_map[num_cpus] = i;
- set_cpu_possible(num_cpus, true);
+ cpu_set(num_cpus, cpu_possible_map);
++num_cpus;
}
}
pr_info("Phys CPU present map: %lx, possible map %lx\n",
(unsigned long)phys_cpu_present_map.bits[0],
- (unsigned long)cpumask_bits(cpu_possible_mask)[0]);
+ (unsigned long)cpu_possible_map.bits[0]);
pr_info("Detected %i Slave CPU(s)\n", num_cpus);
nlm_set_nmi_handler(nlm_boot_secondary_cpus);
diff --git a/trunk/arch/mips/pmc-sierra/yosemite/smp.c b/trunk/arch/mips/pmc-sierra/yosemite/smp.c
index b71fae231049..2608752898c0 100644
--- a/trunk/arch/mips/pmc-sierra/yosemite/smp.c
+++ b/trunk/arch/mips/pmc-sierra/yosemite/smp.c
@@ -146,7 +146,7 @@ static void __cpuinit yos_boot_secondary(int cpu, struct task_struct *idle)
}
/*
- * Detect available CPUs, populate cpu_possible_mask before smp_init
+ * Detect available CPUs, populate cpu_possible_map before smp_init
*
* We don't want to start the secondary CPU yet nor do we have a nice probing
* feature in PMON so we just assume presence of the secondary core.
@@ -155,10 +155,10 @@ static void __init yos_smp_setup(void)
{
int i;
- init_cpu_possible(cpu_none_mask);
+ cpus_clear(cpu_possible_map);
for (i = 0; i < 2; i++) {
- set_cpu_possible(i, true);
+ cpu_set(i, cpu_possible_map);
__cpu_number_map[i] = i;
__cpu_logical_map[i] = i;
}
@@ -169,7 +169,7 @@ static void __init yos_prepare_cpus(unsigned int max_cpus)
/*
* Be paranoid. Enable the IPI only if we're really about to go SMP.
*/
- if (num_possible_cpus())
+ if (cpus_weight(cpu_possible_map))
set_c0_status(STATUSF_IP5);
}
diff --git a/trunk/arch/mips/sgi-ip27/ip27-smp.c b/trunk/arch/mips/sgi-ip27/ip27-smp.c
index 735b43bf8f82..c6851df9ab74 100644
--- a/trunk/arch/mips/sgi-ip27/ip27-smp.c
+++ b/trunk/arch/mips/sgi-ip27/ip27-smp.c
@@ -76,7 +76,7 @@ static int do_cpumask(cnodeid_t cnode, nasid_t nasid, int highest)
/* Only let it join in if it's marked enabled */
if ((acpu->cpu_info.flags & KLINFO_ENABLE) &&
(tot_cpus_found != NR_CPUS)) {
- set_cpu_possible(cpuid, true);
+ cpu_set(cpuid, cpu_possible_map);
alloc_cpupda(cpuid, tot_cpus_found);
cpus_found++;
tot_cpus_found++;
diff --git a/trunk/arch/mips/sibyte/bcm1480/smp.c b/trunk/arch/mips/sibyte/bcm1480/smp.c
index de88e22694a0..d667875be564 100644
--- a/trunk/arch/mips/sibyte/bcm1480/smp.c
+++ b/trunk/arch/mips/sibyte/bcm1480/smp.c
@@ -138,7 +138,7 @@ static void __cpuinit bcm1480_boot_secondary(int cpu, struct task_struct *idle)
/*
* Use CFE to find out how many CPUs are available, setting up
- * cpu_possible_mask and the logical/physical mappings.
+ * cpu_possible_map and the logical/physical mappings.
* XXXKW will the boot CPU ever not be physical 0?
*
* Common setup before any secondaries are started
@@ -147,13 +147,14 @@ static void __init bcm1480_smp_setup(void)
{
int i, num;
- init_cpu_possible(cpumask_of(0));
+ cpus_clear(cpu_possible_map);
+ cpu_set(0, cpu_possible_map);
__cpu_number_map[0] = 0;
__cpu_logical_map[0] = 0;
for (i = 1, num = 0; i < NR_CPUS; i++) {
if (cfe_cpu_stop(i) == 0) {
- set_cpu_possible(i, true);
+ cpu_set(i, cpu_possible_map);
__cpu_number_map[i] = ++num;
__cpu_logical_map[num] = i;
}
diff --git a/trunk/arch/mips/sibyte/sb1250/smp.c b/trunk/arch/mips/sibyte/sb1250/smp.c
index 285cfef4ebc0..38e7f6bd7922 100644
--- a/trunk/arch/mips/sibyte/sb1250/smp.c
+++ b/trunk/arch/mips/sibyte/sb1250/smp.c
@@ -126,7 +126,7 @@ static void __cpuinit sb1250_boot_secondary(int cpu, struct task_struct *idle)
/*
* Use CFE to find out how many CPUs are available, setting up
- * cpu_possible_mask and the logical/physical mappings.
+ * cpu_possible_map and the logical/physical mappings.
* XXXKW will the boot CPU ever not be physical 0?
*
* Common setup before any secondaries are started
@@ -135,13 +135,14 @@ static void __init sb1250_smp_setup(void)
{
int i, num;
- init_cpu_possible(cpumask_of(0));
+ cpus_clear(cpu_possible_map);
+ cpu_set(0, cpu_possible_map);
__cpu_number_map[0] = 0;
__cpu_logical_map[0] = 0;
for (i = 1, num = 0; i < NR_CPUS; i++) {
if (cfe_cpu_stop(i) == 0) {
- set_cpu_possible(i, true);
+ cpu_set(i, cpu_possible_map);
__cpu_number_map[i] = ++num;
__cpu_logical_map[num] = i;
}
diff --git a/trunk/arch/parisc/include/asm/atomic.h b/trunk/arch/parisc/include/asm/atomic.h
index 6c6defc24619..3ae56073cc3d 100644
--- a/trunk/arch/parisc/include/asm/atomic.h
+++ b/trunk/arch/parisc/include/asm/atomic.h
@@ -6,7 +6,6 @@
#define _ASM_PARISC_ATOMIC_H_
#include
-#include
/*
* Atomic operations that C can't guarantee us. Useful for
@@ -49,6 +48,112 @@ extern arch_spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned;
# define _atomic_spin_unlock_irqrestore(l,f) do { local_irq_restore(f); } while (0)
#endif
+/* This should get optimized out since it's never called.
+** Or get a link error if xchg is used "wrong".
+*/
+extern void __xchg_called_with_bad_pointer(void);
+
+
+/* __xchg32/64 defined in arch/parisc/lib/bitops.c */
+extern unsigned long __xchg8(char, char *);
+extern unsigned long __xchg32(int, int *);
+#ifdef CONFIG_64BIT
+extern unsigned long __xchg64(unsigned long, unsigned long *);
+#endif
+
+/* optimizer better get rid of switch since size is a constant */
+static __inline__ unsigned long
+__xchg(unsigned long x, __volatile__ void * ptr, int size)
+{
+ switch(size) {
+#ifdef CONFIG_64BIT
+ case 8: return __xchg64(x,(unsigned long *) ptr);
+#endif
+ case 4: return __xchg32((int) x, (int *) ptr);
+ case 1: return __xchg8((char) x, (char *) ptr);
+ }
+ __xchg_called_with_bad_pointer();
+ return x;
+}
+
+
+/*
+** REVISIT - Abandoned use of LDCW in xchg() for now:
+** o need to test sizeof(*ptr) to avoid clearing adjacent bytes
+** o and while we are at it, could CONFIG_64BIT code use LDCD too?
+**
+** if (__builtin_constant_p(x) && (x == NULL))
+** if (((unsigned long)p & 0xf) == 0)
+** return __ldcw(p);
+*/
+#define xchg(ptr,x) \
+ ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
+
+
+#define __HAVE_ARCH_CMPXCHG 1
+
+/* bug catcher for when unsupported size is used - won't link */
+extern void __cmpxchg_called_with_bad_pointer(void);
+
+/* __cmpxchg_u32/u64 defined in arch/parisc/lib/bitops.c */
+extern unsigned long __cmpxchg_u32(volatile unsigned int *m, unsigned int old, unsigned int new_);
+extern unsigned long __cmpxchg_u64(volatile unsigned long *ptr, unsigned long old, unsigned long new_);
+
+/* don't worry...optimizer will get rid of most of this */
+static __inline__ unsigned long
+__cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
+{
+ switch(size) {
+#ifdef CONFIG_64BIT
+ case 8: return __cmpxchg_u64((unsigned long *)ptr, old, new_);
+#endif
+ case 4: return __cmpxchg_u32((unsigned int *)ptr, (unsigned int) old, (unsigned int) new_);
+ }
+ __cmpxchg_called_with_bad_pointer();
+ return old;
+}
+
+#define cmpxchg(ptr,o,n) \
+ ({ \
+ __typeof__(*(ptr)) _o_ = (o); \
+ __typeof__(*(ptr)) _n_ = (n); \
+ (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \
+ (unsigned long)_n_, sizeof(*(ptr))); \
+ })
+
+#include
+
+static inline unsigned long __cmpxchg_local(volatile void *ptr,
+ unsigned long old,
+ unsigned long new_, int size)
+{
+ switch (size) {
+#ifdef CONFIG_64BIT
+ case 8: return __cmpxchg_u64((unsigned long *)ptr, old, new_);
+#endif
+ case 4: return __cmpxchg_u32(ptr, old, new_);
+ default:
+ return __cmpxchg_local_generic(ptr, old, new_, size);
+ }
+}
+
+/*
+ * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make
+ * them available.
+ */
+#define cmpxchg_local(ptr, o, n) \
+ ((__typeof__(*(ptr)))__cmpxchg_local((ptr), (unsigned long)(o), \
+ (unsigned long)(n), sizeof(*(ptr))))
+#ifdef CONFIG_64BIT
+#define cmpxchg64_local(ptr, o, n) \
+ ({ \
+ BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
+ cmpxchg_local((ptr), (o), (n)); \
+ })
+#else
+#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
+#endif
+
/*
* Note that we need not lock read accesses - aligned word writes/reads
* are atomic, so a reader never sees inconsistent values.
diff --git a/trunk/arch/parisc/include/asm/cmpxchg.h b/trunk/arch/parisc/include/asm/cmpxchg.h
deleted file mode 100644
index dbd13354ec41..000000000000
--- a/trunk/arch/parisc/include/asm/cmpxchg.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * forked from parisc asm/atomic.h which was:
- * Copyright (C) 2000 Philipp Rumpf
- * Copyright (C) 2006 Kyle McMartin
- */
-
-#ifndef _ASM_PARISC_CMPXCHG_H_
-#define _ASM_PARISC_CMPXCHG_H_
-
-/* This should get optimized out since it's never called.
-** Or get a link error if xchg is used "wrong".
-*/
-extern void __xchg_called_with_bad_pointer(void);
-
-/* __xchg32/64 defined in arch/parisc/lib/bitops.c */
-extern unsigned long __xchg8(char, char *);
-extern unsigned long __xchg32(int, int *);
-#ifdef CONFIG_64BIT
-extern unsigned long __xchg64(unsigned long, unsigned long *);
-#endif
-
-/* optimizer better get rid of switch since size is a constant */
-static inline unsigned long
-__xchg(unsigned long x, __volatile__ void *ptr, int size)
-{
- switch (size) {
-#ifdef CONFIG_64BIT
- case 8: return __xchg64(x, (unsigned long *) ptr);
-#endif
- case 4: return __xchg32((int) x, (int *) ptr);
- case 1: return __xchg8((char) x, (char *) ptr);
- }
- __xchg_called_with_bad_pointer();
- return x;
-}
-
-/*
-** REVISIT - Abandoned use of LDCW in xchg() for now:
-** o need to test sizeof(*ptr) to avoid clearing adjacent bytes
-** o and while we are at it, could CONFIG_64BIT code use LDCD too?
-**
-** if (__builtin_constant_p(x) && (x == NULL))
-** if (((unsigned long)p & 0xf) == 0)
-** return __ldcw(p);
-*/
-#define xchg(ptr, x) \
- ((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr))))
-
-#define __HAVE_ARCH_CMPXCHG 1
-
-/* bug catcher for when unsupported size is used - won't link */
-extern void __cmpxchg_called_with_bad_pointer(void);
-
-/* __cmpxchg_u32/u64 defined in arch/parisc/lib/bitops.c */
-extern unsigned long __cmpxchg_u32(volatile unsigned int *m, unsigned int old,
- unsigned int new_);
-extern unsigned long __cmpxchg_u64(volatile unsigned long *ptr,
- unsigned long old, unsigned long new_);
-
-/* don't worry...optimizer will get rid of most of this */
-static inline unsigned long
-__cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
-{
- switch (size) {
-#ifdef CONFIG_64BIT
- case 8: return __cmpxchg_u64((unsigned long *)ptr, old, new_);
-#endif
- case 4: return __cmpxchg_u32((unsigned int *)ptr,
- (unsigned int)old, (unsigned int)new_);
- }
- __cmpxchg_called_with_bad_pointer();
- return old;
-}
-
-#define cmpxchg(ptr, o, n) \
-({ \
- __typeof__(*(ptr)) _o_ = (o); \
- __typeof__(*(ptr)) _n_ = (n); \
- (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \
- (unsigned long)_n_, sizeof(*(ptr))); \
-})
-
-#include
-
-static inline unsigned long __cmpxchg_local(volatile void *ptr,
- unsigned long old,
- unsigned long new_, int size)
-{
- switch (size) {
-#ifdef CONFIG_64BIT
- case 8: return __cmpxchg_u64((unsigned long *)ptr, old, new_);
-#endif
- case 4: return __cmpxchg_u32(ptr, old, new_);
- default:
- return __cmpxchg_local_generic(ptr, old, new_, size);
- }
-}
-
-/*
- * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make
- * them available.
- */
-#define cmpxchg_local(ptr, o, n) \
- ((__typeof__(*(ptr)))__cmpxchg_local((ptr), (unsigned long)(o), \
- (unsigned long)(n), sizeof(*(ptr))))
-#ifdef CONFIG_64BIT
-#define cmpxchg64_local(ptr, o, n) \
-({ \
- BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
- cmpxchg_local((ptr), (o), (n)); \
-})
-#else
-#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
-#endif
-
-#endif /* _ASM_PARISC_CMPXCHG_H_ */
diff --git a/trunk/arch/powerpc/boot/dts/p1020mbg-pc.dtsi b/trunk/arch/powerpc/boot/dts/p1020mbg-pc.dtsi
deleted file mode 100644
index a24699cfea9c..000000000000
--- a/trunk/arch/powerpc/boot/dts/p1020mbg-pc.dtsi
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * P1020 MBG-PC Device Tree Source stub (no addresses or top-level ranges)
- *
- * Copyright 2012 Freescale Semiconductor Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Freescale Semiconductor nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- *
- * ALTERNATIVELY, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") as published by the Free Software
- * Foundation, either version 2 of that License or (at your option) any
- * later version.
- *
- * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-&lbc {
- nor@0,0 {
- #address-cells = <1>;
- #size-cells = <1>;
- compatible = "cfi-flash";
- reg = <0x0 0x0 0x4000000>;
- bank-width = <2>;
- device-width = <1>;
-
- partition@0 {
- /* 128KB for DTB Image */
- reg = <0x0 0x00020000>;
- label = "NOR DTB Image";
- };
-
- partition@20000 {
- /* 3.875 MB for Linux Kernel Image */
- reg = <0x00020000 0x003e0000>;
- label = "NOR Linux Kernel Image";
- };
-
- partition@400000 {
- /* 58MB for Root file System */
- reg = <0x00400000 0x03a00000>;
- label = "NOR Root File System";
- };
-
- partition@3e00000 {
- /* This location must not be altered */
- /* 1M for Vitesse 7385 Switch firmware */
- reg = <0x3e00000 0x00100000>;
- label = "NOR Vitesse-7385 Firmware";
- read-only;
- };
-
- partition@3f00000 {
- /* This location must not be altered */
- /* 512KB for u-boot Bootloader Image */
- /* 512KB for u-boot Environment Variables */
- reg = <0x03f00000 0x00100000>;
- label = "NOR U-Boot Image";
- read-only;
- };
- };
-
- L2switch@2,0 {
- #address-cells = <1>;
- #size-cells = <1>;
- compatible = "vitesse-7385";
- reg = <0x2 0x0 0x20000>;
- };
-};
-
-&soc {
- i2c@3000 {
- rtc@68 {
- compatible = "dallas,ds1339";
- reg = <0x68>;
- };
- };
-
- mdio@24000 {
- phy0: ethernet-phy@0 {
- interrupts = <3 1 0 0>;
- reg = <0x0>;
- };
- phy1: ethernet-phy@1 {
- interrupts = <2 1 0 0>;
- reg = <0x1>;
- };
- };
-
- mdio@25000 {
- tbi1: tbi-phy@11 {
- reg = <0x11>;
- device_type = "tbi-phy";
- };
- };
-
- mdio@26000 {
- tbi2: tbi-phy@11 {
- reg = <0x11>;
- device_type = "tbi-phy";
- };
- };
-
- enet0: ethernet@b0000 {
- fixed-link = <1 1 1000 0 0>;
- phy-connection-type = "rgmii-id";
- };
-
- enet1: ethernet@b1000 {
- phy-handle = <&phy0>;
- tbi-handle = <&tbi1>;
- phy-connection-type = "sgmii";
- };
-
- enet2: ethernet@b2000 {
- phy-handle = <&phy1>;
- phy-connection-type = "rgmii-id";
- };
-
- usb@22000 {
- phy_type = "ulpi";
- };
-
- /* USB2 is shared with localbus, so it must be disabled
- by default. We can't put 'status = "disabled";' here
- since U-Boot doesn't clear the status property when
- it enables USB2. OTOH, U-Boot does create a new node
- when there isn't any. So, just comment it out.
- */
- usb@23000 {
- status = "disabled";
- phy_type = "ulpi";
- };
-};
diff --git a/trunk/arch/powerpc/boot/dts/p1020mbg-pc_32b.dts b/trunk/arch/powerpc/boot/dts/p1020mbg-pc_32b.dts
deleted file mode 100644
index ab8f076eae90..000000000000
--- a/trunk/arch/powerpc/boot/dts/p1020mbg-pc_32b.dts
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * P1020 MBG-PC Device Tree Source (32-bit address map)
- *
- * Copyright 2012 Freescale Semiconductor Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Freescale Semiconductor nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- *
- * ALTERNATIVELY, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") as published by the Free Software
- * Foundation, either version 2 of that License or (at your option) any
- * later version.
- *
- * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/include/ "fsl/p1020si-pre.dtsi"
-/ {
- model = "fsl,P1020MBG-PC";
- compatible = "fsl,P1020MBG-PC";
-
- memory {
- device_type = "memory";
- };
-
- lbc: localbus@ffe05000 {
- reg = <0x0 0xffe05000 0x0 0x1000>;
-
- /* NOR and L2 switch */
- ranges = <0x0 0x0 0x0 0xec000000 0x04000000
- 0x1 0x0 0x0 0xffa00000 0x00040000
- 0x2 0x0 0x0 0xffb00000 0x00020000>;
- };
-
- soc: soc@ffe00000 {
- ranges = <0x0 0x0 0xffe00000 0x100000>;
- };
-
- pci0: pcie@ffe09000 {
- reg = <0x0 0xffe09000 0x0 0x1000>;
- ranges = <0x2000000 0x0 0xe0000000 0x0 0xa0000000 0x0 0x20000000
- 0x1000000 0x0 0x00000000 0x0 0xffc10000 0x0 0x10000>;
- pcie@0 {
- ranges = <0x2000000 0x0 0xe0000000
- 0x2000000 0x0 0xe0000000
- 0x0 0x20000000
-
- 0x1000000 0x0 0x0
- 0x1000000 0x0 0x0
- 0x0 0x100000>;
- };
- };
-
- pci1: pcie@ffe0a000 {
- reg = <0x0 0xffe0a000 0x0 0x1000>;
- ranges = <0x2000000 0x0 0xe0000000 0x0 0x80000000 0x0 0x20000000
- 0x1000000 0x0 0x00000000 0x0 0xffc00000 0x0 0x10000>;
- pcie@0 {
- ranges = <0x2000000 0x0 0xe0000000
- 0x2000000 0x0 0xe0000000
- 0x0 0x20000000
-
- 0x1000000 0x0 0x0
- 0x1000000 0x0 0x0
- 0x0 0x100000>;
- };
- };
-};
-
-/include/ "p1020mbg-pc.dtsi"
-/include/ "fsl/p1020si-post.dtsi"
diff --git a/trunk/arch/powerpc/boot/dts/p1020mbg-pc_36b.dts b/trunk/arch/powerpc/boot/dts/p1020mbg-pc_36b.dts
deleted file mode 100644
index 9e9f401419b1..000000000000
--- a/trunk/arch/powerpc/boot/dts/p1020mbg-pc_36b.dts
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * P1020 MBG-PC Device Tree Source (36-bit address map)
- *
- * Copyright 2012 Freescale Semiconductor Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Freescale Semiconductor nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- *
- * ALTERNATIVELY, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") as published by the Free Software
- * Foundation, either version 2 of that License or (at your option) any
- * later version.
- *
- * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/include/ "fsl/p1020si-pre.dtsi"
-/ {
- model = "fsl,P1020MBG-PC";
- compatible = "fsl,P1020MBG-PC";
-
- memory {
- device_type = "memory";
- };
-
- lbc: localbus@fffe05000 {
- reg = <0xf 0xffe05000 0x0 0x1000>;
-
- /* NOR and L2 switch */
- ranges = <0x0 0x0 0xf 0xec000000 0x04000000
- 0x1 0x0 0xf 0xffa00000 0x00040000
- 0x2 0x0 0xf 0xffb00000 0x00020000>;
- };
-
- soc: soc@fffe00000 {
- ranges = <0x0 0xf 0xffe00000 0x100000>;
- };
-
- pci0: pcie@fffe09000 {
- reg = <0xf 0xffe09000 0x0 0x1000>;
- ranges = <0x2000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000
- 0x1000000 0x0 0x00000000 0xf 0xffc10000 0x0 0x10000>;
- pcie@0 {
- ranges = <0x2000000 0x0 0xe0000000
- 0x2000000 0x0 0xe0000000
- 0x0 0x20000000
-
- 0x1000000 0x0 0x0
- 0x1000000 0x0 0x0
- 0x0 0x100000>;
- };
- };
-
- pci1: pcie@fffe0a000 {
- reg = <0xf 0xffe0a000 0 0x1000>;
- ranges = <0x2000000 0x0 0xe0000000 0xc 0x00000000 0x0 0x20000000
- 0x1000000 0x0 0x00000000 0xf 0xffc00000 0x0 0x10000>;
- pcie@0 {
- ranges = <0x2000000 0x0 0xe0000000
- 0x2000000 0x0 0xe0000000
- 0x0 0x20000000
-
- 0x1000000 0x0 0x0
- 0x1000000 0x0 0x0
- 0x0 0x100000>;
- };
- };
-};
-
-/include/ "p1020mbg-pc.dtsi"
-/include/ "fsl/p1020si-post.dtsi"
diff --git a/trunk/arch/powerpc/boot/dts/p1020utm-pc.dtsi b/trunk/arch/powerpc/boot/dts/p1020utm-pc.dtsi
deleted file mode 100644
index 7ea85eabcc5c..000000000000
--- a/trunk/arch/powerpc/boot/dts/p1020utm-pc.dtsi
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * P1020 UTM-PC Device Tree Source stub (no addresses or top-level ranges)
- *
- * Copyright 2012 Freescale Semiconductor Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Freescale Semiconductor nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- *
- * ALTERNATIVELY, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") as published by the Free Software
- * Foundation, either version 2 of that License or (at your option) any
- * later version.
- *
- * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-&lbc {
- nor@0,0 {
- #address-cells = <1>;
- #size-cells = <1>;
- compatible = "cfi-flash";
- reg = <0x0 0x0 0x2000000>;
- bank-width = <2>;
- device-width = <1>;
-
- partition@0 {
- /* 256KB for DTB Image */
- reg = <0x0 0x00040000>;
- label = "NOR DTB Image";
- };
-
- partition@40000 {
- /* 3.75 MB for Linux Kernel Image */
- reg = <0x00040000 0x003c0000>;
- label = "NOR Linux Kernel Image";
- };
-
- partition@400000 {
- /* 27MB for Root file System */
- reg = <0x00400000 0x01b00000>;
- label = "NOR Root File System";
- };
-
- partition@1f00000 {
- /* This location must not be altered */
- /* 512KB for u-boot Bootloader Image */
- /* 512KB for u-boot Environment Variables */
- reg = <0x01f00000 0x00100000>;
- label = "NOR U-Boot Image";
- read-only;
- };
- };
-};
-
-&soc {
- i2c@3000 {
- rtc@68 {
- compatible = "dallas,ds1339";
- reg = <0x68>;
- };
- };
-
- mdio@24000 {
- phy0: ethernet-phy@0 {
- interrupts = <3 1 0 0>;
- reg = <0x0>;
- };
- phy1: ethernet-phy@1 {
- interrupts = <2 1 0 0>;
- reg = <0x1>;
- };
- phy2: ethernet-phy@2 {
- interrupts = <1 1 0 0>;
- reg = <0x2>;
- };
- };
-
- mdio@25000 {
- tbi1: tbi-phy@11 {
- reg = <0x11>;
- device_type = "tbi-phy";
- };
- };
-
- mdio@26000 {
- tbi2: tbi-phy@11 {
- reg = <0x11>;
- device_type = "tbi-phy";
- };
- };
-
- enet0: ethernet@b0000 {
- phy-handle = <&phy2>;
- phy-connection-type = "rgmii-id";
- };
-
- enet1: ethernet@b1000 {
- phy-handle = <&phy0>;
- tbi-handle = <&tbi1>;
- phy-connection-type = "sgmii";
- };
-
- enet2: ethernet@b2000 {
- phy-handle = <&phy1>;
- phy-connection-type = "rgmii-id";
- };
-
- usb@22000 {
- phy_type = "ulpi";
- };
-
- /* USB2 is shared with localbus, so it must be disabled
- by default. We can't put 'status = "disabled";' here
- since U-Boot doesn't clear the status property when
- it enables USB2. OTOH, U-Boot does create a new node
- when there isn't any. So, just comment it out.
- */
- usb@23000 {
- status = "disabled";
- phy_type = "ulpi";
- };
-};
diff --git a/trunk/arch/powerpc/boot/dts/p1020utm-pc_32b.dts b/trunk/arch/powerpc/boot/dts/p1020utm-pc_32b.dts
deleted file mode 100644
index 4bfdd8971cdb..000000000000
--- a/trunk/arch/powerpc/boot/dts/p1020utm-pc_32b.dts
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * P1020 UTM-PC Device Tree Source (32-bit address map)
- *
- * Copyright 2012 Freescale Semiconductor Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Freescale Semiconductor nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- *
- * ALTERNATIVELY, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") as published by the Free Software
- * Foundation, either version 2 of that License or (at your option) any
- * later version.
- *
- * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/include/ "fsl/p1020si-pre.dtsi"
-/ {
- model = "fsl,P1020UTM-PC";
- compatible = "fsl,P1020UTM-PC";
-
- memory {
- device_type = "memory";
- };
-
- lbc: localbus@ffe05000 {
- reg = <0x0 0xffe05000 0x0 0x1000>;
-
- /* NOR */
- ranges = <0x0 0x0 0x0 0xec000000 0x02000000
- 0x1 0x0 0x0 0xffa00000 0x00040000
- 0x2 0x0 0x0 0xffb00000 0x00020000>;
- };
-
- soc: soc@ffe00000 {
- ranges = <0x0 0x0 0xffe00000 0x100000>;
- };
-
- pci0: pcie@ffe09000 {
- reg = <0x0 0xffe09000 0x0 0x1000>;
- ranges = <0x2000000 0x0 0xe0000000 0x0 0xa0000000 0x0 0x20000000
- 0x1000000 0x0 0x00000000 0x0 0xffc10000 0x0 0x10000>;
- pcie@0 {
- ranges = <0x2000000 0x0 0xe0000000
- 0x2000000 0x0 0xe0000000
- 0x0 0x20000000
-
- 0x1000000 0x0 0x0
- 0x1000000 0x0 0x0
- 0x0 0x100000>;
- };
- };
-
- pci1: pcie@ffe0a000 {
- reg = <0x0 0xffe0a000 0x0 0x1000>;
- ranges = <0x2000000 0x0 0xe0000000 0x0 0x80000000 0x0 0x20000000
- 0x1000000 0x0 0x00000000 0x0 0xffc00000 0x0 0x10000>;
- pcie@0 {
- ranges = <0x2000000 0x0 0xe0000000
- 0x2000000 0x0 0xe0000000
- 0x0 0x20000000
-
- 0x1000000 0x0 0x0
- 0x1000000 0x0 0x0
- 0x0 0x100000>;
- };
- };
-};
-
-/include/ "p1020utm-pc.dtsi"
-/include/ "fsl/p1020si-post.dtsi"
diff --git a/trunk/arch/powerpc/boot/dts/p1020utm-pc_36b.dts b/trunk/arch/powerpc/boot/dts/p1020utm-pc_36b.dts
deleted file mode 100644
index abec53557501..000000000000
--- a/trunk/arch/powerpc/boot/dts/p1020utm-pc_36b.dts
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * P1020 UTM-PC Device Tree Source (36-bit address map)
- *
- * Copyright 2012 Freescale Semiconductor Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Freescale Semiconductor nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- *
- * ALTERNATIVELY, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") as published by the Free Software
- * Foundation, either version 2 of that License or (at your option) any
- * later version.
- *
- * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/include/ "fsl/p1020si-pre.dtsi"
-/ {
- model = "fsl,P1020UTM-PC";
- compatible = "fsl,P1020UTM-PC";
-
- memory {
- device_type = "memory";
- };
-
- lbc: localbus@fffe05000 {
- reg = <0xf 0xffe05000 0x0 0x1000>;
-
- /* NOR */
- ranges = <0x0 0x0 0xf 0xec000000 0x02000000
- 0x1 0x0 0xf 0xffa00000 0x00040000
- 0x2 0x0 0xf 0xffb00000 0x00020000>;
- };
-
- soc: soc@fffe00000 {
- ranges = <0x0 0xf 0xffe00000 0x100000>;
- };
-
- pci0: pcie@fffe09000 {
- reg = <0xf 0xffe09000 0x0 0x1000>;
- ranges = <0x2000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000
- 0x1000000 0x0 0x00000000 0xf 0xffc10000 0x0 0x10000>;
- pcie@0 {
- ranges = <0x2000000 0x0 0xe0000000
- 0x2000000 0x0 0xe0000000
- 0x0 0x20000000
-
- 0x1000000 0x0 0x0
- 0x1000000 0x0 0x0
- 0x0 0x100000>;
- };
- };
-
- pci1: pcie@fffe0a000 {
- reg = <0xf 0xffe0a000 0 0x1000>;
- ranges = <0x2000000 0x0 0xe0000000 0xc 0x00000000 0x0 0x20000000
- 0x1000000 0x0 0x00000000 0xf 0xffc00000 0x0 0x10000>;
- pcie@0 {
- ranges = <0x2000000 0x0 0xe0000000
- 0x2000000 0x0 0xe0000000
- 0x0 0x20000000
-
- 0x1000000 0x0 0x0
- 0x1000000 0x0 0x0
- 0x0 0x100000>;
- };
- };
-};
-
-/include/ "p1020utm-pc.dtsi"
-/include/ "fsl/p1020si-post.dtsi"
diff --git a/trunk/arch/powerpc/boot/dts/p2041rdb.dts b/trunk/arch/powerpc/boot/dts/p2041rdb.dts
index 285213976a7f..4f957db01230 100644
--- a/trunk/arch/powerpc/boot/dts/p2041rdb.dts
+++ b/trunk/arch/powerpc/boot/dts/p2041rdb.dts
@@ -135,6 +135,7 @@
reg = <0xf 0xfe200000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x00000000 0x0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8000000 0x0 0x00010000>;
+ fsl,msi = <&msi0>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -150,6 +151,7 @@
reg = <0xf 0xfe201000 0 0x1000>;
ranges = <0x02000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000
0x01000000 0x0 0x00000000 0xf 0xf8010000 0x0 0x00010000>;
+ fsl,msi = <&msi1>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -165,6 +167,7 @@
reg = <0xf 0xfe202000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x40000000 0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8020000 0 0x00010000>;
+ fsl,msi = <&msi2>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
diff --git a/trunk/arch/powerpc/boot/dts/p3041ds.dts b/trunk/arch/powerpc/boot/dts/p3041ds.dts
index 22a215e94162..f469145abaeb 100644
--- a/trunk/arch/powerpc/boot/dts/p3041ds.dts
+++ b/trunk/arch/powerpc/boot/dts/p3041ds.dts
@@ -173,6 +173,7 @@
reg = <0xf 0xfe200000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x00000000 0x0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8000000 0x0 0x00010000>;
+ fsl,msi = <&msi0>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -188,6 +189,7 @@
reg = <0xf 0xfe201000 0 0x1000>;
ranges = <0x02000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000
0x01000000 0x0 0x00000000 0xf 0xf8010000 0x0 0x00010000>;
+ fsl,msi = <&msi1>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -203,6 +205,7 @@
reg = <0xf 0xfe202000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x40000000 0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8020000 0 0x00010000>;
+ fsl,msi = <&msi2>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -218,6 +221,7 @@
reg = <0xf 0xfe203000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x60000000 0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8030000 0 0x00010000>;
+ fsl,msi = <&msi2>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
diff --git a/trunk/arch/powerpc/boot/dts/p3060qds.dts b/trunk/arch/powerpc/boot/dts/p3060qds.dts
index 9ae875c8a211..529042e4b9a2 100644
--- a/trunk/arch/powerpc/boot/dts/p3060qds.dts
+++ b/trunk/arch/powerpc/boot/dts/p3060qds.dts
@@ -212,6 +212,7 @@
reg = <0xf 0xfe200000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x00000000 0x0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8000000 0x0 0x00010000>;
+ fsl,msi = <&msi0>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -227,6 +228,7 @@
reg = <0xf 0xfe201000 0 0x1000>;
ranges = <0x02000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000
0x01000000 0x0 0x00000000 0xf 0xf8010000 0x0 0x00010000>;
+ fsl,msi = <&msi1>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
diff --git a/trunk/arch/powerpc/boot/dts/p4080ds.dts b/trunk/arch/powerpc/boot/dts/p4080ds.dts
index 3e204609d02e..6d60e54e50a0 100644
--- a/trunk/arch/powerpc/boot/dts/p4080ds.dts
+++ b/trunk/arch/powerpc/boot/dts/p4080ds.dts
@@ -141,6 +141,7 @@
reg = <0xf 0xfe200000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x00000000 0x0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8000000 0x0 0x00010000>;
+ fsl,msi = <&msi0>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -156,6 +157,7 @@
reg = <0xf 0xfe201000 0 0x1000>;
ranges = <0x02000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000
0x01000000 0x0 0x00000000 0xf 0xf8010000 0x0 0x00010000>;
+ fsl,msi = <&msi1>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -171,6 +173,7 @@
reg = <0xf 0xfe202000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x40000000 0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8020000 0 0x00010000>;
+ fsl,msi = <&msi2>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
diff --git a/trunk/arch/powerpc/boot/dts/p5020ds.dts b/trunk/arch/powerpc/boot/dts/p5020ds.dts
index 27c07ed6adc1..1c250684c902 100644
--- a/trunk/arch/powerpc/boot/dts/p5020ds.dts
+++ b/trunk/arch/powerpc/boot/dts/p5020ds.dts
@@ -173,6 +173,7 @@
reg = <0xf 0xfe200000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x00000000 0x0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8000000 0x0 0x00010000>;
+ fsl,msi = <&msi0>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -188,6 +189,7 @@
reg = <0xf 0xfe201000 0 0x1000>;
ranges = <0x02000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000
0x01000000 0x0 0x00000000 0xf 0xf8010000 0x0 0x00010000>;
+ fsl,msi = <&msi1>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -203,6 +205,7 @@
reg = <0xf 0xfe202000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x40000000 0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8020000 0 0x00010000>;
+ fsl,msi = <&msi2>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
@@ -218,6 +221,7 @@
reg = <0xf 0xfe203000 0 0x1000>;
ranges = <0x02000000 0 0xe0000000 0xc 0x60000000 0 0x20000000
0x01000000 0 0x00000000 0xf 0xf8030000 0 0x00010000>;
+ fsl,msi = <&msi2>;
pcie@0 {
ranges = <0x02000000 0 0xe0000000
0x02000000 0 0xe0000000
diff --git a/trunk/arch/powerpc/configs/corenet32_smp_defconfig b/trunk/arch/powerpc/configs/corenet32_smp_defconfig
index 91db656294e8..f8aef205d222 100644
--- a/trunk/arch/powerpc/configs/corenet32_smp_defconfig
+++ b/trunk/arch/powerpc/configs/corenet32_smp_defconfig
@@ -116,7 +116,6 @@ CONFIG_SERIAL_8250_RSA=y
CONFIG_HW_RANDOM=y
CONFIG_NVRAM=y
CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MPC=y
CONFIG_SPI=y
CONFIG_SPI_GPIO=y
diff --git a/trunk/arch/powerpc/configs/corenet64_smp_defconfig b/trunk/arch/powerpc/configs/corenet64_smp_defconfig
index 6798343580f0..82b13bfcf3c0 100644
--- a/trunk/arch/powerpc/configs/corenet64_smp_defconfig
+++ b/trunk/arch/powerpc/configs/corenet64_smp_defconfig
@@ -71,8 +71,6 @@ CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-CONFIG_I2C_MPC=y
# CONFIG_HWMON is not set
CONFIG_VIDEO_OUTPUT_CONTROL=y
# CONFIG_HID_SUPPORT is not set
diff --git a/trunk/arch/powerpc/configs/mpc85xx_defconfig b/trunk/arch/powerpc/configs/mpc85xx_defconfig
index d6b6df5e8743..cc87a8441566 100644
--- a/trunk/arch/powerpc/configs/mpc85xx_defconfig
+++ b/trunk/arch/powerpc/configs/mpc85xx_defconfig
@@ -117,7 +117,6 @@ CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_QE=m
CONFIG_NVRAM=y
CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
CONFIG_I2C_CPM=m
CONFIG_I2C_MPC=y
CONFIG_SPI=y
diff --git a/trunk/arch/powerpc/configs/mpc85xx_smp_defconfig b/trunk/arch/powerpc/configs/mpc85xx_smp_defconfig
index 5b0e2926becd..48d6682f2434 100644
--- a/trunk/arch/powerpc/configs/mpc85xx_smp_defconfig
+++ b/trunk/arch/powerpc/configs/mpc85xx_smp_defconfig
@@ -119,7 +119,6 @@ CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_QE=m
CONFIG_NVRAM=y
CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
CONFIG_I2C_CPM=m
CONFIG_I2C_MPC=y
CONFIG_SPI=y
diff --git a/trunk/arch/powerpc/include/asm/dma-mapping.h b/trunk/arch/powerpc/include/asm/dma-mapping.h
index 62678e365ca0..dd70fac57ec8 100644
--- a/trunk/arch/powerpc/include/asm/dma-mapping.h
+++ b/trunk/arch/powerpc/include/asm/dma-mapping.h
@@ -22,11 +22,9 @@
/* Some dma direct funcs must be visible for use in other dma_ops */
extern void *dma_direct_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs);
+ dma_addr_t *dma_handle, gfp_t flag);
extern void dma_direct_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs);
+ void *vaddr, dma_addr_t dma_handle);
#ifdef CONFIG_NOT_COHERENT_CACHE
@@ -132,29 +130,23 @@ static inline int dma_supported(struct device *dev, u64 mask)
extern int dma_set_mask(struct device *dev, u64 dma_mask);
-#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
-
-static inline void *dma_alloc_attrs(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+static inline void *dma_alloc_coherent(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t flag)
{
struct dma_map_ops *dma_ops = get_dma_ops(dev);
void *cpu_addr;
BUG_ON(!dma_ops);
- cpu_addr = dma_ops->alloc(dev, size, dma_handle, flag, attrs);
+ cpu_addr = dma_ops->alloc_coherent(dev, size, dma_handle, flag);
debug_dma_alloc_coherent(dev, size, *dma_handle, cpu_addr);
return cpu_addr;
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *cpu_addr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *cpu_addr, dma_addr_t dma_handle)
{
struct dma_map_ops *dma_ops = get_dma_ops(dev);
@@ -162,7 +154,7 @@ static inline void dma_free_attrs(struct device *dev, size_t size,
debug_dma_free_coherent(dev, size, cpu_addr, dma_handle);
- dma_ops->free(dev, size, cpu_addr, dma_handle, attrs);
+ dma_ops->free_coherent(dev, size, cpu_addr, dma_handle);
}
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
diff --git a/trunk/arch/powerpc/include/asm/epapr_hcalls.h b/trunk/arch/powerpc/include/asm/epapr_hcalls.h
index 976835d8f22e..f3b0c2cc9fea 100644
--- a/trunk/arch/powerpc/include/asm/epapr_hcalls.h
+++ b/trunk/arch/powerpc/include/asm/epapr_hcalls.h
@@ -134,15 +134,10 @@
* whether they will be clobbered.
*
* Note that r11 can be used as an output parameter.
- *
- * The "memory" clobber is only necessary for hcalls where the Hypervisor
- * will read or write guest memory. However, we add it to all hcalls because
- * the impact is minimal, and we want to ensure that it's present for the
- * hcalls that need it.
*/
/* List of common clobbered registers. Do not use this macro. */
-#define EV_HCALL_CLOBBERS "r0", "r12", "xer", "ctr", "lr", "cc", "memory"
+#define EV_HCALL_CLOBBERS "r0", "r12", "xer", "ctr", "lr", "cc"
#define EV_HCALL_CLOBBERS8 EV_HCALL_CLOBBERS
#define EV_HCALL_CLOBBERS7 EV_HCALL_CLOBBERS8, "r10"
diff --git a/trunk/arch/powerpc/include/asm/fsl_guts.h b/trunk/arch/powerpc/include/asm/fsl_guts.h
index aa4c488589ce..ce04530d2000 100644
--- a/trunk/arch/powerpc/include/asm/fsl_guts.h
+++ b/trunk/arch/powerpc/include/asm/fsl_guts.h
@@ -16,6 +16,15 @@
#define __ASM_POWERPC_FSL_GUTS_H__
#ifdef __KERNEL__
+/*
+ * These #ifdefs are safe because it's not possible to build a kernel that
+ * runs on e500 and e600 cores.
+ */
+
+#if !defined(CONFIG_PPC_85xx) && !defined(CONFIG_PPC_86xx)
+#error Only 85xx and 86xx SOCs are supported
+#endif
+
/**
* Global Utility Registers.
*
@@ -27,7 +36,11 @@
* different names. In these cases, one name is chosen to avoid extraneous
* #ifdefs.
*/
-struct ccsr_guts {
+#ifdef CONFIG_PPC_85xx
+struct ccsr_guts_85xx {
+#else
+struct ccsr_guts_86xx {
+#endif
__be32 porpllsr; /* 0x.0000 - POR PLL Ratio Status Register */
__be32 porbmsr; /* 0x.0004 - POR Boot Mode Status Register */
__be32 porimpscr; /* 0x.0008 - POR I/O Impedance Status and Control Register */
@@ -64,8 +77,11 @@ struct ccsr_guts {
u8 res0a8[0xb0 - 0xa8];
__be32 rstcr; /* 0x.00b0 - Reset Control Register */
u8 res0b4[0xc0 - 0xb4];
- __be32 iovselsr; /* 0x.00c0 - I/O voltage select status register
- Called 'elbcvselcr' on 86xx SOCs */
+#ifdef CONFIG_PPC_85xx
+ __be32 iovselsr; /* 0x.00c0 - I/O voltage select status register */
+#else
+ __be32 elbcvselcr; /* 0x.00c0 - eLBC Voltage Select Ctrl Reg */
+#endif
u8 res0c4[0x224 - 0xc4];
__be32 iodelay1; /* 0x.0224 - IO delay control register 1 */
__be32 iodelay2; /* 0x.0228 - IO delay control register 2 */
@@ -120,7 +136,7 @@ struct ccsr_guts {
* ch: The channel on the DMA controller (0, 1, 2, or 3)
* device: The device to set as the source (CCSR_GUTS_DMACR_DEV_xx)
*/
-static inline void guts_set_dmacr(struct ccsr_guts __iomem *guts,
+static inline void guts_set_dmacr(struct ccsr_guts_86xx __iomem *guts,
unsigned int co, unsigned int ch, unsigned int device)
{
unsigned int shift = 16 + (8 * (1 - co) + 2 * (3 - ch));
@@ -156,7 +172,7 @@ static inline void guts_set_dmacr(struct ccsr_guts __iomem *guts,
* ch: The channel on the DMA controller (0, 1, 2, or 3)
* value: the new value for the bit (0 or 1)
*/
-static inline void guts_set_pmuxcr_dma(struct ccsr_guts __iomem *guts,
+static inline void guts_set_pmuxcr_dma(struct ccsr_guts_86xx __iomem *guts,
unsigned int co, unsigned int ch, unsigned int value)
{
if ((ch == 0) || (ch == 3)) {
diff --git a/trunk/arch/powerpc/kernel/dma-iommu.c b/trunk/arch/powerpc/kernel/dma-iommu.c
index bcfdcd22c766..3f6464b4d970 100644
--- a/trunk/arch/powerpc/kernel/dma-iommu.c
+++ b/trunk/arch/powerpc/kernel/dma-iommu.c
@@ -17,8 +17,7 @@
* to the dma address (mapping) of the first page.
*/
static void *dma_iommu_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flag)
{
return iommu_alloc_coherent(dev, get_iommu_table_base(dev), size,
dma_handle, dev->coherent_dma_mask, flag,
@@ -26,8 +25,7 @@ static void *dma_iommu_alloc_coherent(struct device *dev, size_t size,
}
static void dma_iommu_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+ void *vaddr, dma_addr_t dma_handle)
{
iommu_free_coherent(get_iommu_table_base(dev), size, vaddr, dma_handle);
}
@@ -107,8 +105,8 @@ static u64 dma_iommu_get_required_mask(struct device *dev)
}
struct dma_map_ops dma_iommu_ops = {
- .alloc = dma_iommu_alloc_coherent,
- .free = dma_iommu_free_coherent,
+ .alloc_coherent = dma_iommu_alloc_coherent,
+ .free_coherent = dma_iommu_free_coherent,
.map_sg = dma_iommu_map_sg,
.unmap_sg = dma_iommu_unmap_sg,
.dma_supported = dma_iommu_dma_supported,
diff --git a/trunk/arch/powerpc/kernel/dma-swiotlb.c b/trunk/arch/powerpc/kernel/dma-swiotlb.c
index 4ab88dafb235..1ebc9189aada 100644
--- a/trunk/arch/powerpc/kernel/dma-swiotlb.c
+++ b/trunk/arch/powerpc/kernel/dma-swiotlb.c
@@ -47,8 +47,8 @@ static u64 swiotlb_powerpc_get_required(struct device *dev)
* for everything else.
*/
struct dma_map_ops swiotlb_dma_ops = {
- .alloc = dma_direct_alloc_coherent,
- .free = dma_direct_free_coherent,
+ .alloc_coherent = dma_direct_alloc_coherent,
+ .free_coherent = dma_direct_free_coherent,
.map_sg = swiotlb_map_sg_attrs,
.unmap_sg = swiotlb_unmap_sg_attrs,
.dma_supported = swiotlb_dma_supported,
diff --git a/trunk/arch/powerpc/kernel/dma.c b/trunk/arch/powerpc/kernel/dma.c
index b1ec983dcec8..7d0233c12ee3 100644
--- a/trunk/arch/powerpc/kernel/dma.c
+++ b/trunk/arch/powerpc/kernel/dma.c
@@ -26,8 +26,7 @@
void *dma_direct_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flag)
{
void *ret;
#ifdef CONFIG_NOT_COHERENT_CACHE
@@ -55,8 +54,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size,
}
void dma_direct_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+ void *vaddr, dma_addr_t dma_handle)
{
#ifdef CONFIG_NOT_COHERENT_CACHE
__dma_free_coherent(size, vaddr);
@@ -152,8 +150,8 @@ static inline void dma_direct_sync_single(struct device *dev,
#endif
struct dma_map_ops dma_direct_ops = {
- .alloc = dma_direct_alloc_coherent,
- .free = dma_direct_free_coherent,
+ .alloc_coherent = dma_direct_alloc_coherent,
+ .free_coherent = dma_direct_free_coherent,
.map_sg = dma_direct_map_sg,
.unmap_sg = dma_direct_unmap_sg,
.dma_supported = dma_direct_dma_supported,
diff --git a/trunk/arch/powerpc/kernel/fadump.c b/trunk/arch/powerpc/kernel/fadump.c
index 18bdf74fa164..cfe7a38708c3 100644
--- a/trunk/arch/powerpc/kernel/fadump.c
+++ b/trunk/arch/powerpc/kernel/fadump.c
@@ -40,8 +40,6 @@
#include
#include
#include
-#include
-#include
static struct fw_dump fw_dump;
static struct fadump_mem_struct fdm;
diff --git a/trunk/arch/powerpc/kernel/ibmebus.c b/trunk/arch/powerpc/kernel/ibmebus.c
index b01d14eeca8d..79bb282e6501 100644
--- a/trunk/arch/powerpc/kernel/ibmebus.c
+++ b/trunk/arch/powerpc/kernel/ibmebus.c
@@ -65,8 +65,7 @@ static struct of_device_id __initdata ibmebus_matches[] = {
static void *ibmebus_alloc_coherent(struct device *dev,
size_t size,
dma_addr_t *dma_handle,
- gfp_t flag,
- struct dma_attrs *attrs)
+ gfp_t flag)
{
void *mem;
@@ -78,8 +77,7 @@ static void *ibmebus_alloc_coherent(struct device *dev,
static void ibmebus_free_coherent(struct device *dev,
size_t size, void *vaddr,
- dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+ dma_addr_t dma_handle)
{
kfree(vaddr);
}
@@ -138,8 +136,8 @@ static u64 ibmebus_dma_get_required_mask(struct device *dev)
}
static struct dma_map_ops ibmebus_dma_ops = {
- .alloc = ibmebus_alloc_coherent,
- .free = ibmebus_free_coherent,
+ .alloc_coherent = ibmebus_alloc_coherent,
+ .free_coherent = ibmebus_free_coherent,
.map_sg = ibmebus_map_sg,
.unmap_sg = ibmebus_unmap_sg,
.dma_supported = ibmebus_dma_supported,
diff --git a/trunk/arch/powerpc/kernel/kgdb.c b/trunk/arch/powerpc/kernel/kgdb.c
index 782bd0a3c2f0..76a6e40a6f7c 100644
--- a/trunk/arch/powerpc/kernel/kgdb.c
+++ b/trunk/arch/powerpc/kernel/kgdb.c
@@ -24,7 +24,6 @@
#include
#include
#include
-#include
/*
* This table contains the mapping between PowerPC hardware trap types, and
diff --git a/trunk/arch/powerpc/kernel/vio.c b/trunk/arch/powerpc/kernel/vio.c
index a3a99901c8ec..b2f7c8480bf6 100644
--- a/trunk/arch/powerpc/kernel/vio.c
+++ b/trunk/arch/powerpc/kernel/vio.c
@@ -482,8 +482,7 @@ static void vio_cmo_balance(struct work_struct *work)
}
static void *vio_dma_iommu_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flag)
{
struct vio_dev *viodev = to_vio_dev(dev);
void *ret;
@@ -493,7 +492,7 @@ static void *vio_dma_iommu_alloc_coherent(struct device *dev, size_t size,
return NULL;
}
- ret = dma_iommu_ops.alloc(dev, size, dma_handle, flag, attrs);
+ ret = dma_iommu_ops.alloc_coherent(dev, size, dma_handle, flag);
if (unlikely(ret == NULL)) {
vio_cmo_dealloc(viodev, roundup(size, PAGE_SIZE));
atomic_inc(&viodev->cmo.allocs_failed);
@@ -503,12 +502,11 @@ static void *vio_dma_iommu_alloc_coherent(struct device *dev, size_t size,
}
static void vio_dma_iommu_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+ void *vaddr, dma_addr_t dma_handle)
{
struct vio_dev *viodev = to_vio_dev(dev);
- dma_iommu_ops.free(dev, size, vaddr, dma_handle, attrs);
+ dma_iommu_ops.free_coherent(dev, size, vaddr, dma_handle);
vio_cmo_dealloc(viodev, roundup(size, PAGE_SIZE));
}
@@ -609,8 +607,8 @@ static u64 vio_dma_get_required_mask(struct device *dev)
}
struct dma_map_ops vio_dma_mapping_ops = {
- .alloc = vio_dma_iommu_alloc_coherent,
- .free = vio_dma_iommu_free_coherent,
+ .alloc_coherent = vio_dma_iommu_alloc_coherent,
+ .free_coherent = vio_dma_iommu_free_coherent,
.map_sg = vio_dma_iommu_map_sg,
.unmap_sg = vio_dma_iommu_unmap_sg,
.map_page = vio_dma_iommu_map_page,
diff --git a/trunk/arch/powerpc/kvm/book3s_emulate.c b/trunk/arch/powerpc/kvm/book3s_emulate.c
index 135663a3e4fc..f1950d131827 100644
--- a/trunk/arch/powerpc/kvm/book3s_emulate.c
+++ b/trunk/arch/powerpc/kvm/book3s_emulate.c
@@ -21,7 +21,6 @@
#include
#include
#include
-#include
#define OP_19_XOP_RFID 18
#define OP_19_XOP_RFI 50
diff --git a/trunk/arch/powerpc/kvm/book3s_paired_singles.c b/trunk/arch/powerpc/kvm/book3s_paired_singles.c
index a59a25a13218..e70ef2d86431 100644
--- a/trunk/arch/powerpc/kvm/book3s_paired_singles.c
+++ b/trunk/arch/powerpc/kvm/book3s_paired_singles.c
@@ -24,7 +24,6 @@
#include
#include
#include
-#include
#include
/* #define DEBUG */
diff --git a/trunk/arch/powerpc/kvm/book3s_pr.c b/trunk/arch/powerpc/kvm/book3s_pr.c
index 642d88574b07..7340e1090b77 100644
--- a/trunk/arch/powerpc/kvm/book3s_pr.c
+++ b/trunk/arch/powerpc/kvm/book3s_pr.c
@@ -33,7 +33,6 @@
#include
#include
#include
-#include
#include
#include
#include
diff --git a/trunk/arch/powerpc/platforms/52xx/mpc52xx_pci.c b/trunk/arch/powerpc/platforms/52xx/mpc52xx_pci.c
index e2d401ad8fbb..bfb11e01133e 100644
--- a/trunk/arch/powerpc/platforms/52xx/mpc52xx_pci.c
+++ b/trunk/arch/powerpc/platforms/52xx/mpc52xx_pci.c
@@ -93,7 +93,7 @@ struct mpc52xx_pci {
};
/* MPC5200 device tree match tables */
-const struct of_device_id mpc52xx_pci_ids[] __initconst = {
+const struct of_device_id mpc52xx_pci_ids[] __initdata = {
{ .type = "pci", .compatible = "fsl,mpc5200-pci", },
{ .type = "pci", .compatible = "mpc5200-pci", },
{}
diff --git a/trunk/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/trunk/arch/powerpc/platforms/85xx/mpc85xx_mds.c
index 9a6f04406e0d..3754ddc00af7 100644
--- a/trunk/arch/powerpc/platforms/85xx/mpc85xx_mds.c
+++ b/trunk/arch/powerpc/platforms/85xx/mpc85xx_mds.c
@@ -270,7 +270,7 @@ static void __init mpc85xx_mds_qe_init(void)
if (machine_is(p1021_mds)) {
- struct ccsr_guts __iomem *guts;
+ struct ccsr_guts_85xx __iomem *guts;
np = of_find_node_by_name(NULL, "global-utilities");
if (np) {
diff --git a/trunk/arch/powerpc/platforms/85xx/mpc85xx_rdb.c b/trunk/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
index 313fce4f5574..9848f9e39853 100644
--- a/trunk/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
+++ b/trunk/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
@@ -127,7 +127,7 @@ static void __init mpc85xx_rdb_setup_arch(void)
#if defined(CONFIG_UCC_GETH) || defined(CONFIG_SERIAL_QE)
if (machine_is(p1025_rdb)) {
- struct ccsr_guts __iomem *guts;
+ struct ccsr_guts_85xx __iomem *guts;
np = of_find_node_by_name(NULL, "global-utilities");
if (np) {
diff --git a/trunk/arch/powerpc/platforms/85xx/p1022_ds.c b/trunk/arch/powerpc/platforms/85xx/p1022_ds.c
index e74b7cde9aee..0fe88e39945e 100644
--- a/trunk/arch/powerpc/platforms/85xx/p1022_ds.c
+++ b/trunk/arch/powerpc/platforms/85xx/p1022_ds.c
@@ -150,7 +150,7 @@ static void p1022ds_set_monitor_port(enum fsl_diu_monitor_port port)
{
struct device_node *guts_node;
struct device_node *indirect_node = NULL;
- struct ccsr_guts __iomem *guts;
+ struct ccsr_guts_85xx __iomem *guts;
u8 __iomem *lbc_lcs0_ba = NULL;
u8 __iomem *lbc_lcs1_ba = NULL;
u8 b;
@@ -269,7 +269,7 @@ static void p1022ds_set_monitor_port(enum fsl_diu_monitor_port port)
void p1022ds_set_pixel_clock(unsigned int pixclock)
{
struct device_node *guts_np = NULL;
- struct ccsr_guts __iomem *guts;
+ struct ccsr_guts_85xx __iomem *guts;
unsigned long freq;
u64 temp;
u32 pxclk;
diff --git a/trunk/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/trunk/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
index 62cd3c555bfb..bbc615206c67 100644
--- a/trunk/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
+++ b/trunk/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
@@ -225,7 +225,7 @@ void mpc8610hpcd_set_monitor_port(enum fsl_diu_monitor_port port)
void mpc8610hpcd_set_pixel_clock(unsigned int pixclock)
{
struct device_node *guts_np = NULL;
- struct ccsr_guts __iomem *guts;
+ struct ccsr_guts_86xx __iomem *guts;
unsigned long freq;
u64 temp;
u32 pxclk;
diff --git a/trunk/arch/powerpc/platforms/cell/iommu.c b/trunk/arch/powerpc/platforms/cell/iommu.c
index b9f509a34c01..ae9fc7bc17d6 100644
--- a/trunk/arch/powerpc/platforms/cell/iommu.c
+++ b/trunk/arch/powerpc/platforms/cell/iommu.c
@@ -564,8 +564,7 @@ static struct iommu_table *cell_get_iommu_table(struct device *dev)
/* A coherent allocation implies strong ordering */
static void *dma_fixed_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flag)
{
if (iommu_fixed_is_weak)
return iommu_alloc_coherent(dev, cell_get_iommu_table(dev),
@@ -573,19 +572,18 @@ static void *dma_fixed_alloc_coherent(struct device *dev, size_t size,
device_to_mask(dev), flag,
dev_to_node(dev));
else
- return dma_direct_ops.alloc(dev, size, dma_handle, flag,
- attrs);
+ return dma_direct_ops.alloc_coherent(dev, size, dma_handle,
+ flag);
}
static void dma_fixed_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+ void *vaddr, dma_addr_t dma_handle)
{
if (iommu_fixed_is_weak)
iommu_free_coherent(cell_get_iommu_table(dev), size, vaddr,
dma_handle);
else
- dma_direct_ops.free(dev, size, vaddr, dma_handle, attrs);
+ dma_direct_ops.free_coherent(dev, size, vaddr, dma_handle);
}
static dma_addr_t dma_fixed_map_page(struct device *dev, struct page *page,
@@ -644,8 +642,8 @@ static int dma_fixed_dma_supported(struct device *dev, u64 mask)
static int dma_set_mask_and_switch(struct device *dev, u64 dma_mask);
struct dma_map_ops dma_iommu_fixed_ops = {
- .alloc = dma_fixed_alloc_coherent,
- .free = dma_fixed_free_coherent,
+ .alloc_coherent = dma_fixed_alloc_coherent,
+ .free_coherent = dma_fixed_free_coherent,
.map_sg = dma_fixed_map_sg,
.unmap_sg = dma_fixed_unmap_sg,
.dma_supported = dma_fixed_dma_supported,
diff --git a/trunk/arch/powerpc/platforms/cell/qpace_setup.c b/trunk/arch/powerpc/platforms/cell/qpace_setup.c
index 6e3409d590ac..7f9b6742f8b6 100644
--- a/trunk/arch/powerpc/platforms/cell/qpace_setup.c
+++ b/trunk/arch/powerpc/platforms/cell/qpace_setup.c
@@ -61,7 +61,7 @@ static void qpace_progress(char *s, unsigned short hex)
printk("*** %04x : %s\n", hex, s ? s : "");
}
-static const struct of_device_id qpace_bus_ids[] __initconst = {
+static const struct of_device_id qpace_bus_ids[] __initdata = {
{ .type = "soc", },
{ .compatible = "soc", },
{ .type = "spider", },
diff --git a/trunk/arch/powerpc/platforms/cell/setup.c b/trunk/arch/powerpc/platforms/cell/setup.c
index 4ab087671185..fa3e294fd343 100644
--- a/trunk/arch/powerpc/platforms/cell/setup.c
+++ b/trunk/arch/powerpc/platforms/cell/setup.c
@@ -140,7 +140,7 @@ static int __devinit cell_setup_phb(struct pci_controller *phb)
return 0;
}
-static const struct of_device_id cell_bus_ids[] __initconst = {
+static const struct of_device_id cell_bus_ids[] __initdata = {
{ .type = "soc", },
{ .compatible = "soc", },
{ .type = "spider", },
diff --git a/trunk/arch/powerpc/platforms/ps3/system-bus.c b/trunk/arch/powerpc/platforms/ps3/system-bus.c
index 5606fe36faf2..880eb9ce22c5 100644
--- a/trunk/arch/powerpc/platforms/ps3/system-bus.c
+++ b/trunk/arch/powerpc/platforms/ps3/system-bus.c
@@ -515,8 +515,7 @@ core_initcall(ps3_system_bus_init);
* to the dma address (mapping) of the first page.
*/
static void * ps3_alloc_coherent(struct device *_dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flag)
{
int result;
struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
@@ -553,7 +552,7 @@ static void * ps3_alloc_coherent(struct device *_dev, size_t size,
}
static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr,
- dma_addr_t dma_handle, struct dma_attrs *attrs)
+ dma_addr_t dma_handle)
{
struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
@@ -702,8 +701,8 @@ static u64 ps3_dma_get_required_mask(struct device *_dev)
}
static struct dma_map_ops ps3_sb_dma_ops = {
- .alloc = ps3_alloc_coherent,
- .free = ps3_free_coherent,
+ .alloc_coherent = ps3_alloc_coherent,
+ .free_coherent = ps3_free_coherent,
.map_sg = ps3_sb_map_sg,
.unmap_sg = ps3_sb_unmap_sg,
.dma_supported = ps3_dma_supported,
@@ -713,8 +712,8 @@ static struct dma_map_ops ps3_sb_dma_ops = {
};
static struct dma_map_ops ps3_ioc0_dma_ops = {
- .alloc = ps3_alloc_coherent,
- .free = ps3_free_coherent,
+ .alloc_coherent = ps3_alloc_coherent,
+ .free_coherent = ps3_free_coherent,
.map_sg = ps3_ioc0_map_sg,
.unmap_sg = ps3_ioc0_unmap_sg,
.dma_supported = ps3_dma_supported,
diff --git a/trunk/arch/powerpc/platforms/pseries/eeh_event.c b/trunk/arch/powerpc/platforms/pseries/eeh_event.c
index 4cb375c0f8d1..4a4752565856 100644
--- a/trunk/arch/powerpc/platforms/pseries/eeh_event.c
+++ b/trunk/arch/powerpc/platforms/pseries/eeh_event.c
@@ -59,7 +59,8 @@ static int eeh_event_handler(void * dummy)
struct eeh_event *event;
struct eeh_dev *edev;
- set_task_comm(current, "eehd");
+ daemonize("eehd");
+ set_current_state(TASK_INTERRUPTIBLE);
spin_lock_irqsave(&eeh_eventlist_lock, flags);
event = NULL;
@@ -82,7 +83,6 @@ static int eeh_event_handler(void * dummy)
printk(KERN_INFO "EEH: Detected PCI bus error on device %s\n",
eeh_pci_name(edev->pdev));
- set_current_state(TASK_INTERRUPTIBLE); /* Don't add to load average */
edev = handle_eeh_events(event);
eeh_clear_slot(eeh_dev_to_of_node(edev), EEH_MODE_RECOVERING);
diff --git a/trunk/arch/powerpc/sysdev/qe_lib/qe.c b/trunk/arch/powerpc/sysdev/qe_lib/qe.c
index 818e763f8265..ceb09cbd2329 100644
--- a/trunk/arch/powerpc/sysdev/qe_lib/qe.c
+++ b/trunk/arch/powerpc/sysdev/qe_lib/qe.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2010 Freescale Semicondutor, Inc. All rights reserved.
+ * Copyright (C) 2006 Freescale Semicondutor, Inc. All rights reserved.
*
* Authors: Shlomi Gridish
* Li Yang
@@ -266,19 +266,7 @@ EXPORT_SYMBOL(qe_clock_source);
static void qe_snums_init(void)
{
int i;
- static const u8 snum_init_76[] = {
- 0x04, 0x05, 0x0C, 0x0D, 0x14, 0x15, 0x1C, 0x1D,
- 0x24, 0x25, 0x2C, 0x2D, 0x34, 0x35, 0x88, 0x89,
- 0x98, 0x99, 0xA8, 0xA9, 0xB8, 0xB9, 0xC8, 0xC9,
- 0xD8, 0xD9, 0xE8, 0xE9, 0x44, 0x45, 0x4C, 0x4D,
- 0x54, 0x55, 0x5C, 0x5D, 0x64, 0x65, 0x6C, 0x6D,
- 0x74, 0x75, 0x7C, 0x7D, 0x84, 0x85, 0x8C, 0x8D,
- 0x94, 0x95, 0x9C, 0x9D, 0xA4, 0xA5, 0xAC, 0xAD,
- 0xB4, 0xB5, 0xBC, 0xBD, 0xC4, 0xC5, 0xCC, 0xCD,
- 0xD4, 0xD5, 0xDC, 0xDD, 0xE4, 0xE5, 0xEC, 0xED,
- 0xF4, 0xF5, 0xFC, 0xFD,
- };
- static const u8 snum_init_46[] = {
+ static const u8 snum_init[] = {
0x04, 0x05, 0x0C, 0x0D, 0x14, 0x15, 0x1C, 0x1D,
0x24, 0x25, 0x2C, 0x2D, 0x34, 0x35, 0x88, 0x89,
0x98, 0x99, 0xA8, 0xA9, 0xB8, 0xB9, 0xC8, 0xC9,
@@ -286,15 +274,9 @@ static void qe_snums_init(void)
0x28, 0x29, 0x38, 0x39, 0x48, 0x49, 0x58, 0x59,
0x68, 0x69, 0x78, 0x79, 0x80, 0x81,
};
- static const u8 *snum_init;
qe_num_of_snum = qe_get_num_of_snums();
- if (qe_num_of_snum == 76)
- snum_init = snum_init_76;
- else
- snum_init = snum_init_46;
-
for (i = 0; i < qe_num_of_snum; i++) {
snums[i].num = snum_init[i];
snums[i].state = QE_SNUM_STATE_FREE;
diff --git a/trunk/arch/sh/include/asm/dma-mapping.h b/trunk/arch/sh/include/asm/dma-mapping.h
index 8bd965e00a15..1a73c3e759a7 100644
--- a/trunk/arch/sh/include/asm/dma-mapping.h
+++ b/trunk/arch/sh/include/asm/dma-mapping.h
@@ -52,31 +52,25 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
return dma_addr == 0;
}
-#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
-
-static inline void *dma_alloc_attrs(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t gfp,
- struct dma_attrs *attrs)
+static inline void *dma_alloc_coherent(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t gfp)
{
struct dma_map_ops *ops = get_dma_ops(dev);
void *memory;
if (dma_alloc_from_coherent(dev, size, dma_handle, &memory))
return memory;
- if (!ops->alloc)
+ if (!ops->alloc_coherent)
return NULL;
- memory = ops->alloc(dev, size, dma_handle, gfp, attrs);
+ memory = ops->alloc_coherent(dev, size, dma_handle, gfp);
debug_dma_alloc_coherent(dev, size, *dma_handle, memory);
return memory;
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *vaddr, dma_addr_t dma_handle)
{
struct dma_map_ops *ops = get_dma_ops(dev);
@@ -84,16 +78,14 @@ static inline void dma_free_attrs(struct device *dev, size_t size,
return;
debug_dma_free_coherent(dev, size, vaddr, dma_handle);
- if (ops->free)
- ops->free(dev, size, vaddr, dma_handle, attrs);
+ if (ops->free_coherent)
+ ops->free_coherent(dev, size, vaddr, dma_handle);
}
/* arch/sh/mm/consistent.c */
extern void *dma_generic_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_addr, gfp_t flag,
- struct dma_attrs *attrs);
+ dma_addr_t *dma_addr, gfp_t flag);
extern void dma_generic_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs);
+ void *vaddr, dma_addr_t dma_handle);
#endif /* __ASM_SH_DMA_MAPPING_H */
diff --git a/trunk/arch/sh/kernel/dma-nommu.c b/trunk/arch/sh/kernel/dma-nommu.c
index 5b0bfcda6d0b..3c55b87f8b63 100644
--- a/trunk/arch/sh/kernel/dma-nommu.c
+++ b/trunk/arch/sh/kernel/dma-nommu.c
@@ -63,8 +63,8 @@ static void nommu_sync_sg(struct device *dev, struct scatterlist *sg,
#endif
struct dma_map_ops nommu_dma_ops = {
- .alloc = dma_generic_alloc_coherent,
- .free = dma_generic_free_coherent,
+ .alloc_coherent = dma_generic_alloc_coherent,
+ .free_coherent = dma_generic_free_coherent,
.map_page = nommu_map_page,
.map_sg = nommu_map_sg,
#ifdef CONFIG_DMA_NONCOHERENT
diff --git a/trunk/arch/sh/mm/consistent.c b/trunk/arch/sh/mm/consistent.c
index b81d9dbf9fef..f251b5f27652 100644
--- a/trunk/arch/sh/mm/consistent.c
+++ b/trunk/arch/sh/mm/consistent.c
@@ -33,8 +33,7 @@ static int __init dma_init(void)
fs_initcall(dma_init);
void *dma_generic_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t gfp,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t gfp)
{
void *ret, *ret_nocache;
int order = get_order(size);
@@ -65,8 +64,7 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size,
}
void dma_generic_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+ void *vaddr, dma_addr_t dma_handle)
{
int order = get_order(size);
unsigned long pfn = dma_handle >> PAGE_SHIFT;
diff --git a/trunk/arch/sparc/include/asm/dma-mapping.h b/trunk/arch/sparc/include/asm/dma-mapping.h
index 48a7c65731d2..8c0e4f7bb204 100644
--- a/trunk/arch/sparc/include/asm/dma-mapping.h
+++ b/trunk/arch/sparc/include/asm/dma-mapping.h
@@ -26,30 +26,24 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev)
#include
-#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
-
-static inline void *dma_alloc_attrs(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+static inline void *dma_alloc_coherent(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t flag)
{
struct dma_map_ops *ops = get_dma_ops(dev);
void *cpu_addr;
- cpu_addr = ops->alloc(dev, size, dma_handle, flag, attrs);
+ cpu_addr = ops->alloc_coherent(dev, size, dma_handle, flag);
debug_dma_alloc_coherent(dev, size, *dma_handle, cpu_addr);
return cpu_addr;
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *cpu_addr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *cpu_addr, dma_addr_t dma_handle)
{
struct dma_map_ops *ops = get_dma_ops(dev);
debug_dma_free_coherent(dev, size, cpu_addr, dma_handle);
- ops->free(dev, size, cpu_addr, dma_handle, attrs);
+ ops->free_coherent(dev, size, cpu_addr, dma_handle);
}
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
diff --git a/trunk/arch/sparc/include/asm/pgtable_64.h b/trunk/arch/sparc/include/asm/pgtable_64.h
index 76e4a52aa85e..6fa2f7980e6b 100644
--- a/trunk/arch/sparc/include/asm/pgtable_64.h
+++ b/trunk/arch/sparc/include/asm/pgtable_64.h
@@ -12,6 +12,8 @@
* the SpitFire page tables.
*/
+#include
+
#include
#include
#include
@@ -20,8 +22,6 @@
#include
#include
-#include
-
/* The kernel image occupies 0x4000000 to 0x6000000 (4MB --> 96MB).
* The page copy blockops can use 0x6000000 to 0x8000000.
* The TSB is mapped in the 0x8000000 to 0xa000000 range.
diff --git a/trunk/arch/sparc/kernel/iommu.c b/trunk/arch/sparc/kernel/iommu.c
index 070ed141aac7..4643d68713fa 100644
--- a/trunk/arch/sparc/kernel/iommu.c
+++ b/trunk/arch/sparc/kernel/iommu.c
@@ -280,8 +280,7 @@ static inline void iommu_free_ctx(struct iommu *iommu, int ctx)
}
static void *dma_4u_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_addrp, gfp_t gfp,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_addrp, gfp_t gfp)
{
unsigned long flags, order, first_page;
struct iommu *iommu;
@@ -331,8 +330,7 @@ static void *dma_4u_alloc_coherent(struct device *dev, size_t size,
}
static void dma_4u_free_coherent(struct device *dev, size_t size,
- void *cpu, dma_addr_t dvma,
- struct dma_attrs *attrs)
+ void *cpu, dma_addr_t dvma)
{
struct iommu *iommu;
unsigned long flags, order, npages;
@@ -827,8 +825,8 @@ static void dma_4u_sync_sg_for_cpu(struct device *dev,
}
static struct dma_map_ops sun4u_dma_ops = {
- .alloc = dma_4u_alloc_coherent,
- .free = dma_4u_free_coherent,
+ .alloc_coherent = dma_4u_alloc_coherent,
+ .free_coherent = dma_4u_free_coherent,
.map_page = dma_4u_map_page,
.unmap_page = dma_4u_unmap_page,
.map_sg = dma_4u_map_sg,
diff --git a/trunk/arch/sparc/kernel/ioport.c b/trunk/arch/sparc/kernel/ioport.c
index 21bd73943f7f..d0479e2163fa 100644
--- a/trunk/arch/sparc/kernel/ioport.c
+++ b/trunk/arch/sparc/kernel/ioport.c
@@ -261,8 +261,7 @@ EXPORT_SYMBOL(sbus_set_sbus64);
* CPU may access them without any explicit flushing.
*/
static void *sbus_alloc_coherent(struct device *dev, size_t len,
- dma_addr_t *dma_addrp, gfp_t gfp,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_addrp, gfp_t gfp)
{
struct platform_device *op = to_platform_device(dev);
unsigned long len_total = PAGE_ALIGN(len);
@@ -316,7 +315,7 @@ static void *sbus_alloc_coherent(struct device *dev, size_t len,
}
static void sbus_free_coherent(struct device *dev, size_t n, void *p,
- dma_addr_t ba, struct dma_attrs *attrs)
+ dma_addr_t ba)
{
struct resource *res;
struct page *pgv;
@@ -408,8 +407,8 @@ static void sbus_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
}
struct dma_map_ops sbus_dma_ops = {
- .alloc = sbus_alloc_coherent,
- .free = sbus_free_coherent,
+ .alloc_coherent = sbus_alloc_coherent,
+ .free_coherent = sbus_free_coherent,
.map_page = sbus_map_page,
.unmap_page = sbus_unmap_page,
.map_sg = sbus_map_sg,
@@ -437,8 +436,7 @@ arch_initcall(sparc_register_ioport);
* hwdev should be valid struct pci_dev pointer for PCI devices.
*/
static void *pci32_alloc_coherent(struct device *dev, size_t len,
- dma_addr_t *pba, gfp_t gfp,
- struct dma_attrs *attrs)
+ dma_addr_t *pba, gfp_t gfp)
{
unsigned long len_total = PAGE_ALIGN(len);
void *va;
@@ -491,7 +489,7 @@ static void *pci32_alloc_coherent(struct device *dev, size_t len,
* past this call are illegal.
*/
static void pci32_free_coherent(struct device *dev, size_t n, void *p,
- dma_addr_t ba, struct dma_attrs *attrs)
+ dma_addr_t ba)
{
struct resource *res;
@@ -647,8 +645,8 @@ static void pci32_sync_sg_for_device(struct device *device, struct scatterlist *
}
struct dma_map_ops pci32_dma_ops = {
- .alloc = pci32_alloc_coherent,
- .free = pci32_free_coherent,
+ .alloc_coherent = pci32_alloc_coherent,
+ .free_coherent = pci32_free_coherent,
.map_page = pci32_map_page,
.unmap_page = pci32_unmap_page,
.map_sg = pci32_map_sg,
diff --git a/trunk/arch/sparc/kernel/leon_kernel.c b/trunk/arch/sparc/kernel/leon_kernel.c
index 35e43673c453..a19c8a063683 100644
--- a/trunk/arch/sparc/kernel/leon_kernel.c
+++ b/trunk/arch/sparc/kernel/leon_kernel.c
@@ -104,11 +104,11 @@ static int irq_choose_cpu(const struct cpumask *affinity)
{
cpumask_t mask;
- cpumask_and(&mask, cpu_online_mask, affinity);
- if (cpumask_equal(&mask, cpu_online_mask) || cpumask_empty(&mask))
+ cpus_and(mask, cpu_online_map, *affinity);
+ if (cpus_equal(mask, cpu_online_map) || cpus_empty(mask))
return boot_cpu_id;
else
- return cpumask_first(&mask);
+ return first_cpu(mask);
}
#else
#define irq_choose_cpu(affinity) boot_cpu_id
diff --git a/trunk/arch/sparc/kernel/pci_sun4v.c b/trunk/arch/sparc/kernel/pci_sun4v.c
index 7661e84a05a0..af5755d20fbe 100644
--- a/trunk/arch/sparc/kernel/pci_sun4v.c
+++ b/trunk/arch/sparc/kernel/pci_sun4v.c
@@ -128,8 +128,7 @@ static inline long iommu_batch_end(void)
}
static void *dma_4v_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_addrp, gfp_t gfp,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_addrp, gfp_t gfp)
{
unsigned long flags, order, first_page, npages, n;
struct iommu *iommu;
@@ -199,7 +198,7 @@ static void *dma_4v_alloc_coherent(struct device *dev, size_t size,
}
static void dma_4v_free_coherent(struct device *dev, size_t size, void *cpu,
- dma_addr_t dvma, struct dma_attrs *attrs)
+ dma_addr_t dvma)
{
struct pci_pbm_info *pbm;
struct iommu *iommu;
@@ -528,8 +527,8 @@ static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist,
}
static struct dma_map_ops sun4v_dma_ops = {
- .alloc = dma_4v_alloc_coherent,
- .free = dma_4v_free_coherent,
+ .alloc_coherent = dma_4v_alloc_coherent,
+ .free_coherent = dma_4v_free_coherent,
.map_page = dma_4v_map_page,
.unmap_page = dma_4v_unmap_page,
.map_sg = dma_4v_map_sg,
diff --git a/trunk/arch/tile/kernel/setup.c b/trunk/arch/tile/kernel/setup.c
index 92a94f4920ad..5f85d8b34dbb 100644
--- a/trunk/arch/tile/kernel/setup.c
+++ b/trunk/arch/tile/kernel/setup.c
@@ -1100,7 +1100,7 @@ EXPORT_SYMBOL(hash_for_home_map);
/*
* cpu_cacheable_map lists all the cpus whose caches the hypervisor can
- * flush on our behalf. It is set to cpu_possible_mask OR'ed with
+ * flush on our behalf. It is set to cpu_possible_map OR'ed with
* hash_for_home_map, and it is what should be passed to
* hv_flush_remote() to flush all caches. Note that if there are
* dedicated hypervisor driver tiles that have authorized use of their
@@ -1186,7 +1186,7 @@ static void __init setup_cpu_maps(void)
sizeof(cpu_lotar_map));
if (rc < 0) {
pr_err("warning: no HV_INQ_TILES_LOTAR; using AVAIL\n");
- cpu_lotar_map = *cpu_possible_mask;
+ cpu_lotar_map = cpu_possible_map;
}
#if CHIP_HAS_CBOX_HOME_MAP()
@@ -1196,9 +1196,9 @@ static void __init setup_cpu_maps(void)
sizeof(hash_for_home_map));
if (rc < 0)
early_panic("hv_inquire_tiles(HFH_CACHE) failed: rc %d\n", rc);
- cpumask_or(&cpu_cacheable_map, cpu_possible_mask, &hash_for_home_map);
+ cpumask_or(&cpu_cacheable_map, &cpu_possible_map, &hash_for_home_map);
#else
- cpu_cacheable_map = *cpu_possible_mask;
+ cpu_cacheable_map = cpu_possible_map;
#endif
}
diff --git a/trunk/arch/um/kernel/skas/process.c b/trunk/arch/um/kernel/skas/process.c
index 0a9e57e7446b..2e9852c0d487 100644
--- a/trunk/arch/um/kernel/skas/process.c
+++ b/trunk/arch/um/kernel/skas/process.c
@@ -41,7 +41,7 @@ static int __init start_kernel_proc(void *unused)
cpu_tasks[0].pid = pid;
cpu_tasks[0].task = current;
#ifdef CONFIG_SMP
- init_cpu_online(get_cpu_mask(0));
+ cpu_online_map = cpumask_of_cpu(0);
#endif
start_kernel();
return 0;
diff --git a/trunk/arch/um/kernel/smp.c b/trunk/arch/um/kernel/smp.c
index 6f588e160fb0..155206a66908 100644
--- a/trunk/arch/um/kernel/smp.c
+++ b/trunk/arch/um/kernel/smp.c
@@ -76,7 +76,7 @@ static int idle_proc(void *cpup)
cpu_relax();
notify_cpu_starting(cpu);
- set_cpu_online(cpu, true);
+ cpu_set(cpu, cpu_online_map);
default_idle();
return 0;
}
@@ -110,7 +110,8 @@ void smp_prepare_cpus(unsigned int maxcpus)
for (i = 0; i < ncpus; ++i)
set_cpu_possible(i, true);
- set_cpu_online(me, true);
+ cpu_clear(me, cpu_online_map);
+ cpu_set(me, cpu_online_map);
cpu_set(me, cpu_callin_map);
err = os_pipe(cpu_data[me].ipi_pipe, 1, 1);
@@ -137,13 +138,13 @@ void smp_prepare_cpus(unsigned int maxcpus)
void smp_prepare_boot_cpu(void)
{
- set_cpu_online(smp_processor_id(), true);
+ cpu_set(smp_processor_id(), cpu_online_map);
}
int __cpu_up(unsigned int cpu)
{
cpu_set(cpu, smp_commenced_mask);
- while (!cpu_online(cpu))
+ while (!cpu_isset(cpu, cpu_online_map))
mb();
return 0;
}
diff --git a/trunk/arch/unicore32/include/asm/dma-mapping.h b/trunk/arch/unicore32/include/asm/dma-mapping.h
index 366460a81796..9258e592f414 100644
--- a/trunk/arch/unicore32/include/asm/dma-mapping.h
+++ b/trunk/arch/unicore32/include/asm/dma-mapping.h
@@ -82,26 +82,20 @@ static inline int dma_set_mask(struct device *dev, u64 dma_mask)
return 0;
}
-#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
-
-static inline void *dma_alloc_attrs(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag,
- struct dma_attrs *attrs)
+static inline void *dma_alloc_coherent(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t flag)
{
struct dma_map_ops *dma_ops = get_dma_ops(dev);
- return dma_ops->alloc(dev, size, dma_handle, flag, attrs);
+ return dma_ops->alloc_coherent(dev, size, dma_handle, flag);
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *cpu_addr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *cpu_addr, dma_addr_t dma_handle)
{
struct dma_map_ops *dma_ops = get_dma_ops(dev);
- dma_ops->free(dev, size, cpu_addr, dma_handle, attrs);
+ dma_ops->free_coherent(dev, size, cpu_addr, dma_handle);
}
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
diff --git a/trunk/arch/unicore32/mm/dma-swiotlb.c b/trunk/arch/unicore32/mm/dma-swiotlb.c
index 16c08b2143a7..bfa9fbb2bbb1 100644
--- a/trunk/arch/unicore32/mm/dma-swiotlb.c
+++ b/trunk/arch/unicore32/mm/dma-swiotlb.c
@@ -17,23 +17,9 @@
#include
-static void *unicore_swiotlb_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flags,
- struct dma_attrs *attrs)
-{
- return swiotlb_alloc_coherent(dev, size, dma_handle, flags);
-}
-
-static void unicore_swiotlb_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_addr,
- struct dma_attrs *attrs)
-{
- swiotlb_free_coherent(dev, size, vaddr, dma_addr);
-}
-
struct dma_map_ops swiotlb_dma_map_ops = {
- .alloc = unicore_swiotlb_alloc_coherent,
- .free = unicore_swiotlb_free_coherent,
+ .alloc_coherent = swiotlb_alloc_coherent,
+ .free_coherent = swiotlb_free_coherent,
.map_sg = swiotlb_map_sg_attrs,
.unmap_sg = swiotlb_unmap_sg_attrs,
.dma_supported = swiotlb_dma_supported,
diff --git a/trunk/arch/x86/Makefile b/trunk/arch/x86/Makefile
index 41a7237606a3..968dbe24a255 100644
--- a/trunk/arch/x86/Makefile
+++ b/trunk/arch/x86/Makefile
@@ -129,7 +129,6 @@ KBUILD_CFLAGS += -Wno-sign-compare
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
# prevent gcc from generating any FP code by mistake
KBUILD_CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
-KBUILD_CFLAGS += $(call cc-option,-mno-avx,)
KBUILD_CFLAGS += $(mflags-y)
KBUILD_AFLAGS += $(mflags-y)
diff --git a/trunk/arch/x86/include/asm/dma-mapping.h b/trunk/arch/x86/include/asm/dma-mapping.h
index 4b4331d71935..ed3065fd6314 100644
--- a/trunk/arch/x86/include/asm/dma-mapping.h
+++ b/trunk/arch/x86/include/asm/dma-mapping.h
@@ -59,8 +59,7 @@ extern int dma_supported(struct device *hwdev, u64 mask);
extern int dma_set_mask(struct device *dev, u64 mask);
extern void *dma_generic_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_addr, gfp_t flag,
- struct dma_attrs *attrs);
+ dma_addr_t *dma_addr, gfp_t flag);
static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
{
@@ -112,11 +111,9 @@ static inline gfp_t dma_alloc_coherent_gfp_flags(struct device *dev, gfp_t gfp)
return gfp;
}
-#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
-
static inline void *
-dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
- gfp_t gfp, struct dma_attrs *attrs)
+dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
+ gfp_t gfp)
{
struct dma_map_ops *ops = get_dma_ops(dev);
void *memory;
@@ -132,21 +129,18 @@ dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
if (!is_device_dma_capable(dev))
return NULL;
- if (!ops->alloc)
+ if (!ops->alloc_coherent)
return NULL;
- memory = ops->alloc(dev, size, dma_handle,
- dma_alloc_coherent_gfp_flags(dev, gfp), attrs);
+ memory = ops->alloc_coherent(dev, size, dma_handle,
+ dma_alloc_coherent_gfp_flags(dev, gfp));
debug_dma_alloc_coherent(dev, size, *dma_handle, memory);
return memory;
}
-#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
-
-static inline void dma_free_attrs(struct device *dev, size_t size,
- void *vaddr, dma_addr_t bus,
- struct dma_attrs *attrs)
+static inline void dma_free_coherent(struct device *dev, size_t size,
+ void *vaddr, dma_addr_t bus)
{
struct dma_map_ops *ops = get_dma_ops(dev);
@@ -156,8 +150,8 @@ static inline void dma_free_attrs(struct device *dev, size_t size,
return;
debug_dma_free_coherent(dev, size, vaddr, bus);
- if (ops->free)
- ops->free(dev, size, vaddr, bus, attrs);
+ if (ops->free_coherent)
+ ops->free_coherent(dev, size, vaddr, bus);
}
#endif
diff --git a/trunk/arch/x86/include/asm/processor.h b/trunk/arch/x86/include/asm/processor.h
index 4fa7dcceb6c0..7284c9a6a0b5 100644
--- a/trunk/arch/x86/include/asm/processor.h
+++ b/trunk/arch/x86/include/asm/processor.h
@@ -974,6 +974,16 @@ extern bool cpu_has_amd_erratum(const int *);
#define cpu_has_amd_erratum(x) (false)
#endif /* CONFIG_CPU_SUP_AMD */
+#ifdef CONFIG_X86_32
+/*
+ * disable hlt during certain critical i/o operations
+ */
+#define HAVE_DISABLE_HLT
+#endif
+
+void disable_hlt(void);
+void enable_hlt(void);
+
void cpu_idle_wait(void);
extern unsigned long arch_align_stack(unsigned long sp);
diff --git a/trunk/arch/x86/kernel/amd_gart_64.c b/trunk/arch/x86/kernel/amd_gart_64.c
index e66311200cbd..b1e7c7f7a0af 100644
--- a/trunk/arch/x86/kernel/amd_gart_64.c
+++ b/trunk/arch/x86/kernel/amd_gart_64.c
@@ -477,7 +477,7 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
/* allocate and map a coherent mapping */
static void *
gart_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr,
- gfp_t flag, struct dma_attrs *attrs)
+ gfp_t flag)
{
dma_addr_t paddr;
unsigned long align_mask;
@@ -500,8 +500,7 @@ gart_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr,
}
__free_pages(page, get_order(size));
} else
- return dma_generic_alloc_coherent(dev, size, dma_addr, flag,
- attrs);
+ return dma_generic_alloc_coherent(dev, size, dma_addr, flag);
return NULL;
}
@@ -509,7 +508,7 @@ gart_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr,
/* free a coherent mapping */
static void
gart_free_coherent(struct device *dev, size_t size, void *vaddr,
- dma_addr_t dma_addr, struct dma_attrs *attrs)
+ dma_addr_t dma_addr)
{
gart_unmap_page(dev, dma_addr, size, DMA_BIDIRECTIONAL, NULL);
free_pages((unsigned long)vaddr, get_order(size));
@@ -701,8 +700,8 @@ static struct dma_map_ops gart_dma_ops = {
.unmap_sg = gart_unmap_sg,
.map_page = gart_map_page,
.unmap_page = gart_unmap_page,
- .alloc = gart_alloc_coherent,
- .free = gart_free_coherent,
+ .alloc_coherent = gart_alloc_coherent,
+ .free_coherent = gart_free_coherent,
.mapping_error = gart_mapping_error,
};
diff --git a/trunk/arch/x86/kernel/cpu/perf_event_p4.c b/trunk/arch/x86/kernel/cpu/perf_event_p4.c
index a2dfacfd7103..ef484d9d0a25 100644
--- a/trunk/arch/x86/kernel/cpu/perf_event_p4.c
+++ b/trunk/arch/x86/kernel/cpu/perf_event_p4.c
@@ -1271,17 +1271,6 @@ static int p4_pmu_schedule_events(struct cpu_hw_events *cpuc, int n, int *assign
return num ? -EINVAL : 0;
}
-PMU_FORMAT_ATTR(cccr, "config:0-31" );
-PMU_FORMAT_ATTR(escr, "config:32-62");
-PMU_FORMAT_ATTR(ht, "config:63" );
-
-static struct attribute *intel_p4_formats_attr[] = {
- &format_attr_cccr.attr,
- &format_attr_escr.attr,
- &format_attr_ht.attr,
- NULL,
-};
-
static __initconst const struct x86_pmu p4_pmu = {
.name = "Netburst P4/Xeon",
.handle_irq = p4_pmu_handle_irq,
@@ -1316,8 +1305,6 @@ static __initconst const struct x86_pmu p4_pmu = {
* the former idea is taken from OProfile code
*/
.perfctr_second_write = 1,
-
- .format_attrs = intel_p4_formats_attr,
};
__init int p4_pmu_init(void)
diff --git a/trunk/arch/x86/kernel/irq.c b/trunk/arch/x86/kernel/irq.c
index 3dafc6003b7c..7943e0c21bde 100644
--- a/trunk/arch/x86/kernel/irq.c
+++ b/trunk/arch/x86/kernel/irq.c
@@ -282,13 +282,8 @@ void fixup_irqs(void)
else if (!(warned++))
set_affinity = 0;
- /*
- * We unmask if the irq was not marked masked by the
- * core code. That respects the lazy irq disable
- * behaviour.
- */
if (!irqd_can_move_in_process_context(data) &&
- !irqd_irq_masked(data) && chip->irq_unmask)
+ !irqd_irq_disabled(data) && chip->irq_unmask)
chip->irq_unmask(data);
raw_spin_unlock(&desc->lock);
diff --git a/trunk/arch/x86/kernel/kdebugfs.c b/trunk/arch/x86/kernel/kdebugfs.c
index 1d5d31ea686b..90fcf62854bb 100644
--- a/trunk/arch/x86/kernel/kdebugfs.c
+++ b/trunk/arch/x86/kernel/kdebugfs.c
@@ -68,9 +68,16 @@ static ssize_t setup_data_read(struct file *file, char __user *user_buf,
return count;
}
+static int setup_data_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+
+ return 0;
+}
+
static const struct file_operations fops_setup_data = {
.read = setup_data_read,
- .open = simple_open,
+ .open = setup_data_open,
.llseek = default_llseek,
};
diff --git a/trunk/arch/x86/kernel/kgdb.c b/trunk/arch/x86/kernel/kgdb.c
index 8bfb6146f753..db6720edfdd0 100644
--- a/trunk/arch/x86/kernel/kgdb.c
+++ b/trunk/arch/x86/kernel/kgdb.c
@@ -43,8 +43,6 @@
#include
#include
#include
-#include
-#include
#include
#include
@@ -743,64 +741,6 @@ void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long ip)
regs->ip = ip;
}
-int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
-{
- int err;
- char opc[BREAK_INSTR_SIZE];
-
- bpt->type = BP_BREAKPOINT;
- err = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr,
- BREAK_INSTR_SIZE);
- if (err)
- return err;
- err = probe_kernel_write((char *)bpt->bpt_addr,
- arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE);
-#ifdef CONFIG_DEBUG_RODATA
- if (!err)
- return err;
- /*
- * It is safe to call text_poke() because normal kernel execution
- * is stopped on all cores, so long as the text_mutex is not locked.
- */
- if (mutex_is_locked(&text_mutex))
- return -EBUSY;
- text_poke((void *)bpt->bpt_addr, arch_kgdb_ops.gdb_bpt_instr,
- BREAK_INSTR_SIZE);
- err = probe_kernel_read(opc, (char *)bpt->bpt_addr, BREAK_INSTR_SIZE);
- if (err)
- return err;
- if (memcmp(opc, arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE))
- return -EINVAL;
- bpt->type = BP_POKE_BREAKPOINT;
-#endif /* CONFIG_DEBUG_RODATA */
- return err;
-}
-
-int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt)
-{
-#ifdef CONFIG_DEBUG_RODATA
- int err;
- char opc[BREAK_INSTR_SIZE];
-
- if (bpt->type != BP_POKE_BREAKPOINT)
- goto knl_write;
- /*
- * It is safe to call text_poke() because normal kernel execution
- * is stopped on all cores, so long as the text_mutex is not locked.
- */
- if (mutex_is_locked(&text_mutex))
- goto knl_write;
- text_poke((void *)bpt->bpt_addr, bpt->saved_instr, BREAK_INSTR_SIZE);
- err = probe_kernel_read(opc, (char *)bpt->bpt_addr, BREAK_INSTR_SIZE);
- if (err || memcmp(opc, bpt->saved_instr, BREAK_INSTR_SIZE))
- goto knl_write;
- return err;
-knl_write:
-#endif /* CONFIG_DEBUG_RODATA */
- return probe_kernel_write((char *)bpt->bpt_addr,
- (char *)bpt->saved_instr, BREAK_INSTR_SIZE);
-}
-
struct kgdb_arch arch_kgdb_ops = {
/* Breakpoint instruction: */
.gdb_bpt_instr = { 0xcc },
diff --git a/trunk/arch/x86/kernel/pci-calgary_64.c b/trunk/arch/x86/kernel/pci-calgary_64.c
index d0b2fb9ccbb1..6ac5782f4d6b 100644
--- a/trunk/arch/x86/kernel/pci-calgary_64.c
+++ b/trunk/arch/x86/kernel/pci-calgary_64.c
@@ -430,7 +430,7 @@ static void calgary_unmap_page(struct device *dev, dma_addr_t dma_addr,
}
static void* calgary_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t flag, struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flag)
{
void *ret = NULL;
dma_addr_t mapping;
@@ -463,8 +463,7 @@ static void* calgary_alloc_coherent(struct device *dev, size_t size,
}
static void calgary_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs)
+ void *vaddr, dma_addr_t dma_handle)
{
unsigned int npages;
struct iommu_table *tbl = find_iommu_table(dev);
@@ -477,8 +476,8 @@ static void calgary_free_coherent(struct device *dev, size_t size,
}
static struct dma_map_ops calgary_dma_ops = {
- .alloc = calgary_alloc_coherent,
- .free = calgary_free_coherent,
+ .alloc_coherent = calgary_alloc_coherent,
+ .free_coherent = calgary_free_coherent,
.map_sg = calgary_map_sg,
.unmap_sg = calgary_unmap_sg,
.map_page = calgary_map_page,
diff --git a/trunk/arch/x86/kernel/pci-dma.c b/trunk/arch/x86/kernel/pci-dma.c
index 3003250ac51d..28e5e06fcba4 100644
--- a/trunk/arch/x86/kernel/pci-dma.c
+++ b/trunk/arch/x86/kernel/pci-dma.c
@@ -96,8 +96,7 @@ void __init pci_iommu_alloc(void)
}
}
void *dma_generic_alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_addr, gfp_t flag,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_addr, gfp_t flag)
{
unsigned long dma_mask;
struct page *page;
diff --git a/trunk/arch/x86/kernel/pci-nommu.c b/trunk/arch/x86/kernel/pci-nommu.c
index f96050685b46..3af4af810c07 100644
--- a/trunk/arch/x86/kernel/pci-nommu.c
+++ b/trunk/arch/x86/kernel/pci-nommu.c
@@ -75,7 +75,7 @@ static int nommu_map_sg(struct device *hwdev, struct scatterlist *sg,
}
static void nommu_free_coherent(struct device *dev, size_t size, void *vaddr,
- dma_addr_t dma_addr, struct dma_attrs *attrs)
+ dma_addr_t dma_addr)
{
free_pages((unsigned long)vaddr, get_order(size));
}
@@ -96,8 +96,8 @@ static void nommu_sync_sg_for_device(struct device *dev,
}
struct dma_map_ops nommu_dma_ops = {
- .alloc = dma_generic_alloc_coherent,
- .free = nommu_free_coherent,
+ .alloc_coherent = dma_generic_alloc_coherent,
+ .free_coherent = nommu_free_coherent,
.map_sg = nommu_map_sg,
.map_page = nommu_map_page,
.sync_single_for_device = nommu_sync_single_for_device,
diff --git a/trunk/arch/x86/kernel/pci-swiotlb.c b/trunk/arch/x86/kernel/pci-swiotlb.c
index 6c483ba98b9c..8f972cbddef0 100644
--- a/trunk/arch/x86/kernel/pci-swiotlb.c
+++ b/trunk/arch/x86/kernel/pci-swiotlb.c
@@ -15,30 +15,21 @@
int swiotlb __read_mostly;
static void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
- dma_addr_t *dma_handle, gfp_t flags,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flags)
{
void *vaddr;
- vaddr = dma_generic_alloc_coherent(hwdev, size, dma_handle, flags,
- attrs);
+ vaddr = dma_generic_alloc_coherent(hwdev, size, dma_handle, flags);
if (vaddr)
return vaddr;
return swiotlb_alloc_coherent(hwdev, size, dma_handle, flags);
}
-static void x86_swiotlb_free_coherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_addr,
- struct dma_attrs *attrs)
-{
- swiotlb_free_coherent(dev, size, vaddr, dma_addr);
-}
-
static struct dma_map_ops swiotlb_dma_ops = {
.mapping_error = swiotlb_dma_mapping_error,
- .alloc = x86_swiotlb_alloc_coherent,
- .free = x86_swiotlb_free_coherent,
+ .alloc_coherent = x86_swiotlb_alloc_coherent,
+ .free_coherent = swiotlb_free_coherent,
.sync_single_for_cpu = swiotlb_sync_single_for_cpu,
.sync_single_for_device = swiotlb_sync_single_for_device,
.sync_sg_for_cpu = swiotlb_sync_sg_for_cpu,
diff --git a/trunk/arch/x86/kernel/process.c b/trunk/arch/x86/kernel/process.c
index 1d92a5ab6e8b..a33afaa5ddb7 100644
--- a/trunk/arch/x86/kernel/process.c
+++ b/trunk/arch/x86/kernel/process.c
@@ -362,10 +362,34 @@ void (*pm_idle)(void);
EXPORT_SYMBOL(pm_idle);
#endif
+#ifdef CONFIG_X86_32
+/*
+ * This halt magic was a workaround for ancient floppy DMA
+ * wreckage. It should be safe to remove.
+ */
+static int hlt_counter;
+void disable_hlt(void)
+{
+ hlt_counter++;
+}
+EXPORT_SYMBOL(disable_hlt);
+
+void enable_hlt(void)
+{
+ hlt_counter--;
+}
+EXPORT_SYMBOL(enable_hlt);
+
+static inline int hlt_use_halt(void)
+{
+ return (!hlt_counter && boot_cpu_data.hlt_works_ok);
+}
+#else
static inline int hlt_use_halt(void)
{
return 1;
}
+#endif
#ifndef CONFIG_SMP
static inline void play_dead(void)
diff --git a/trunk/arch/x86/net/bpf_jit_comp.c b/trunk/arch/x86/net/bpf_jit_comp.c
index 5a5b6e4dd738..5671752f8d9c 100644
--- a/trunk/arch/x86/net/bpf_jit_comp.c
+++ b/trunk/arch/x86/net/bpf_jit_comp.c
@@ -289,7 +289,7 @@ void bpf_jit_compile(struct sk_filter *fp)
EMIT2(0x24, K & 0xFF); /* and imm8,%al */
} else if (K >= 0xFFFF0000) {
EMIT2(0x66, 0x25); /* and imm16,%ax */
- EMIT(K, 2);
+ EMIT2(K, 2);
} else {
EMIT1_off32(0x25, K); /* and imm32,%eax */
}
diff --git a/trunk/arch/x86/power/cpu.c b/trunk/arch/x86/power/cpu.c
index 218cdb16163c..47936830968c 100644
--- a/trunk/arch/x86/power/cpu.c
+++ b/trunk/arch/x86/power/cpu.c
@@ -225,13 +225,13 @@ static void __restore_processor_state(struct saved_context *ctxt)
fix_processor_context();
do_fpu_end();
- x86_platform.restore_sched_clock_state();
mtrr_bp_restore();
}
/* Needed by apm.c */
void restore_processor_state(void)
{
+ x86_platform.restore_sched_clock_state();
__restore_processor_state(&saved_context);
}
#ifdef CONFIG_X86_32
diff --git a/trunk/arch/x86/xen/enlighten.c b/trunk/arch/x86/xen/enlighten.c
index 4f51bebac02c..b132ade26f77 100644
--- a/trunk/arch/x86/xen/enlighten.c
+++ b/trunk/arch/x86/xen/enlighten.c
@@ -967,7 +967,7 @@ void xen_setup_shared_info(void)
xen_setup_mfn_list_list();
}
-/* This is called once we have the cpu_possible_mask */
+/* This is called once we have the cpu_possible_map */
void xen_setup_vcpu_info_placement(void)
{
int cpu;
diff --git a/trunk/arch/x86/xen/pci-swiotlb-xen.c b/trunk/arch/x86/xen/pci-swiotlb-xen.c
index 967633ad98c4..b480d4207a4c 100644
--- a/trunk/arch/x86/xen/pci-swiotlb-xen.c
+++ b/trunk/arch/x86/xen/pci-swiotlb-xen.c
@@ -12,8 +12,8 @@ int xen_swiotlb __read_mostly;
static struct dma_map_ops xen_swiotlb_dma_ops = {
.mapping_error = xen_swiotlb_dma_mapping_error,
- .alloc = xen_swiotlb_alloc_coherent,
- .free = xen_swiotlb_free_coherent,
+ .alloc_coherent = xen_swiotlb_alloc_coherent,
+ .free_coherent = xen_swiotlb_free_coherent,
.sync_single_for_cpu = xen_swiotlb_sync_single_for_cpu,
.sync_single_for_device = xen_swiotlb_sync_single_for_device,
.sync_sg_for_cpu = xen_swiotlb_sync_sg_for_cpu,
diff --git a/trunk/crypto/ablkcipher.c b/trunk/crypto/ablkcipher.c
index 8d3a056ebeea..a0f768c1d9aa 100644
--- a/trunk/crypto/ablkcipher.c
+++ b/trunk/crypto/ablkcipher.c
@@ -613,7 +613,8 @@ static int crypto_givcipher_default(struct crypto_alg *alg, u32 type, u32 mask)
return err;
}
-struct crypto_alg *crypto_lookup_skcipher(const char *name, u32 type, u32 mask)
+static struct crypto_alg *crypto_lookup_skcipher(const char *name, u32 type,
+ u32 mask)
{
struct crypto_alg *alg;
@@ -651,7 +652,6 @@ struct crypto_alg *crypto_lookup_skcipher(const char *name, u32 type, u32 mask)
return ERR_PTR(crypto_givcipher_default(alg, type, mask));
}
-EXPORT_SYMBOL_GPL(crypto_lookup_skcipher);
int crypto_grab_skcipher(struct crypto_skcipher_spawn *spawn, const char *name,
u32 type, u32 mask)
diff --git a/trunk/crypto/aead.c b/trunk/crypto/aead.c
index e4cb35159be4..04add3dca6fe 100644
--- a/trunk/crypto/aead.c
+++ b/trunk/crypto/aead.c
@@ -470,7 +470,8 @@ static int crypto_nivaead_default(struct crypto_alg *alg, u32 type, u32 mask)
return err;
}
-struct crypto_alg *crypto_lookup_aead(const char *name, u32 type, u32 mask)
+static struct crypto_alg *crypto_lookup_aead(const char *name, u32 type,
+ u32 mask)
{
struct crypto_alg *alg;
@@ -502,7 +503,6 @@ struct crypto_alg *crypto_lookup_aead(const char *name, u32 type, u32 mask)
return ERR_PTR(crypto_nivaead_default(alg, type, mask));
}
-EXPORT_SYMBOL_GPL(crypto_lookup_aead);
int crypto_grab_aead(struct crypto_aead_spawn *spawn, const char *name,
u32 type, u32 mask)
diff --git a/trunk/crypto/crypto_user.c b/trunk/crypto/crypto_user.c
index f1ea0a064135..f76e42bcc6e7 100644
--- a/trunk/crypto/crypto_user.c
+++ b/trunk/crypto/crypto_user.c
@@ -21,13 +21,9 @@
#include
#include
#include
-#include
#include
#include
#include
-#include
-#include
-
#include "internal.h"
DEFINE_MUTEX(crypto_cfg_mutex);
@@ -305,60 +301,6 @@ static int crypto_del_alg(struct sk_buff *skb, struct nlmsghdr *nlh,
return crypto_unregister_instance(alg);
}
-static struct crypto_alg *crypto_user_skcipher_alg(const char *name, u32 type,
- u32 mask)
-{
- int err;
- struct crypto_alg *alg;
-
- type = crypto_skcipher_type(type);
- mask = crypto_skcipher_mask(mask);
-
- for (;;) {
- alg = crypto_lookup_skcipher(name, type, mask);
- if (!IS_ERR(alg))
- return alg;
-
- err = PTR_ERR(alg);
- if (err != -EAGAIN)
- break;
- if (signal_pending(current)) {
- err = -EINTR;
- break;
- }
- }
-
- return ERR_PTR(err);
-}
-
-static struct crypto_alg *crypto_user_aead_alg(const char *name, u32 type,
- u32 mask)
-{
- int err;
- struct crypto_alg *alg;
-
- type &= ~(CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_GENIV);
- type |= CRYPTO_ALG_TYPE_AEAD;
- mask &= ~(CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_GENIV);
- mask |= CRYPTO_ALG_TYPE_MASK;
-
- for (;;) {
- alg = crypto_lookup_aead(name, type, mask);
- if (!IS_ERR(alg))
- return alg;
-
- err = PTR_ERR(alg);
- if (err != -EAGAIN)
- break;
- if (signal_pending(current)) {
- err = -EINTR;
- break;
- }
- }
-
- return ERR_PTR(err);
-}
-
static int crypto_add_alg(struct sk_buff *skb, struct nlmsghdr *nlh,
struct nlattr **attrs)
{
@@ -383,19 +325,7 @@ static int crypto_add_alg(struct sk_buff *skb, struct nlmsghdr *nlh,
else
name = p->cru_name;
- switch (p->cru_type & p->cru_mask & CRYPTO_ALG_TYPE_MASK) {
- case CRYPTO_ALG_TYPE_AEAD:
- alg = crypto_user_aead_alg(name, p->cru_type, p->cru_mask);
- break;
- case CRYPTO_ALG_TYPE_GIVCIPHER:
- case CRYPTO_ALG_TYPE_BLKCIPHER:
- case CRYPTO_ALG_TYPE_ABLKCIPHER:
- alg = crypto_user_skcipher_alg(name, p->cru_type, p->cru_mask);
- break;
- default:
- alg = crypto_alg_mod_lookup(name, p->cru_type, p->cru_mask);
- }
-
+ alg = crypto_alg_mod_lookup(name, p->cru_type, p->cru_mask);
if (IS_ERR(alg))
return PTR_ERR(alg);
@@ -457,20 +387,12 @@ static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
if ((type == (CRYPTO_MSG_GETALG - CRYPTO_MSG_BASE) &&
(nlh->nlmsg_flags & NLM_F_DUMP))) {
- struct crypto_alg *alg;
- u16 dump_alloc = 0;
-
if (link->dump == NULL)
return -EINVAL;
-
- list_for_each_entry(alg, &crypto_alg_list, cra_list)
- dump_alloc += CRYPTO_REPORT_MAXSIZE;
-
{
struct netlink_dump_control c = {
.dump = link->dump,
.done = link->done,
- .min_dump_alloc = dump_alloc,
};
return netlink_dump_start(crypto_nlsk, skb, nlh, &c);
}
diff --git a/trunk/crypto/pcrypt.c b/trunk/crypto/pcrypt.c
index b2c99dc1c5e2..29a89dad68b6 100644
--- a/trunk/crypto/pcrypt.c
+++ b/trunk/crypto/pcrypt.c
@@ -280,11 +280,11 @@ static int pcrypt_aead_init_tfm(struct crypto_tfm *tfm)
ictx->tfm_count++;
- cpu_index = ictx->tfm_count % cpumask_weight(cpu_online_mask);
+ cpu_index = ictx->tfm_count % cpumask_weight(cpu_active_mask);
- ctx->cb_cpu = cpumask_first(cpu_online_mask);
+ ctx->cb_cpu = cpumask_first(cpu_active_mask);
for (cpu = 0; cpu < cpu_index; cpu++)
- ctx->cb_cpu = cpumask_next(ctx->cb_cpu, cpu_online_mask);
+ ctx->cb_cpu = cpumask_next(ctx->cb_cpu, cpu_active_mask);
cipher = crypto_spawn_aead(crypto_instance_ctx(inst));
@@ -472,7 +472,7 @@ static int pcrypt_init_padata(struct padata_pcrypt *pcrypt,
goto err_free_padata;
}
- cpumask_and(mask->mask, cpu_possible_mask, cpu_online_mask);
+ cpumask_and(mask->mask, cpu_possible_mask, cpu_active_mask);
rcu_assign_pointer(pcrypt->cb_cpumask, mask);
pcrypt->nblock.notifier_call = pcrypt_cpumask_change_notify;
diff --git a/trunk/drivers/Kconfig b/trunk/drivers/Kconfig
index d236aef7e59f..6f0459cb745b 100644
--- a/trunk/drivers/Kconfig
+++ b/trunk/drivers/Kconfig
@@ -50,8 +50,6 @@ source "drivers/i2c/Kconfig"
source "drivers/spi/Kconfig"
-source "drivers/hsi/Kconfig"
-
source "drivers/pps/Kconfig"
source "drivers/ptp/Kconfig"
diff --git a/trunk/drivers/Makefile b/trunk/drivers/Makefile
index 95952c82bf16..262b19d6b627 100644
--- a/trunk/drivers/Makefile
+++ b/trunk/drivers/Makefile
@@ -53,7 +53,6 @@ obj-$(CONFIG_ATA) += ata/
obj-$(CONFIG_TARGET_CORE) += target/
obj-$(CONFIG_MTD) += mtd/
obj-$(CONFIG_SPI) += spi/
-obj-y += hsi/
obj-y += net/
obj-$(CONFIG_ATM) += atm/
obj-$(CONFIG_FUSION) += message/
diff --git a/trunk/drivers/acpi/ec_sys.c b/trunk/drivers/acpi/ec_sys.c
index 7586544fddb4..b258cab9061c 100644
--- a/trunk/drivers/acpi/ec_sys.c
+++ b/trunk/drivers/acpi/ec_sys.c
@@ -27,6 +27,12 @@ MODULE_PARM_DESC(write_support, "Dangerous, reboot and removal of battery may "
static struct dentry *acpi_ec_debugfs_dir;
+static int acpi_ec_open_io(struct inode *i, struct file *f)
+{
+ f->private_data = i->i_private;
+ return 0;
+}
+
static ssize_t acpi_ec_read_io(struct file *f, char __user *buf,
size_t count, loff_t *off)
{
@@ -89,7 +95,7 @@ static ssize_t acpi_ec_write_io(struct file *f, const char __user *buf,
static const struct file_operations acpi_ec_io_ops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = acpi_ec_open_io,
.read = acpi_ec_read_io,
.write = acpi_ec_write_io,
.llseek = default_llseek,
diff --git a/trunk/drivers/base/firmware_class.c b/trunk/drivers/base/firmware_class.c
index 5401814c874d..6c9387d646ec 100644
--- a/trunk/drivers/base/firmware_class.c
+++ b/trunk/drivers/base/firmware_class.c
@@ -16,11 +16,10 @@
#include
#include
#include
-#include
+#include
#include
#include
#include
-#include
#define to_dev(obj) container_of(obj, struct device, kobj)
@@ -82,11 +81,6 @@ enum {
static int loading_timeout = 60; /* In seconds */
-static inline long firmware_loading_timeout(void)
-{
- return loading_timeout > 0 ? loading_timeout * HZ : MAX_SCHEDULE_TIMEOUT;
-}
-
/* fw_lock could be moved to 'struct firmware_priv' but since it is just
* guarding for corner cases a global lock should be OK */
static DEFINE_MUTEX(fw_lock);
@@ -446,11 +440,13 @@ fw_create_instance(struct firmware *firmware, const char *fw_name,
{
struct firmware_priv *fw_priv;
struct device *f_dev;
+ int error;
fw_priv = kzalloc(sizeof(*fw_priv) + strlen(fw_name) + 1 , GFP_KERNEL);
if (!fw_priv) {
dev_err(device, "%s: kmalloc failed\n", __func__);
- return ERR_PTR(-ENOMEM);
+ error = -ENOMEM;
+ goto err_out;
}
fw_priv->fw = firmware;
@@ -467,80 +463,98 @@ fw_create_instance(struct firmware *firmware, const char *fw_name,
f_dev->parent = device;
f_dev->class = &firmware_class;
- return fw_priv;
-}
-
-static struct firmware_priv *
-_request_firmware_prepare(const struct firmware **firmware_p, const char *name,
- struct device *device, bool uevent, bool nowait)
-{
- struct firmware *firmware;
- struct firmware_priv *fw_priv;
+ dev_set_uevent_suppress(f_dev, true);
- if (!firmware_p)
- return ERR_PTR(-EINVAL);
+ /* Need to pin this module until class device is destroyed */
+ __module_get(THIS_MODULE);
- *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
- if (!firmware) {
- dev_err(device, "%s: kmalloc(struct firmware) failed\n",
- __func__);
- return ERR_PTR(-ENOMEM);
+ error = device_add(f_dev);
+ if (error) {
+ dev_err(device, "%s: device_register failed\n", __func__);
+ goto err_put_dev;
}
- if (fw_get_builtin_firmware(firmware, name)) {
- dev_dbg(device, "firmware: using built-in firmware %s\n", name);
- return NULL;
+ error = device_create_bin_file(f_dev, &firmware_attr_data);
+ if (error) {
+ dev_err(device, "%s: sysfs_create_bin_file failed\n", __func__);
+ goto err_del_dev;
}
- fw_priv = fw_create_instance(firmware, name, device, uevent, nowait);
- if (IS_ERR(fw_priv)) {
- release_firmware(firmware);
- *firmware_p = NULL;
+ error = device_create_file(f_dev, &dev_attr_loading);
+ if (error) {
+ dev_err(device, "%s: device_create_file failed\n", __func__);
+ goto err_del_bin_attr;
}
+
+ if (uevent)
+ dev_set_uevent_suppress(f_dev, false);
+
return fw_priv;
+
+err_del_bin_attr:
+ device_remove_bin_file(f_dev, &firmware_attr_data);
+err_del_dev:
+ device_del(f_dev);
+err_put_dev:
+ put_device(f_dev);
+err_out:
+ return ERR_PTR(error);
}
-static void _request_firmware_cleanup(const struct firmware **firmware_p)
+static void fw_destroy_instance(struct firmware_priv *fw_priv)
{
- release_firmware(*firmware_p);
- *firmware_p = NULL;
+ struct device *f_dev = &fw_priv->dev;
+
+ device_remove_file(f_dev, &dev_attr_loading);
+ device_remove_bin_file(f_dev, &firmware_attr_data);
+ device_unregister(f_dev);
}
-static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
- long timeout)
+static int _request_firmware(const struct firmware **firmware_p,
+ const char *name, struct device *device,
+ bool uevent, bool nowait)
{
+ struct firmware_priv *fw_priv;
+ struct firmware *firmware;
int retval = 0;
- struct device *f_dev = &fw_priv->dev;
- dev_set_uevent_suppress(f_dev, true);
+ if (!firmware_p)
+ return -EINVAL;
- /* Need to pin this module until class device is destroyed */
- __module_get(THIS_MODULE);
+ *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
+ if (!firmware) {
+ dev_err(device, "%s: kmalloc(struct firmware) failed\n",
+ __func__);
+ return -ENOMEM;
+ }
- retval = device_add(f_dev);
- if (retval) {
- dev_err(f_dev, "%s: device_register failed\n", __func__);
- goto err_put_dev;
+ if (fw_get_builtin_firmware(firmware, name)) {
+ dev_dbg(device, "firmware: using built-in firmware %s\n", name);
+ return 0;
}
- retval = device_create_bin_file(f_dev, &firmware_attr_data);
- if (retval) {
- dev_err(f_dev, "%s: sysfs_create_bin_file failed\n", __func__);
- goto err_del_dev;
+ read_lock_usermodehelper();
+
+ if (WARN_ON(usermodehelper_is_disabled())) {
+ dev_err(device, "firmware: %s will not be loaded\n", name);
+ retval = -EBUSY;
+ goto out;
}
- retval = device_create_file(f_dev, &dev_attr_loading);
- if (retval) {
- dev_err(f_dev, "%s: device_create_file failed\n", __func__);
- goto err_del_bin_attr;
+ if (uevent)
+ dev_dbg(device, "firmware: requesting %s\n", name);
+
+ fw_priv = fw_create_instance(firmware, name, device, uevent, nowait);
+ if (IS_ERR(fw_priv)) {
+ retval = PTR_ERR(fw_priv);
+ goto out;
}
if (uevent) {
- dev_set_uevent_suppress(f_dev, false);
- dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_id);
- if (timeout != MAX_SCHEDULE_TIMEOUT)
+ if (loading_timeout > 0)
mod_timer(&fw_priv->timeout,
- round_jiffies_up(jiffies + timeout));
+ round_jiffies_up(jiffies +
+ loading_timeout * HZ));
kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD);
}
@@ -556,13 +570,16 @@ static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
fw_priv->fw = NULL;
mutex_unlock(&fw_lock);
- device_remove_file(f_dev, &dev_attr_loading);
-err_del_bin_attr:
- device_remove_bin_file(f_dev, &firmware_attr_data);
-err_del_dev:
- device_del(f_dev);
-err_put_dev:
- put_device(f_dev);
+ fw_destroy_instance(fw_priv);
+
+out:
+ read_unlock_usermodehelper();
+
+ if (retval) {
+ release_firmware(firmware);
+ *firmware_p = NULL;
+ }
+
return retval;
}
@@ -585,26 +602,7 @@ int
request_firmware(const struct firmware **firmware_p, const char *name,
struct device *device)
{
- struct firmware_priv *fw_priv;
- int ret;
-
- fw_priv = _request_firmware_prepare(firmware_p, name, device, true,
- false);
- if (IS_ERR_OR_NULL(fw_priv))
- return PTR_RET(fw_priv);
-
- ret = usermodehelper_read_trylock();
- if (WARN_ON(ret)) {
- dev_err(device, "firmware: %s will not be loaded\n", name);
- } else {
- ret = _request_firmware_load(fw_priv, true,
- firmware_loading_timeout());
- usermodehelper_read_unlock();
- }
- if (ret)
- _request_firmware_cleanup(firmware_p);
-
- return ret;
+ return _request_firmware(firmware_p, name, device, true, false);
}
/**
@@ -631,39 +629,25 @@ struct firmware_work {
bool uevent;
};
-static void request_firmware_work_func(struct work_struct *work)
+static int request_firmware_work_func(void *arg)
{
- struct firmware_work *fw_work;
+ struct firmware_work *fw_work = arg;
const struct firmware *fw;
- struct firmware_priv *fw_priv;
- long timeout;
int ret;
- fw_work = container_of(work, struct firmware_work, work);
- fw_priv = _request_firmware_prepare(&fw, fw_work->name, fw_work->device,
- fw_work->uevent, true);
- if (IS_ERR_OR_NULL(fw_priv)) {
- ret = PTR_RET(fw_priv);
- goto out;
- }
-
- timeout = usermodehelper_read_lock_wait(firmware_loading_timeout());
- if (timeout) {
- ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout);
- usermodehelper_read_unlock();
- } else {
- dev_dbg(fw_work->device, "firmware: %s loading timed out\n",
- fw_work->name);
- ret = -EAGAIN;
+ if (!arg) {
+ WARN_ON(1);
+ return 0;
}
- if (ret)
- _request_firmware_cleanup(&fw);
- out:
+ ret = _request_firmware(&fw, fw_work->name, fw_work->device,
+ fw_work->uevent, true);
fw_work->cont(fw, fw_work->context);
module_put(fw_work->module);
kfree(fw_work);
+
+ return ret;
}
/**
@@ -689,6 +673,7 @@ request_firmware_nowait(
const char *name, struct device *device, gfp_t gfp, void *context,
void (*cont)(const struct firmware *fw, void *context))
{
+ struct task_struct *task;
struct firmware_work *fw_work;
fw_work = kzalloc(sizeof (struct firmware_work), gfp);
@@ -707,8 +692,15 @@ request_firmware_nowait(
return -EFAULT;
}
- INIT_WORK(&fw_work->work, request_firmware_work_func);
- schedule_work(&fw_work->work);
+ task = kthread_run(request_firmware_work_func, fw_work,
+ "firmware/%s", name);
+ if (IS_ERR(task)) {
+ fw_work->cont(NULL, fw_work->context);
+ module_put(fw_work->module);
+ kfree(fw_work);
+ return PTR_ERR(task);
+ }
+
return 0;
}
diff --git a/trunk/drivers/base/power/runtime.c b/trunk/drivers/base/power/runtime.c
index bd0f3949bcf9..541f821d4ea6 100644
--- a/trunk/drivers/base/power/runtime.c
+++ b/trunk/drivers/base/power/runtime.c
@@ -532,8 +532,6 @@ static int rpm_suspend(struct device *dev, int rpmflags)
dev->power.suspend_time = ktime_set(0, 0);
dev->power.max_time_suspended_ns = -1;
dev->power.deferred_resume = false;
- wake_up_all(&dev->power.wait_queue);
-
if (retval == -EAGAIN || retval == -EBUSY) {
dev->power.runtime_error = 0;
@@ -549,6 +547,7 @@ static int rpm_suspend(struct device *dev, int rpmflags)
} else {
pm_runtime_cancel_pending(dev);
}
+ wake_up_all(&dev->power.wait_queue);
goto out;
}
diff --git a/trunk/drivers/base/regmap/regcache-rbtree.c b/trunk/drivers/base/regmap/regcache-rbtree.c
index fb14a6343d4f..5157fa04c2f0 100644
--- a/trunk/drivers/base/regmap/regcache-rbtree.c
+++ b/trunk/drivers/base/regmap/regcache-rbtree.c
@@ -396,7 +396,7 @@ static int regcache_rbtree_sync(struct regmap *map, unsigned int min,
map->cache_word_size);
/* Is this the hardware default? If so skip. */
- ret = regcache_lookup_reg(map, regtmp);
+ ret = regcache_lookup_reg(map, i);
if (ret >= 0 && val == map->reg_defaults[ret].def)
continue;
diff --git a/trunk/drivers/base/regmap/regmap-debugfs.c b/trunk/drivers/base/regmap/regmap-debugfs.c
index 251eb70f83e7..58517a5dac13 100644
--- a/trunk/drivers/base/regmap/regmap-debugfs.c
+++ b/trunk/drivers/base/regmap/regmap-debugfs.c
@@ -27,6 +27,12 @@ static size_t regmap_calc_reg_len(int max_val, char *buf, size_t buf_size)
return strlen(buf);
}
+static int regmap_open_file(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t regmap_name_read_file(struct file *file,
char __user *user_buf, size_t count,
loff_t *ppos)
@@ -51,7 +57,7 @@ static ssize_t regmap_name_read_file(struct file *file,
}
static const struct file_operations regmap_name_fops = {
- .open = simple_open,
+ .open = regmap_open_file,
.read = regmap_name_read_file,
.llseek = default_llseek,
};
@@ -168,7 +174,7 @@ static ssize_t regmap_map_write_file(struct file *file,
#endif
static const struct file_operations regmap_map_fops = {
- .open = simple_open,
+ .open = regmap_open_file,
.read = regmap_map_read_file,
.write = regmap_map_write_file,
.llseek = default_llseek,
@@ -237,7 +243,7 @@ static ssize_t regmap_access_read_file(struct file *file,
}
static const struct file_operations regmap_access_fops = {
- .open = simple_open,
+ .open = regmap_open_file,
.read = regmap_access_read_file,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/block/floppy.c b/trunk/drivers/block/floppy.c
index b0b00d70c166..76a08236430a 100644
--- a/trunk/drivers/block/floppy.c
+++ b/trunk/drivers/block/floppy.c
@@ -1030,6 +1030,37 @@ static int fd_wait_for_completion(unsigned long delay, timeout_fn function)
return 0;
}
+static DEFINE_SPINLOCK(floppy_hlt_lock);
+static int hlt_disabled;
+static void floppy_disable_hlt(void)
+{
+ unsigned long flags;
+
+ WARN_ONCE(1, "floppy_disable_hlt() scheduled for removal in 2012");
+ spin_lock_irqsave(&floppy_hlt_lock, flags);
+ if (!hlt_disabled) {
+ hlt_disabled = 1;
+#ifdef HAVE_DISABLE_HLT
+ disable_hlt();
+#endif
+ }
+ spin_unlock_irqrestore(&floppy_hlt_lock, flags);
+}
+
+static void floppy_enable_hlt(void)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&floppy_hlt_lock, flags);
+ if (hlt_disabled) {
+ hlt_disabled = 0;
+#ifdef HAVE_DISABLE_HLT
+ enable_hlt();
+#endif
+ }
+ spin_unlock_irqrestore(&floppy_hlt_lock, flags);
+}
+
static void setup_DMA(void)
{
unsigned long f;
@@ -1074,6 +1105,7 @@ static void setup_DMA(void)
fd_enable_dma();
release_dma_lock(f);
#endif
+ floppy_disable_hlt();
}
static void show_floppy(void);
@@ -1675,6 +1707,7 @@ irqreturn_t floppy_interrupt(int irq, void *dev_id)
fd_disable_dma();
release_dma_lock(f);
+ floppy_enable_hlt();
do_floppy = NULL;
if (fdc >= N_FDC || FDCS->address == -1) {
/* we don't even know which FDC is the culprit */
@@ -1823,6 +1856,8 @@ static void floppy_shutdown(unsigned long data)
show_floppy();
cancel_activity();
+ floppy_enable_hlt();
+
flags = claim_dma_lock();
fd_disable_dma();
release_dma_lock(flags);
@@ -4473,6 +4508,7 @@ static void floppy_release_irq_and_dma(void)
#if N_FDC > 1
set_dor(1, ~8, 0);
#endif
+ floppy_enable_hlt();
if (floppy_track_buffer && max_buffer_sectors) {
tmpsize = max_buffer_sectors * 1024;
diff --git a/trunk/drivers/bluetooth/btmrvl_debugfs.c b/trunk/drivers/bluetooth/btmrvl_debugfs.c
index 428dbb7574bd..6c20bbb54b71 100644
--- a/trunk/drivers/bluetooth/btmrvl_debugfs.c
+++ b/trunk/drivers/bluetooth/btmrvl_debugfs.c
@@ -45,6 +45,12 @@ struct btmrvl_debugfs_data {
struct dentry *txdnldready;
};
+static int btmrvl_open_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t btmrvl_hscfgcmd_write(struct file *file,
const char __user *ubuf, size_t count, loff_t *ppos)
{
@@ -87,7 +93,7 @@ static ssize_t btmrvl_hscfgcmd_read(struct file *file, char __user *userbuf,
static const struct file_operations btmrvl_hscfgcmd_fops = {
.read = btmrvl_hscfgcmd_read,
.write = btmrvl_hscfgcmd_write,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
@@ -128,7 +134,7 @@ static ssize_t btmrvl_psmode_read(struct file *file, char __user *userbuf,
static const struct file_operations btmrvl_psmode_fops = {
.read = btmrvl_psmode_read,
.write = btmrvl_psmode_write,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
@@ -174,7 +180,7 @@ static ssize_t btmrvl_pscmd_read(struct file *file, char __user *userbuf,
static const struct file_operations btmrvl_pscmd_fops = {
.read = btmrvl_pscmd_read,
.write = btmrvl_pscmd_write,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
@@ -215,7 +221,7 @@ static ssize_t btmrvl_gpiogap_read(struct file *file, char __user *userbuf,
static const struct file_operations btmrvl_gpiogap_fops = {
.read = btmrvl_gpiogap_read,
.write = btmrvl_gpiogap_write,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
@@ -259,7 +265,7 @@ static ssize_t btmrvl_hscmd_read(struct file *file, char __user *userbuf,
static const struct file_operations btmrvl_hscmd_fops = {
.read = btmrvl_hscmd_read,
.write = btmrvl_hscmd_write,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
@@ -299,7 +305,7 @@ static ssize_t btmrvl_hsmode_read(struct file *file, char __user * userbuf,
static const struct file_operations btmrvl_hsmode_fops = {
.read = btmrvl_hsmode_read,
.write = btmrvl_hsmode_write,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
@@ -317,7 +323,7 @@ static ssize_t btmrvl_curpsmode_read(struct file *file, char __user *userbuf,
static const struct file_operations btmrvl_curpsmode_fops = {
.read = btmrvl_curpsmode_read,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
@@ -335,7 +341,7 @@ static ssize_t btmrvl_psstate_read(struct file *file, char __user * userbuf,
static const struct file_operations btmrvl_psstate_fops = {
.read = btmrvl_psstate_read,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
@@ -353,7 +359,7 @@ static ssize_t btmrvl_hsstate_read(struct file *file, char __user *userbuf,
static const struct file_operations btmrvl_hsstate_fops = {
.read = btmrvl_hsstate_read,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
@@ -372,7 +378,7 @@ static ssize_t btmrvl_txdnldready_read(struct file *file, char __user *userbuf,
static const struct file_operations btmrvl_txdnldready_fops = {
.read = btmrvl_txdnldready_read,
- .open = simple_open,
+ .open = btmrvl_open_generic,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/char/agp/intel-agp.h b/trunk/drivers/char/agp/intel-agp.h
index 7ea18a5fe71c..5da67f165afa 100644
--- a/trunk/drivers/char/agp/intel-agp.h
+++ b/trunk/drivers/char/agp/intel-agp.h
@@ -234,7 +234,6 @@
#define PCI_DEVICE_ID_INTEL_IVYBRIDGE_M_GT2_IG 0x0166
#define PCI_DEVICE_ID_INTEL_IVYBRIDGE_S_HB 0x0158 /* Server */
#define PCI_DEVICE_ID_INTEL_IVYBRIDGE_S_GT1_IG 0x015A
-#define PCI_DEVICE_ID_INTEL_IVYBRIDGE_S_GT2_IG 0x016A
int intel_gmch_probe(struct pci_dev *pdev,
struct agp_bridge_data *bridge);
diff --git a/trunk/drivers/char/agp/intel-gtt.c b/trunk/drivers/char/agp/intel-gtt.c
index 7f025fb620de..5cf47ac2d401 100644
--- a/trunk/drivers/char/agp/intel-gtt.c
+++ b/trunk/drivers/char/agp/intel-gtt.c
@@ -1190,6 +1190,7 @@ static inline int needs_idle_maps(void)
{
#ifdef CONFIG_INTEL_IOMMU
const unsigned short gpu_devid = intel_private.pcidev->device;
+ extern int intel_iommu_gfx_mapped;
/* Query intel_iommu to see if we need the workaround. Presumably that
* was loaded first.
@@ -1458,8 +1459,6 @@ static const struct intel_gtt_driver_description {
"Ivybridge", &sandybridge_gtt_driver },
{ PCI_DEVICE_ID_INTEL_IVYBRIDGE_S_GT1_IG,
"Ivybridge", &sandybridge_gtt_driver },
- { PCI_DEVICE_ID_INTEL_IVYBRIDGE_S_GT2_IG,
- "Ivybridge", &sandybridge_gtt_driver },
{ 0, NULL, NULL }
};
diff --git a/trunk/drivers/char/apm-emulation.c b/trunk/drivers/char/apm-emulation.c
index 46118f845948..57501ca9204b 100644
--- a/trunk/drivers/char/apm-emulation.c
+++ b/trunk/drivers/char/apm-emulation.c
@@ -301,7 +301,7 @@ apm_ioctl(struct file *filp, u_int cmd, u_long arg)
* anything critical, chill a bit on each iteration.
*/
while (wait_event_freezable(apm_suspend_waitqueue,
- as->suspend_state != SUSPEND_ACKED))
+ as->suspend_state == SUSPEND_DONE))
msleep(10);
break;
case SUSPEND_ACKTO:
diff --git a/trunk/drivers/char/virtio_console.c b/trunk/drivers/char/virtio_console.c
index ddf86b6500b7..b58b56187065 100644
--- a/trunk/drivers/char/virtio_console.c
+++ b/trunk/drivers/char/virtio_console.c
@@ -1038,6 +1038,12 @@ static struct attribute_group port_attribute_group = {
.attrs = port_sysfs_entries,
};
+static int debugfs_open(struct inode *inode, struct file *filp)
+{
+ filp->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t debugfs_read(struct file *filp, char __user *ubuf,
size_t count, loff_t *offp)
{
@@ -1081,7 +1087,7 @@ static ssize_t debugfs_read(struct file *filp, char __user *ubuf,
static const struct file_operations port_debugfs_ops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = debugfs_open,
.read = debugfs_read,
};
diff --git a/trunk/drivers/cpufreq/db8500-cpufreq.c b/trunk/drivers/cpufreq/db8500-cpufreq.c
index 0bf1b8910eeb..a22ffa5bff9f 100644
--- a/trunk/drivers/cpufreq/db8500-cpufreq.c
+++ b/trunk/drivers/cpufreq/db8500-cpufreq.c
@@ -142,7 +142,7 @@ static int __cpuinit db8500_cpufreq_init(struct cpufreq_policy *policy)
policy->cpuinfo.transition_latency = 20 * 1000; /* in ns */
/* policy sharing between dual CPUs */
- cpumask_copy(policy->cpus, cpu_present_mask);
+ cpumask_copy(policy->cpus, &cpu_present_map);
policy->shared_type = CPUFREQ_SHARED_TYPE_ALL;
diff --git a/trunk/drivers/dma/coh901318.c b/trunk/drivers/dma/coh901318.c
index 750925f9638b..dc89455f5550 100644
--- a/trunk/drivers/dma/coh901318.c
+++ b/trunk/drivers/dma/coh901318.c
@@ -104,6 +104,13 @@ static void coh901318_list_print(struct coh901318_chan *cohc,
static struct coh901318_base *debugfs_dma_base;
static struct dentry *dma_dentry;
+static int coh901318_debugfs_open(struct inode *inode, struct file *file)
+{
+
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static int coh901318_debugfs_read(struct file *file, char __user *buf,
size_t count, loff_t *f_pos)
{
@@ -151,7 +158,7 @@ static int coh901318_debugfs_read(struct file *file, char __user *buf,
static const struct file_operations coh901318_debugfs_status_operations = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = coh901318_debugfs_open,
.read = coh901318_debugfs_read,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/dma/sa11x0-dma.c b/trunk/drivers/dma/sa11x0-dma.c
index ec78ccef9132..16a6b48883cf 100644
--- a/trunk/drivers/dma/sa11x0-dma.c
+++ b/trunk/drivers/dma/sa11x0-dma.c
@@ -585,7 +585,7 @@ static dma_cookie_t sa11x0_dma_tx_submit(struct dma_async_tx_descriptor *tx)
static struct dma_async_tx_descriptor *sa11x0_dma_prep_slave_sg(
struct dma_chan *chan, struct scatterlist *sg, unsigned int sglen,
- enum dma_transfer_direction dir, unsigned long flags, void *context)
+ enum dma_transfer_direction dir, unsigned long flags)
{
struct sa11x0_dma_chan *c = to_sa11x0_dma_chan(chan);
struct sa11x0_dma_desc *txd;
diff --git a/trunk/drivers/edac/mce_amd.c b/trunk/drivers/edac/mce_amd.c
index d0c372e30de4..36e1486eb9aa 100644
--- a/trunk/drivers/edac/mce_amd.c
+++ b/trunk/drivers/edac/mce_amd.c
@@ -754,7 +754,9 @@ static int __init mce_amd_init(void)
if (c->x86_vendor != X86_VENDOR_AMD)
return 0;
- if (c->x86 < 0xf || c->x86 > 0x15)
+ if ((c->x86 < 0xf || c->x86 > 0x12) &&
+ (c->x86 != 0x14 || c->x86_model > 0xf) &&
+ (c->x86 != 0x15 || c->x86_model > 0xf))
return 0;
fam_ops = kzalloc(sizeof(struct amd_decoder_ops), GFP_KERNEL);
@@ -795,7 +797,7 @@ static int __init mce_amd_init(void)
break;
default:
- printk(KERN_WARNING "Huh? What family is it: 0x%x?!\n", c->x86);
+ printk(KERN_WARNING "Huh? What family is that: %d?!\n", c->x86);
kfree(fam_ops);
return -EINVAL;
}
diff --git a/trunk/drivers/gpu/drm/Kconfig b/trunk/drivers/gpu/drm/Kconfig
index e354bc0b052a..cc1148837e24 100644
--- a/trunk/drivers/gpu/drm/Kconfig
+++ b/trunk/drivers/gpu/drm/Kconfig
@@ -9,7 +9,6 @@ menuconfig DRM
depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && MMU
select I2C
select I2C_ALGOBIT
- select DMA_SHARED_BUFFER
help
Kernel-level support for the Direct Rendering Infrastructure (DRI)
introduced in XFree86 4.0. If you say Y here, you need to select
diff --git a/trunk/drivers/gpu/drm/Makefile b/trunk/drivers/gpu/drm/Makefile
index c20da5bda355..a858532806ae 100644
--- a/trunk/drivers/gpu/drm/Makefile
+++ b/trunk/drivers/gpu/drm/Makefile
@@ -12,7 +12,7 @@ drm-y := drm_auth.o drm_buffer.o drm_bufs.o drm_cache.o \
drm_platform.o drm_sysfs.o drm_hashtab.o drm_mm.o \
drm_crtc.o drm_modes.o drm_edid.o \
drm_info.o drm_debugfs.o drm_encoder_slave.o \
- drm_trace_points.o drm_global.o drm_prime.o
+ drm_trace_points.o drm_global.o
drm-$(CONFIG_COMPAT) += drm_ioc32.o
diff --git a/trunk/drivers/gpu/drm/drm_drv.c b/trunk/drivers/gpu/drm/drm_drv.c
index 6116e3b75393..0b65fbc8a630 100644
--- a/trunk/drivers/gpu/drm/drm_drv.c
+++ b/trunk/drivers/gpu/drm/drm_drv.c
@@ -136,10 +136,6 @@ static struct drm_ioctl_desc drm_ioctls[] = {
DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH|DRM_UNLOCKED),
DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, DRM_CONTROL_ALLOW|DRM_UNLOCKED),
-
- DRM_IOCTL_DEF(DRM_IOCTL_PRIME_HANDLE_TO_FD, drm_prime_handle_to_fd_ioctl, DRM_AUTH|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_PRIME_FD_TO_HANDLE, drm_prime_fd_to_handle_ioctl, DRM_AUTH|DRM_UNLOCKED),
-
DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANERESOURCES, drm_mode_getplane_res, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc, DRM_CONTROL_ALLOW|DRM_UNLOCKED),
DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETCRTC, drm_mode_setcrtc, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
diff --git a/trunk/drivers/gpu/drm/drm_fb_helper.c b/trunk/drivers/gpu/drm/drm_fb_helper.c
index a0d6e894d97c..7740dd26f007 100644
--- a/trunk/drivers/gpu/drm/drm_fb_helper.c
+++ b/trunk/drivers/gpu/drm/drm_fb_helper.c
@@ -559,13 +559,9 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
return -EINVAL;
/* Need to resize the fb object !!! */
- if (var->bits_per_pixel > fb->bits_per_pixel ||
- var->xres > fb->width || var->yres > fb->height ||
- var->xres_virtual > fb->width || var->yres_virtual > fb->height) {
+ if (var->bits_per_pixel > fb->bits_per_pixel || var->xres > fb->width || var->yres > fb->height) {
DRM_DEBUG("fb userspace requested width/height/bpp is greater than current fb "
- "request %dx%d-%d (virtual %dx%d) > %dx%d-%d\n",
- var->xres, var->yres, var->bits_per_pixel,
- var->xres_virtual, var->yres_virtual,
+ "object %dx%d-%d > %dx%d-%d\n", var->xres, var->yres, var->bits_per_pixel,
fb->width, fb->height, fb->bits_per_pixel);
return -EINVAL;
}
diff --git a/trunk/drivers/gpu/drm/drm_fops.c b/trunk/drivers/gpu/drm/drm_fops.c
index cdfbf27b2b3c..7348a3dab250 100644
--- a/trunk/drivers/gpu/drm/drm_fops.c
+++ b/trunk/drivers/gpu/drm/drm_fops.c
@@ -271,9 +271,6 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
if (dev->driver->driver_features & DRIVER_GEM)
drm_gem_open(dev, priv);
- if (drm_core_check_feature(dev, DRIVER_PRIME))
- drm_prime_init_file_private(&priv->prime);
-
if (dev->driver->open) {
ret = dev->driver->open(dev, priv);
if (ret < 0)
@@ -574,10 +571,6 @@ int drm_release(struct inode *inode, struct file *filp)
if (dev->driver->postclose)
dev->driver->postclose(dev, file_priv);
-
- if (drm_core_check_feature(dev, DRIVER_PRIME))
- drm_prime_destroy_file_private(&file_priv->prime);
-
kfree(file_priv);
/* ========================================================
diff --git a/trunk/drivers/gpu/drm/drm_gem.c b/trunk/drivers/gpu/drm/drm_gem.c
index 83114b5e3cee..0ef358e53245 100644
--- a/trunk/drivers/gpu/drm/drm_gem.c
+++ b/trunk/drivers/gpu/drm/drm_gem.c
@@ -35,7 +35,6 @@
#include
#include
#include
-#include
#include "drmP.h"
/** @file drm_gem.c
@@ -233,10 +232,6 @@ drm_gem_handle_delete(struct drm_file *filp, u32 handle)
idr_remove(&filp->object_idr, handle);
spin_unlock(&filp->table_lock);
- if (obj->import_attach)
- drm_prime_remove_imported_buf_handle(&filp->prime,
- obj->import_attach->dmabuf);
-
if (dev->driver->gem_close_object)
dev->driver->gem_close_object(obj, filp);
drm_gem_object_handle_unreference_unlocked(obj);
@@ -532,10 +527,6 @@ drm_gem_object_release_handle(int id, void *ptr, void *data)
struct drm_gem_object *obj = ptr;
struct drm_device *dev = obj->dev;
- if (obj->import_attach)
- drm_prime_remove_imported_buf_handle(&file_priv->prime,
- obj->import_attach->dmabuf);
-
if (dev->driver->gem_close_object)
dev->driver->gem_close_object(obj, file_priv);
diff --git a/trunk/drivers/gpu/drm/drm_prime.c b/trunk/drivers/gpu/drm/drm_prime.c
deleted file mode 100644
index 1bdf2b54eaf6..000000000000
--- a/trunk/drivers/gpu/drm/drm_prime.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright © 2012 Red Hat
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Dave Airlie
- * Rob Clark
- *
- */
-
-#include
-#include
-#include "drmP.h"
-
-/*
- * DMA-BUF/GEM Object references and lifetime overview:
- *
- * On the export the dma_buf holds a reference to the exporting GEM
- * object. It takes this reference in handle_to_fd_ioctl, when it
- * first calls .prime_export and stores the exporting GEM object in
- * the dma_buf priv. This reference is released when the dma_buf
- * object goes away in the driver .release function.
- *
- * On the import the importing GEM object holds a reference to the
- * dma_buf (which in turn holds a ref to the exporting GEM object).
- * It takes that reference in the fd_to_handle ioctl.
- * It calls dma_buf_get, creates an attachment to it and stores the
- * attachment in the GEM object. When this attachment is destroyed
- * when the imported object is destroyed, we remove the attachment
- * and drop the reference to the dma_buf.
- *
- * Thus the chain of references always flows in one direction
- * (avoiding loops): importing_gem -> dmabuf -> exporting_gem
- *
- * Self-importing: if userspace is using PRIME as a replacement for flink
- * then it will get a fd->handle request for a GEM object that it created.
- * Drivers should detect this situation and return back the gem object
- * from the dma-buf private.
- */
-
-struct drm_prime_member {
- struct list_head entry;
- struct dma_buf *dma_buf;
- uint32_t handle;
-};
-
-int drm_gem_prime_handle_to_fd(struct drm_device *dev,
- struct drm_file *file_priv, uint32_t handle, uint32_t flags,
- int *prime_fd)
-{
- struct drm_gem_object *obj;
- void *buf;
-
- obj = drm_gem_object_lookup(dev, file_priv, handle);
- if (!obj)
- return -ENOENT;
-
- mutex_lock(&file_priv->prime.lock);
- /* re-export the original imported object */
- if (obj->import_attach) {
- get_dma_buf(obj->import_attach->dmabuf);
- *prime_fd = dma_buf_fd(obj->import_attach->dmabuf, flags);
- drm_gem_object_unreference_unlocked(obj);
- mutex_unlock(&file_priv->prime.lock);
- return 0;
- }
-
- if (obj->export_dma_buf) {
- get_dma_buf(obj->export_dma_buf);
- *prime_fd = dma_buf_fd(obj->export_dma_buf, flags);
- drm_gem_object_unreference_unlocked(obj);
- } else {
- buf = dev->driver->gem_prime_export(dev, obj, flags);
- if (IS_ERR(buf)) {
- /* normally the created dma-buf takes ownership of the ref,
- * but if that fails then drop the ref
- */
- drm_gem_object_unreference_unlocked(obj);
- mutex_unlock(&file_priv->prime.lock);
- return PTR_ERR(buf);
- }
- obj->export_dma_buf = buf;
- *prime_fd = dma_buf_fd(buf, flags);
- }
- mutex_unlock(&file_priv->prime.lock);
- return 0;
-}
-EXPORT_SYMBOL(drm_gem_prime_handle_to_fd);
-
-int drm_gem_prime_fd_to_handle(struct drm_device *dev,
- struct drm_file *file_priv, int prime_fd, uint32_t *handle)
-{
- struct dma_buf *dma_buf;
- struct drm_gem_object *obj;
- int ret;
-
- dma_buf = dma_buf_get(prime_fd);
- if (IS_ERR(dma_buf))
- return PTR_ERR(dma_buf);
-
- mutex_lock(&file_priv->prime.lock);
-
- ret = drm_prime_lookup_imported_buf_handle(&file_priv->prime,
- dma_buf, handle);
- if (!ret) {
- ret = 0;
- goto out_put;
- }
-
- /* never seen this one, need to import */
- obj = dev->driver->gem_prime_import(dev, dma_buf);
- if (IS_ERR(obj)) {
- ret = PTR_ERR(obj);
- goto out_put;
- }
-
- ret = drm_gem_handle_create(file_priv, obj, handle);
- drm_gem_object_unreference_unlocked(obj);
- if (ret)
- goto out_put;
-
- ret = drm_prime_add_imported_buf_handle(&file_priv->prime,
- dma_buf, *handle);
- if (ret)
- goto fail;
-
- mutex_unlock(&file_priv->prime.lock);
- return 0;
-
-fail:
- /* hmm, if driver attached, we are relying on the free-object path
- * to detach.. which seems ok..
- */
- drm_gem_object_handle_unreference_unlocked(obj);
-out_put:
- dma_buf_put(dma_buf);
- mutex_unlock(&file_priv->prime.lock);
- return ret;
-}
-EXPORT_SYMBOL(drm_gem_prime_fd_to_handle);
-
-int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv)
-{
- struct drm_prime_handle *args = data;
- uint32_t flags;
-
- if (!drm_core_check_feature(dev, DRIVER_PRIME))
- return -EINVAL;
-
- if (!dev->driver->prime_handle_to_fd)
- return -ENOSYS;
-
- /* check flags are valid */
- if (args->flags & ~DRM_CLOEXEC)
- return -EINVAL;
-
- /* we only want to pass DRM_CLOEXEC which is == O_CLOEXEC */
- flags = args->flags & DRM_CLOEXEC;
-
- return dev->driver->prime_handle_to_fd(dev, file_priv,
- args->handle, flags, &args->fd);
-}
-
-int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv)
-{
- struct drm_prime_handle *args = data;
-
- if (!drm_core_check_feature(dev, DRIVER_PRIME))
- return -EINVAL;
-
- if (!dev->driver->prime_fd_to_handle)
- return -ENOSYS;
-
- return dev->driver->prime_fd_to_handle(dev, file_priv,
- args->fd, &args->handle);
-}
-
-/*
- * drm_prime_pages_to_sg
- *
- * this helper creates an sg table object from a set of pages
- * the driver is responsible for mapping the pages into the
- * importers address space
- */
-struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages)
-{
- struct sg_table *sg = NULL;
- struct scatterlist *iter;
- int i;
- int ret;
-
- sg = kmalloc(sizeof(struct sg_table), GFP_KERNEL);
- if (!sg)
- goto out;
-
- ret = sg_alloc_table(sg, nr_pages, GFP_KERNEL);
- if (ret)
- goto out;
-
- for_each_sg(sg->sgl, iter, nr_pages, i)
- sg_set_page(iter, pages[i], PAGE_SIZE, 0);
-
- return sg;
-out:
- kfree(sg);
- return NULL;
-}
-EXPORT_SYMBOL(drm_prime_pages_to_sg);
-
-/* helper function to cleanup a GEM/prime object */
-void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg)
-{
- struct dma_buf_attachment *attach;
- struct dma_buf *dma_buf;
- attach = obj->import_attach;
- if (sg)
- dma_buf_unmap_attachment(attach, sg, DMA_BIDIRECTIONAL);
- dma_buf = attach->dmabuf;
- dma_buf_detach(attach->dmabuf, attach);
- /* remove the reference */
- dma_buf_put(dma_buf);
-}
-EXPORT_SYMBOL(drm_prime_gem_destroy);
-
-void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv)
-{
- INIT_LIST_HEAD(&prime_fpriv->head);
- mutex_init(&prime_fpriv->lock);
-}
-EXPORT_SYMBOL(drm_prime_init_file_private);
-
-void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv)
-{
- struct drm_prime_member *member, *safe;
- list_for_each_entry_safe(member, safe, &prime_fpriv->head, entry) {
- list_del(&member->entry);
- kfree(member);
- }
-}
-EXPORT_SYMBOL(drm_prime_destroy_file_private);
-
-int drm_prime_add_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle)
-{
- struct drm_prime_member *member;
-
- member = kmalloc(sizeof(*member), GFP_KERNEL);
- if (!member)
- return -ENOMEM;
-
- member->dma_buf = dma_buf;
- member->handle = handle;
- list_add(&member->entry, &prime_fpriv->head);
- return 0;
-}
-EXPORT_SYMBOL(drm_prime_add_imported_buf_handle);
-
-int drm_prime_lookup_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t *handle)
-{
- struct drm_prime_member *member;
-
- list_for_each_entry(member, &prime_fpriv->head, entry) {
- if (member->dma_buf == dma_buf) {
- *handle = member->handle;
- return 0;
- }
- }
- return -ENOENT;
-}
-EXPORT_SYMBOL(drm_prime_lookup_imported_buf_handle);
-
-void drm_prime_remove_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf)
-{
- struct drm_prime_member *member, *safe;
-
- mutex_lock(&prime_fpriv->lock);
- list_for_each_entry_safe(member, safe, &prime_fpriv->head, entry) {
- if (member->dma_buf == dma_buf) {
- list_del(&member->entry);
- kfree(member);
- }
- }
- mutex_unlock(&prime_fpriv->lock);
-}
-EXPORT_SYMBOL(drm_prime_remove_imported_buf_handle);
diff --git a/trunk/drivers/gpu/drm/i915/i915_debugfs.c b/trunk/drivers/gpu/drm/i915/i915_debugfs.c
index b505b70dba05..fdb7ccefffbd 100644
--- a/trunk/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/trunk/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1502,6 +1502,14 @@ static int i915_ppgtt_info(struct seq_file *m, void *data)
return 0;
}
+static int
+i915_debugfs_common_open(struct inode *inode,
+ struct file *filp)
+{
+ filp->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t
i915_wedged_read(struct file *filp,
char __user *ubuf,
@@ -1552,7 +1560,7 @@ i915_wedged_write(struct file *filp,
static const struct file_operations i915_wedged_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = i915_debugfs_common_open,
.read = i915_wedged_read,
.write = i915_wedged_write,
.llseek = default_llseek,
@@ -1614,7 +1622,7 @@ i915_max_freq_write(struct file *filp,
static const struct file_operations i915_max_freq_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = i915_debugfs_common_open,
.read = i915_max_freq_read,
.write = i915_max_freq_write,
.llseek = default_llseek,
@@ -1685,7 +1693,7 @@ i915_cache_sharing_write(struct file *filp,
static const struct file_operations i915_cache_sharing_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = i915_debugfs_common_open,
.read = i915_cache_sharing_read,
.write = i915_cache_sharing_write,
.llseek = default_llseek,
diff --git a/trunk/drivers/gpu/drm/i915/i915_dma.c b/trunk/drivers/gpu/drm/i915/i915_dma.c
index 785f67f963ef..9341eb8ce93b 100644
--- a/trunk/drivers/gpu/drm/i915/i915_dma.c
+++ b/trunk/drivers/gpu/drm/i915/i915_dma.c
@@ -1183,21 +1183,6 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
return can_switch;
}
-static bool
-intel_enable_ppgtt(struct drm_device *dev)
-{
- if (i915_enable_ppgtt >= 0)
- return i915_enable_ppgtt;
-
-#ifdef CONFIG_INTEL_IOMMU
- /* Disable ppgtt on SNB if VT-d is on. */
- if (INTEL_INFO(dev)->gen == 6 && intel_iommu_gfx_mapped)
- return false;
-#endif
-
- return true;
-}
-
static int i915_load_gem_init(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -1212,7 +1197,7 @@ static int i915_load_gem_init(struct drm_device *dev)
drm_mm_init(&dev_priv->mm.stolen, 0, prealloc_size);
mutex_lock(&dev->struct_mutex);
- if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
+ if (i915_enable_ppgtt && HAS_ALIASING_PPGTT(dev)) {
/* PPGTT pdes are stolen from global gtt ptes, so shrink the
* aperture accordingly when using aliasing ppgtt. */
gtt_size -= I915_PPGTT_PD_ENTRIES*PAGE_SIZE;
@@ -1222,10 +1207,8 @@ static int i915_load_gem_init(struct drm_device *dev)
i915_gem_do_init(dev, 0, mappable_size, gtt_size);
ret = i915_gem_init_aliasing_ppgtt(dev);
- if (ret) {
- mutex_unlock(&dev->struct_mutex);
+ if (ret)
return ret;
- }
} else {
/* Let GEM Manage all of the aperture.
*
diff --git a/trunk/drivers/gpu/drm/i915/i915_drv.c b/trunk/drivers/gpu/drm/i915/i915_drv.c
index dfa55e7478fb..1a7559b59997 100644
--- a/trunk/drivers/gpu/drm/i915/i915_drv.c
+++ b/trunk/drivers/gpu/drm/i915/i915_drv.c
@@ -66,11 +66,7 @@ MODULE_PARM_DESC(semaphores,
int i915_enable_rc6 __read_mostly = -1;
module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0600);
MODULE_PARM_DESC(i915_enable_rc6,
- "Enable power-saving render C-state 6. "
- "Different stages can be selected via bitmask values "
- "(0 = disable; 1 = enable rc6; 2 = enable deep rc6; 4 = enable deepest rc6). "
- "For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. "
- "default: -1 (use per-chip default)");
+ "Enable power-saving render C-state 6 (default: -1 (use per-chip default)");
int i915_enable_fbc __read_mostly = -1;
module_param_named(i915_enable_fbc, i915_enable_fbc, int, 0600);
@@ -107,8 +103,8 @@ MODULE_PARM_DESC(enable_hangcheck,
"WARNING: Disabling this can cause system wide hangs. "
"(default: true)");
-int i915_enable_ppgtt __read_mostly = -1;
-module_param_named(i915_enable_ppgtt, i915_enable_ppgtt, int, 0600);
+bool i915_enable_ppgtt __read_mostly = 1;
+module_param_named(i915_enable_ppgtt, i915_enable_ppgtt, bool, 0600);
MODULE_PARM_DESC(i915_enable_ppgtt,
"Enable PPGTT (default: true)");
@@ -296,7 +292,6 @@ static const struct pci_device_id pciidlist[] = { /* aka */
INTEL_VGA_DEVICE(0x0152, &intel_ivybridge_d_info), /* GT1 desktop */
INTEL_VGA_DEVICE(0x0162, &intel_ivybridge_d_info), /* GT2 desktop */
INTEL_VGA_DEVICE(0x015a, &intel_ivybridge_d_info), /* GT1 server */
- INTEL_VGA_DEVICE(0x016a, &intel_ivybridge_d_info), /* GT2 server */
{0, 0, 0}
};
@@ -538,9 +533,7 @@ static int i915_drm_thaw(struct drm_device *dev)
drm_irq_install(dev);
/* Resume the modeset for every activated CRTC */
- mutex_lock(&dev->mode_config.mutex);
drm_helper_resume_force_mode(dev);
- mutex_unlock(&dev->mode_config.mutex);
if (IS_IRONLAKE_M(dev))
ironlake_enable_rc6(dev);
diff --git a/trunk/drivers/gpu/drm/i915/i915_drv.h b/trunk/drivers/gpu/drm/i915/i915_drv.h
index 5fabc6c31fec..c0f19f572004 100644
--- a/trunk/drivers/gpu/drm/i915/i915_drv.h
+++ b/trunk/drivers/gpu/drm/i915/i915_drv.h
@@ -1053,27 +1053,6 @@ struct drm_i915_file_private {
#include "i915_trace.h"
-/**
- * RC6 is a special power stage which allows the GPU to enter an very
- * low-voltage mode when idle, using down to 0V while at this stage. This
- * stage is entered automatically when the GPU is idle when RC6 support is
- * enabled, and as soon as new workload arises GPU wakes up automatically as well.
- *
- * There are different RC6 modes available in Intel GPU, which differentiate
- * among each other with the latency required to enter and leave RC6 and
- * voltage consumed by the GPU in different states.
- *
- * The combination of the following flags define which states GPU is allowed
- * to enter, while RC6 is the normal RC6 state, RC6p is the deep RC6, and
- * RC6pp is deepest RC6. Their support by hardware varies according to the
- * GPU, BIOS, chipset and platform. RC6 is usually the safest one and the one
- * which brings the most power savings; deeper states save more power, but
- * require higher latency to switch to and wake up.
- */
-#define INTEL_RC6_ENABLE (1<<0)
-#define INTEL_RC6p_ENABLE (1<<1)
-#define INTEL_RC6pp_ENABLE (1<<2)
-
extern struct drm_ioctl_desc i915_ioctls[];
extern int i915_max_ioctl;
extern unsigned int i915_fbpercrtc __always_unused;
@@ -1086,7 +1065,7 @@ extern int i915_vbt_sdvo_panel_type __read_mostly;
extern int i915_enable_rc6 __read_mostly;
extern int i915_enable_fbc __read_mostly;
extern bool i915_enable_hangcheck __read_mostly;
-extern int i915_enable_ppgtt __read_mostly;
+extern bool i915_enable_ppgtt __read_mostly;
extern int i915_suspend(struct drm_device *dev, pm_message_t state);
extern int i915_resume(struct drm_device *dev);
diff --git a/trunk/drivers/gpu/drm/i915/i915_gem.c b/trunk/drivers/gpu/drm/i915/i915_gem.c
index 4c65c639f772..1f441f5c2405 100644
--- a/trunk/drivers/gpu/drm/i915/i915_gem.c
+++ b/trunk/drivers/gpu/drm/i915/i915_gem.c
@@ -1472,19 +1472,16 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
list_move_tail(&obj->ring_list, &ring->active_list);
obj->last_rendering_seqno = seqno;
-
if (obj->fenced_gpu_access) {
+ struct drm_i915_fence_reg *reg;
+
+ BUG_ON(obj->fence_reg == I915_FENCE_REG_NONE);
+
obj->last_fenced_seqno = seqno;
obj->last_fenced_ring = ring;
- /* Bump MRU to take account of the delayed flush */
- if (obj->fence_reg != I915_FENCE_REG_NONE) {
- struct drm_i915_fence_reg *reg;
-
- reg = &dev_priv->fence_regs[obj->fence_reg];
- list_move_tail(®->lru_list,
- &dev_priv->mm.fence_list);
- }
+ reg = &dev_priv->fence_regs[obj->fence_reg];
+ list_move_tail(®->lru_list, &dev_priv->mm.fence_list);
}
}
@@ -3757,32 +3754,12 @@ void i915_gem_init_ppgtt(struct drm_device *dev)
drm_i915_private_t *dev_priv = dev->dev_private;
uint32_t pd_offset;
struct intel_ring_buffer *ring;
- struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
- uint32_t __iomem *pd_addr;
- uint32_t pd_entry;
int i;
if (!dev_priv->mm.aliasing_ppgtt)
return;
-
- pd_addr = dev_priv->mm.gtt->gtt + ppgtt->pd_offset/sizeof(uint32_t);
- for (i = 0; i < ppgtt->num_pd_entries; i++) {
- dma_addr_t pt_addr;
-
- if (dev_priv->mm.gtt->needs_dmar)
- pt_addr = ppgtt->pt_dma_addr[i];
- else
- pt_addr = page_to_phys(ppgtt->pt_pages[i]);
-
- pd_entry = GEN6_PDE_ADDR_ENCODE(pt_addr);
- pd_entry |= GEN6_PDE_VALID;
-
- writel(pd_entry, pd_addr + i);
- }
- readl(pd_addr);
-
- pd_offset = ppgtt->pd_offset;
+ pd_offset = dev_priv->mm.aliasing_ppgtt->pd_offset;
pd_offset /= 64; /* in cachelines, */
pd_offset <<= 16;
diff --git a/trunk/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/trunk/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index f51a696486cb..81687af00893 100644
--- a/trunk/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/trunk/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -498,8 +498,8 @@ pin_and_fence_object(struct drm_i915_gem_object *obj,
if (ret)
goto err_unpin;
}
- obj->pending_fenced_gpu_access = true;
}
+ obj->pending_fenced_gpu_access = need_fence;
}
entry->offset = obj->gtt_offset;
diff --git a/trunk/drivers/gpu/drm/i915/i915_gem_gtt.c b/trunk/drivers/gpu/drm/i915/i915_gem_gtt.c
index a135c61f4119..2eacd78bb93b 100644
--- a/trunk/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/trunk/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -65,7 +65,9 @@ int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct i915_hw_ppgtt *ppgtt;
+ uint32_t pd_entry;
unsigned first_pd_entry_in_global_pt;
+ uint32_t __iomem *pd_addr;
int i;
int ret = -ENOMEM;
@@ -98,6 +100,7 @@ int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
goto err_pt_alloc;
}
+ pd_addr = dev_priv->mm.gtt->gtt + first_pd_entry_in_global_pt;
for (i = 0; i < ppgtt->num_pd_entries; i++) {
dma_addr_t pt_addr;
if (dev_priv->mm.gtt->needs_dmar) {
@@ -114,7 +117,13 @@ int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
ppgtt->pt_dma_addr[i] = pt_addr;
} else
pt_addr = page_to_phys(ppgtt->pt_pages[i]);
+
+ pd_entry = GEN6_PDE_ADDR_ENCODE(pt_addr);
+ pd_entry |= GEN6_PDE_VALID;
+
+ writel(pd_entry, pd_addr + i);
}
+ readl(pd_addr);
ppgtt->scratch_page_dma_addr = dev_priv->mm.gtt->scratch_page_dma;
diff --git a/trunk/drivers/gpu/drm/i915/i915_reg.h b/trunk/drivers/gpu/drm/i915/i915_reg.h
index 2abf4eb94039..3886cf051bac 100644
--- a/trunk/drivers/gpu/drm/i915/i915_reg.h
+++ b/trunk/drivers/gpu/drm/i915/i915_reg.h
@@ -2385,7 +2385,6 @@
#define PIPECONF_DISABLE 0
#define PIPECONF_DOUBLE_WIDE (1<<30)
#define I965_PIPECONF_ACTIVE (1<<30)
-#define PIPECONF_FRAME_START_DELAY_MASK (3<<27)
#define PIPECONF_SINGLE_WIDE 0
#define PIPECONF_PIPE_UNLOCKED 0
#define PIPECONF_PIPE_LOCKED (1<<25)
diff --git a/trunk/drivers/gpu/drm/i915/intel_bios.c b/trunk/drivers/gpu/drm/i915/intel_bios.c
index b48fc2a8410c..8168d8f8a634 100644
--- a/trunk/drivers/gpu/drm/i915/intel_bios.c
+++ b/trunk/drivers/gpu/drm/i915/intel_bios.c
@@ -24,7 +24,6 @@
* Eric Anholt
*
*/
-#include
#include
#include "drmP.h"
#include "drm.h"
@@ -622,26 +621,6 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
dev_priv->edp.bpp = 18;
}
-static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
-{
- DRM_DEBUG_KMS("Falling back to manually reading VBT from "
- "VBIOS ROM for %s\n",
- id->ident);
- return 1;
-}
-
-static const struct dmi_system_id intel_no_opregion_vbt[] = {
- {
- .callback = intel_no_opregion_vbt_callback,
- .ident = "ThinkCentre A57",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
- DMI_MATCH(DMI_PRODUCT_NAME, "97027RG"),
- },
- },
- { }
-};
-
/**
* intel_parse_bios - find VBT and initialize settings from the BIOS
* @dev: DRM device
@@ -662,7 +641,7 @@ intel_parse_bios(struct drm_device *dev)
init_vbt_defaults(dev_priv);
/* XXX Should this validation be moved to intel_opregion.c? */
- if (!dmi_check_system(intel_no_opregion_vbt) && dev_priv->opregion.vbt) {
+ if (dev_priv->opregion.vbt) {
struct vbt_header *vbt = dev_priv->opregion.vbt;
if (memcmp(vbt->signature, "$VBT", 4) == 0) {
DRM_DEBUG_KMS("Using VBT from OpRegion: %20s\n",
diff --git a/trunk/drivers/gpu/drm/i915/intel_display.c b/trunk/drivers/gpu/drm/i915/intel_display.c
index 91b35fd1db8c..d514719f65e2 100644
--- a/trunk/drivers/gpu/drm/i915/intel_display.c
+++ b/trunk/drivers/gpu/drm/i915/intel_display.c
@@ -5539,8 +5539,7 @@ void ironlake_init_pch_refclk(struct drm_device *dev)
if (intel_panel_use_ssc(dev_priv) && can_ssc) {
DRM_DEBUG_KMS("Using SSC on panel\n");
temp |= DREF_SSC1_ENABLE;
- } else
- temp &= ~DREF_SSC1_ENABLE;
+ }
/* Get SSC going before enabling the outputs */
I915_WRITE(PCH_DREF_CONTROL, temp);
@@ -7581,12 +7580,6 @@ static void intel_sanitize_modesetting(struct drm_device *dev,
struct drm_i915_private *dev_priv = dev->dev_private;
u32 reg, val;
- /* Clear any frame start delays used for debugging left by the BIOS */
- for_each_pipe(pipe) {
- reg = PIPECONF(pipe);
- I915_WRITE(reg, I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK);
- }
-
if (HAS_PCH_SPLIT(dev))
return;
@@ -8222,7 +8215,7 @@ void intel_init_emon(struct drm_device *dev)
dev_priv->corr = (lcfuse & LCFUSE_HIV_MASK);
}
-static int intel_enable_rc6(struct drm_device *dev)
+static bool intel_enable_rc6(struct drm_device *dev)
{
/*
* Respect the kernel parameter if it is set
@@ -8240,11 +8233,11 @@ static int intel_enable_rc6(struct drm_device *dev)
* Disable rc6 on Sandybridge
*/
if (INTEL_INFO(dev)->gen == 6) {
- DRM_DEBUG_DRIVER("Sandybridge: deep RC6 disabled\n");
- return INTEL_RC6_ENABLE;
+ DRM_DEBUG_DRIVER("Sandybridge: RC6 disabled\n");
+ return 0;
}
- DRM_DEBUG_DRIVER("RC6 and deep RC6 enabled\n");
- return (INTEL_RC6_ENABLE | INTEL_RC6p_ENABLE);
+ DRM_DEBUG_DRIVER("RC6 enabled\n");
+ return 1;
}
void gen6_enable_rps(struct drm_i915_private *dev_priv)
@@ -8254,7 +8247,6 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
u32 pcu_mbox, rc6_mask = 0;
u32 gtfifodbg;
int cur_freq, min_freq, max_freq;
- int rc6_mode;
int i;
/* Here begins a magic sequence of register writes to enable
@@ -8292,20 +8284,9 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
I915_WRITE(GEN6_RC6p_THRESHOLD, 100000);
I915_WRITE(GEN6_RC6pp_THRESHOLD, 64000); /* unused */
- rc6_mode = intel_enable_rc6(dev_priv->dev);
- if (rc6_mode & INTEL_RC6_ENABLE)
- rc6_mask |= GEN6_RC_CTL_RC6_ENABLE;
-
- if (rc6_mode & INTEL_RC6p_ENABLE)
- rc6_mask |= GEN6_RC_CTL_RC6p_ENABLE;
-
- if (rc6_mode & INTEL_RC6pp_ENABLE)
- rc6_mask |= GEN6_RC_CTL_RC6pp_ENABLE;
-
- DRM_INFO("Enabling RC6 states: RC6 %s, RC6p %s, RC6pp %s\n",
- (rc6_mode & INTEL_RC6_ENABLE) ? "on" : "off",
- (rc6_mode & INTEL_RC6p_ENABLE) ? "on" : "off",
- (rc6_mode & INTEL_RC6pp_ENABLE) ? "on" : "off");
+ if (intel_enable_rc6(dev_priv->dev))
+ rc6_mask = GEN6_RC_CTL_RC6_ENABLE |
+ ((IS_GEN7(dev_priv->dev)) ? GEN6_RC_CTL_RC6p_ENABLE : 0);
I915_WRITE(GEN6_RC_CONTROL,
rc6_mask |
diff --git a/trunk/drivers/gpu/drm/i915/intel_lvds.c b/trunk/drivers/gpu/drm/i915/intel_lvds.c
index 95db2e988227..c5c0973af8a1 100644
--- a/trunk/drivers/gpu/drm/i915/intel_lvds.c
+++ b/trunk/drivers/gpu/drm/i915/intel_lvds.c
@@ -755,14 +755,6 @@ static const struct dmi_system_id intel_no_lvds[] = {
DMI_MATCH(DMI_BOARD_NAME, "hp st5747"),
},
},
- {
- .callback = intel_no_lvds_dmi_callback,
- .ident = "MSI Wind Box DC500",
- .matches = {
- DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
- DMI_MATCH(DMI_BOARD_NAME, "MS-7469"),
- },
- },
{ } /* terminating entry */
};
diff --git a/trunk/drivers/gpu/drm/i915/intel_ringbuffer.c b/trunk/drivers/gpu/drm/i915/intel_ringbuffer.c
index e25581a9f60f..fc66af6a9448 100644
--- a/trunk/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/trunk/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -626,7 +626,7 @@ gen6_ring_get_seqno(struct intel_ring_buffer *ring)
/* Workaround to force correct ordering between irq and seqno writes on
* ivb (and maybe also on snb) by reading from a CS register (like
* ACTHD) before reading the status page. */
- if (IS_GEN6(dev) || IS_GEN7(dev))
+ if (IS_GEN7(dev))
intel_ring_get_active_head(ring);
return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
}
diff --git a/trunk/drivers/gpu/drm/i915/intel_sprite.c b/trunk/drivers/gpu/drm/i915/intel_sprite.c
index a464771a7240..7aa0450399a1 100644
--- a/trunk/drivers/gpu/drm/i915/intel_sprite.c
+++ b/trunk/drivers/gpu/drm/i915/intel_sprite.c
@@ -411,9 +411,6 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
old_obj = intel_plane->obj;
- src_w = src_w >> 16;
- src_h = src_h >> 16;
-
/* Pipe must be running... */
if (!(I915_READ(PIPECONF(pipe)) & PIPECONF_ENABLE))
return -EINVAL;
diff --git a/trunk/drivers/gpu/drm/nouveau/Kconfig b/trunk/drivers/gpu/drm/nouveau/Kconfig
index 97a81260485a..ca1639918f57 100644
--- a/trunk/drivers/gpu/drm/nouveau/Kconfig
+++ b/trunk/drivers/gpu/drm/nouveau/Kconfig
@@ -13,7 +13,6 @@ config DRM_NOUVEAU
select ACPI_VIDEO if ACPI && X86 && BACKLIGHT_CLASS_DEVICE && VIDEO_OUTPUT_CONTROL && INPUT
select ACPI_WMI if ACPI
select MXM_WMI if ACPI
- select POWER_SUPPLY
help
Choose this option for open-source nVidia support.
diff --git a/trunk/drivers/gpu/drm/nouveau/nouveau_bios.c b/trunk/drivers/gpu/drm/nouveau/nouveau_bios.c
index 80963d05b54a..637afe71de56 100644
--- a/trunk/drivers/gpu/drm/nouveau/nouveau_bios.c
+++ b/trunk/drivers/gpu/drm/nouveau/nouveau_bios.c
@@ -177,15 +177,14 @@ bios_shadow_pci(struct nvbios *bios)
if (!pci_enable_rom(pdev)) {
void __iomem *rom = pci_map_rom(pdev, &length);
- if (rom && length) {
+ if (rom) {
bios->data = kmalloc(length, GFP_KERNEL);
if (bios->data) {
memcpy_fromio(bios->data, rom, length);
bios->length = length;
}
- }
- if (rom)
pci_unmap_rom(pdev, rom);
+ }
pci_disable_rom(pdev);
}
diff --git a/trunk/drivers/gpu/drm/nouveau/nouveau_channel.c b/trunk/drivers/gpu/drm/nouveau/nouveau_channel.c
index 846afb0bfef4..44e6416d4a33 100644
--- a/trunk/drivers/gpu/drm/nouveau/nouveau_channel.c
+++ b/trunk/drivers/gpu/drm/nouveau/nouveau_channel.c
@@ -436,11 +436,11 @@ nouveau_ioctl_fifo_alloc(struct drm_device *dev, void *data,
}
if (dev_priv->card_type < NV_C0) {
- init->subchan[0].handle = 0x00000000;
- init->subchan[0].grclass = 0x0000;
- init->subchan[1].handle = NvSw;
- init->subchan[1].grclass = NV_SW;
- init->nr_subchan = 2;
+ init->subchan[0].handle = NvSw;
+ init->subchan[0].grclass = NV_SW;
+ init->nr_subchan = 1;
+ } else {
+ init->nr_subchan = 0;
}
/* Named memory object area */
diff --git a/trunk/drivers/gpu/drm/nouveau/nouveau_dma.h b/trunk/drivers/gpu/drm/nouveau/nouveau_dma.h
index 23d4edf992b7..bcf0fd9e313e 100644
--- a/trunk/drivers/gpu/drm/nouveau/nouveau_dma.h
+++ b/trunk/drivers/gpu/drm/nouveau/nouveau_dma.h
@@ -48,8 +48,8 @@ void nv50_dma_push(struct nouveau_channel *, struct nouveau_bo *,
/* Hardcoded object assignments to subchannels (subchannel id). */
enum {
- NvSubM2MF = 0,
- NvSubSw = 1,
+ NvSubSw = 0,
+ NvSubM2MF = 1,
NvSub2D = 2,
NvSubCtxSurf2D = 2,
NvSubGdiRect = 3,
diff --git a/trunk/drivers/gpu/drm/nouveau/nouveau_state.c b/trunk/drivers/gpu/drm/nouveau/nouveau_state.c
index c2a8511e855a..a4886b36d0fa 100644
--- a/trunk/drivers/gpu/drm/nouveau/nouveau_state.c
+++ b/trunk/drivers/gpu/drm/nouveau/nouveau_state.c
@@ -642,7 +642,7 @@ nouveau_card_channel_init(struct drm_device *dev)
OUT_RING (chan, chan->vram_handle);
OUT_RING (chan, chan->gart_handle);
} else
- if (dev_priv->card_type <= NV_D0) {
+ if (dev_priv->card_type <= NV_C0) {
ret = nouveau_gpuobj_gr_new(chan, 0x9039, 0x9039);
if (ret)
goto error;
diff --git a/trunk/drivers/gpu/drm/radeon/atom.c b/trunk/drivers/gpu/drm/radeon/atom.c
index 5ce9bf51a8de..d1bd239cd9e9 100644
--- a/trunk/drivers/gpu/drm/radeon/atom.c
+++ b/trunk/drivers/gpu/drm/radeon/atom.c
@@ -1306,11 +1306,8 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
int atom_asic_init(struct atom_context *ctx)
{
- struct radeon_device *rdev = ctx->card->dev->dev_private;
int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
- int ret;
-
memset(ps, 0, 64);
ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
@@ -1320,17 +1317,7 @@ int atom_asic_init(struct atom_context *ctx)
if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
- ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps);
- if (ret)
- return ret;
-
- memset(ps, 0, 64);
-
- if (rdev->family < CHIP_R600) {
- if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
- atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps);
- }
- return ret;
+ return atom_execute_table(ctx, ATOM_CMD_INIT, ps);
}
void atom_destroy(struct atom_context *ctx)
diff --git a/trunk/drivers/gpu/drm/radeon/atom.h b/trunk/drivers/gpu/drm/radeon/atom.h
index 25fea631dad2..93cfe2086ba0 100644
--- a/trunk/drivers/gpu/drm/radeon/atom.h
+++ b/trunk/drivers/gpu/drm/radeon/atom.h
@@ -44,7 +44,6 @@
#define ATOM_CMD_SETSCLK 0x0A
#define ATOM_CMD_SETMCLK 0x0B
#define ATOM_CMD_SETPCLK 0x0C
-#define ATOM_CMD_SPDFANCNTL 0x39
#define ATOM_DATA_FWI_PTR 0xC
#define ATOM_DATA_IIO_PTR 0x32
diff --git a/trunk/drivers/gpu/drm/radeon/radeon_object.c b/trunk/drivers/gpu/drm/radeon/radeon_object.c
index df6a4dbd93f8..6f70158d34e4 100644
--- a/trunk/drivers/gpu/drm/radeon/radeon_object.c
+++ b/trunk/drivers/gpu/drm/radeon/radeon_object.c
@@ -241,8 +241,7 @@ int radeon_bo_pin_restricted(struct radeon_bo *bo, u32 domain, u64 max_offset,
domain_start = bo->rdev->mc.vram_start;
else
domain_start = bo->rdev->mc.gtt_start;
- WARN_ON_ONCE(max_offset <
- (radeon_bo_gpu_offset(bo) - domain_start));
+ WARN_ON_ONCE((*gpu_addr - domain_start) > max_offset);
}
return 0;
diff --git a/trunk/drivers/gpu/drm/udl/udl_drv.c b/trunk/drivers/gpu/drm/udl/udl_drv.c
index 53673907a6a0..5340c5f3987b 100644
--- a/trunk/drivers/gpu/drm/udl/udl_drv.c
+++ b/trunk/drivers/gpu/drm/udl/udl_drv.c
@@ -47,7 +47,7 @@ static struct vm_operations_struct udl_gem_vm_ops = {
static const struct file_operations udl_driver_fops = {
.owner = THIS_MODULE,
.open = drm_open,
- .mmap = udl_drm_gem_mmap,
+ .mmap = drm_gem_mmap,
.poll = drm_poll,
.read = drm_read,
.unlocked_ioctl = drm_ioctl,
diff --git a/trunk/drivers/gpu/drm/udl/udl_drv.h b/trunk/drivers/gpu/drm/udl/udl_drv.h
index 96820d03a303..1612954a5bc4 100644
--- a/trunk/drivers/gpu/drm/udl/udl_drv.h
+++ b/trunk/drivers/gpu/drm/udl/udl_drv.h
@@ -121,7 +121,6 @@ struct udl_gem_object *udl_gem_alloc_object(struct drm_device *dev,
int udl_gem_vmap(struct udl_gem_object *obj);
void udl_gem_vunmap(struct udl_gem_object *obj);
-int udl_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma);
int udl_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
int udl_handle_damage(struct udl_framebuffer *fb, int x, int y,
diff --git a/trunk/drivers/gpu/drm/udl/udl_gem.c b/trunk/drivers/gpu/drm/udl/udl_gem.c
index 92f19ef329b0..852642dc1187 100644
--- a/trunk/drivers/gpu/drm/udl/udl_gem.c
+++ b/trunk/drivers/gpu/drm/udl/udl_gem.c
@@ -71,20 +71,6 @@ int udl_dumb_destroy(struct drm_file *file, struct drm_device *dev,
return drm_gem_handle_delete(file, handle);
}
-int udl_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
-{
- int ret;
-
- ret = drm_gem_mmap(filp, vma);
- if (ret)
- return ret;
-
- vma->vm_flags &= ~VM_PFNMAP;
- vma->vm_flags |= VM_MIXEDMAP;
-
- return ret;
-}
-
int udl_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
struct udl_gem_object *obj = to_udl_bo(vma->vm_private_data);
diff --git a/trunk/drivers/hid/hid-picolcd.c b/trunk/drivers/hid/hid-picolcd.c
index 45c3433f7986..12f9777c385d 100644
--- a/trunk/drivers/hid/hid-picolcd.c
+++ b/trunk/drivers/hid/hid-picolcd.c
@@ -1525,6 +1525,12 @@ static const struct file_operations picolcd_debug_reset_fops = {
/*
* The "eeprom" file
*/
+static int picolcd_debug_eeprom_open(struct inode *i, struct file *f)
+{
+ f->private_data = i->i_private;
+ return 0;
+}
+
static ssize_t picolcd_debug_eeprom_read(struct file *f, char __user *u,
size_t s, loff_t *off)
{
@@ -1612,7 +1618,7 @@ static ssize_t picolcd_debug_eeprom_write(struct file *f, const char __user *u,
*/
static const struct file_operations picolcd_debug_eeprom_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = picolcd_debug_eeprom_open,
.read = picolcd_debug_eeprom_read,
.write = picolcd_debug_eeprom_write,
.llseek = generic_file_llseek,
@@ -1621,6 +1627,12 @@ static const struct file_operations picolcd_debug_eeprom_fops = {
/*
* The "flash" file
*/
+static int picolcd_debug_flash_open(struct inode *i, struct file *f)
+{
+ f->private_data = i->i_private;
+ return 0;
+}
+
/* record a flash address to buf (bounds check to be done by caller) */
static int _picolcd_flash_setaddr(struct picolcd_data *data, u8 *buf, long off)
{
@@ -1805,7 +1817,7 @@ static ssize_t picolcd_debug_flash_write(struct file *f, const char __user *u,
*/
static const struct file_operations picolcd_debug_flash_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = picolcd_debug_flash_open,
.read = picolcd_debug_flash_read,
.write = picolcd_debug_flash_write,
.llseek = generic_file_llseek,
diff --git a/trunk/drivers/hid/hid-wiimote-debug.c b/trunk/drivers/hid/hid-wiimote-debug.c
index eec329197c16..17dabc1f339e 100644
--- a/trunk/drivers/hid/hid-wiimote-debug.c
+++ b/trunk/drivers/hid/hid-wiimote-debug.c
@@ -23,6 +23,12 @@ struct wiimote_debug {
struct dentry *drm;
};
+static int wiidebug_eeprom_open(struct inode *i, struct file *f)
+{
+ f->private_data = i->i_private;
+ return 0;
+}
+
static ssize_t wiidebug_eeprom_read(struct file *f, char __user *u, size_t s,
loff_t *off)
{
@@ -77,7 +83,7 @@ static ssize_t wiidebug_eeprom_read(struct file *f, char __user *u, size_t s,
static const struct file_operations wiidebug_eeprom_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = wiidebug_eeprom_open,
.read = wiidebug_eeprom_read,
.llseek = generic_file_llseek,
};
diff --git a/trunk/drivers/hsi/Kconfig b/trunk/drivers/hsi/Kconfig
deleted file mode 100644
index d94e38dd80c7..000000000000
--- a/trunk/drivers/hsi/Kconfig
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# HSI driver configuration
-#
-menuconfig HSI
- tristate "HSI support"
- ---help---
- The "High speed synchronous Serial Interface" is
- synchronous serial interface used mainly to connect
- application engines and cellular modems.
-
-if HSI
-
-config HSI_BOARDINFO
- bool
- default y
-
-source "drivers/hsi/clients/Kconfig"
-
-endif # HSI
diff --git a/trunk/drivers/hsi/Makefile b/trunk/drivers/hsi/Makefile
deleted file mode 100644
index 9d5d33f90de2..000000000000
--- a/trunk/drivers/hsi/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Makefile for HSI
-#
-obj-$(CONFIG_HSI_BOARDINFO) += hsi_boardinfo.o
-obj-$(CONFIG_HSI) += hsi.o
-obj-y += clients/
diff --git a/trunk/drivers/hsi/clients/Kconfig b/trunk/drivers/hsi/clients/Kconfig
deleted file mode 100644
index 3bacd275f479..000000000000
--- a/trunk/drivers/hsi/clients/Kconfig
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# HSI clients configuration
-#
-
-comment "HSI clients"
-
-config HSI_CHAR
- tristate "HSI/SSI character driver"
- depends on HSI
- ---help---
- If you say Y here, you will enable the HSI/SSI character driver.
- This driver provides a simple character device interface for
- serial communication with the cellular modem over HSI/SSI bus.
diff --git a/trunk/drivers/hsi/clients/Makefile b/trunk/drivers/hsi/clients/Makefile
deleted file mode 100644
index 327c0e27c8b0..000000000000
--- a/trunk/drivers/hsi/clients/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Makefile for HSI clients
-#
-
-obj-$(CONFIG_HSI_CHAR) += hsi_char.o
diff --git a/trunk/drivers/hsi/clients/hsi_char.c b/trunk/drivers/hsi/clients/hsi_char.c
deleted file mode 100644
index 88a050df2389..000000000000
--- a/trunk/drivers/hsi/clients/hsi_char.c
+++ /dev/null
@@ -1,802 +0,0 @@
-/*
- * HSI character device driver, implements the character device
- * interface.
- *
- * Copyright (C) 2010 Nokia Corporation. All rights reserved.
- *
- * Contact: Andras Domokos
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#define HSC_DEVS 16 /* Num of channels */
-#define HSC_MSGS 4
-
-#define HSC_RXBREAK 0
-
-#define HSC_ID_BITS 6
-#define HSC_PORT_ID_BITS 4
-#define HSC_ID_MASK 3
-#define HSC_PORT_ID_MASK 3
-#define HSC_CH_MASK 0xf
-
-/*
- * We support up to 4 controllers that can have up to 4
- * ports, which should currently be more than enough.
- */
-#define HSC_BASEMINOR(id, port_id) \
- ((((id) & HSC_ID_MASK) << HSC_ID_BITS) | \
- (((port_id) & HSC_PORT_ID_MASK) << HSC_PORT_ID_BITS))
-
-enum {
- HSC_CH_OPEN,
- HSC_CH_READ,
- HSC_CH_WRITE,
- HSC_CH_WLINE,
-};
-
-enum {
- HSC_RX,
- HSC_TX,
-};
-
-struct hsc_client_data;
-/**
- * struct hsc_channel - hsi_char internal channel data
- * @ch: channel number
- * @flags: Keeps state of the channel (open/close, reading, writing)
- * @free_msgs_list: List of free HSI messages/requests
- * @rx_msgs_queue: List of pending RX requests
- * @tx_msgs_queue: List of pending TX requests
- * @lock: Serialize access to the lists
- * @cl: reference to the associated hsi_client
- * @cl_data: reference to the client data that this channels belongs to
- * @rx_wait: RX requests wait queue
- * @tx_wait: TX requests wait queue
- */
-struct hsc_channel {
- unsigned int ch;
- unsigned long flags;
- struct list_head free_msgs_list;
- struct list_head rx_msgs_queue;
- struct list_head tx_msgs_queue;
- spinlock_t lock;
- struct hsi_client *cl;
- struct hsc_client_data *cl_data;
- wait_queue_head_t rx_wait;
- wait_queue_head_t tx_wait;
-};
-
-/**
- * struct hsc_client_data - hsi_char internal client data
- * @cdev: Characther device associated to the hsi_client
- * @lock: Lock to serialize open/close access
- * @flags: Keeps track of port state (rx hwbreak armed)
- * @usecnt: Use count for claiming the HSI port (mutex protected)
- * @cl: Referece to the HSI client
- * @channels: Array of channels accessible by the client
- */
-struct hsc_client_data {
- struct cdev cdev;
- struct mutex lock;
- unsigned long flags;
- unsigned int usecnt;
- struct hsi_client *cl;
- struct hsc_channel channels[HSC_DEVS];
-};
-
-/* Stores the major number dynamically allocated for hsi_char */
-static unsigned int hsc_major;
-/* Maximum buffer size that hsi_char will accept from userspace */
-static unsigned int max_data_size = 0x1000;
-module_param(max_data_size, uint, S_IRUSR | S_IWUSR);
-MODULE_PARM_DESC(max_data_size, "max read/write data size [4,8..65536] (^2)");
-
-static void hsc_add_tail(struct hsc_channel *channel, struct hsi_msg *msg,
- struct list_head *queue)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&channel->lock, flags);
- list_add_tail(&msg->link, queue);
- spin_unlock_irqrestore(&channel->lock, flags);
-}
-
-static struct hsi_msg *hsc_get_first_msg(struct hsc_channel *channel,
- struct list_head *queue)
-{
- struct hsi_msg *msg = NULL;
- unsigned long flags;
-
- spin_lock_irqsave(&channel->lock, flags);
-
- if (list_empty(queue))
- goto out;
-
- msg = list_first_entry(queue, struct hsi_msg, link);
- list_del(&msg->link);
-out:
- spin_unlock_irqrestore(&channel->lock, flags);
-
- return msg;
-}
-
-static inline void hsc_msg_free(struct hsi_msg *msg)
-{
- kfree(sg_virt(msg->sgt.sgl));
- hsi_free_msg(msg);
-}
-
-static void hsc_free_list(struct list_head *list)
-{
- struct hsi_msg *msg, *tmp;
-
- list_for_each_entry_safe(msg, tmp, list, link) {
- list_del(&msg->link);
- hsc_msg_free(msg);
- }
-}
-
-static void hsc_reset_list(struct hsc_channel *channel, struct list_head *l)
-{
- unsigned long flags;
- LIST_HEAD(list);
-
- spin_lock_irqsave(&channel->lock, flags);
- list_splice_init(l, &list);
- spin_unlock_irqrestore(&channel->lock, flags);
-
- hsc_free_list(&list);
-}
-
-static inline struct hsi_msg *hsc_msg_alloc(unsigned int alloc_size)
-{
- struct hsi_msg *msg;
- void *buf;
-
- msg = hsi_alloc_msg(1, GFP_KERNEL);
- if (!msg)
- goto out;
- buf = kmalloc(alloc_size, GFP_KERNEL);
- if (!buf) {
- hsi_free_msg(msg);
- goto out;
- }
- sg_init_one(msg->sgt.sgl, buf, alloc_size);
- /* Ignore false positive, due to sg pointer handling */
- kmemleak_ignore(buf);
-
- return msg;
-out:
- return NULL;
-}
-
-static inline int hsc_msgs_alloc(struct hsc_channel *channel)
-{
- struct hsi_msg *msg;
- int i;
-
- for (i = 0; i < HSC_MSGS; i++) {
- msg = hsc_msg_alloc(max_data_size);
- if (!msg)
- goto out;
- msg->channel = channel->ch;
- list_add_tail(&msg->link, &channel->free_msgs_list);
- }
-
- return 0;
-out:
- hsc_free_list(&channel->free_msgs_list);
-
- return -ENOMEM;
-}
-
-static inline unsigned int hsc_msg_len_get(struct hsi_msg *msg)
-{
- return msg->sgt.sgl->length;
-}
-
-static inline void hsc_msg_len_set(struct hsi_msg *msg, unsigned int len)
-{
- msg->sgt.sgl->length = len;
-}
-
-static void hsc_rx_completed(struct hsi_msg *msg)
-{
- struct hsc_client_data *cl_data = hsi_client_drvdata(msg->cl);
- struct hsc_channel *channel = cl_data->channels + msg->channel;
-
- if (test_bit(HSC_CH_READ, &channel->flags)) {
- hsc_add_tail(channel, msg, &channel->rx_msgs_queue);
- wake_up(&channel->rx_wait);
- } else {
- hsc_add_tail(channel, msg, &channel->free_msgs_list);
- }
-}
-
-static void hsc_rx_msg_destructor(struct hsi_msg *msg)
-{
- msg->status = HSI_STATUS_ERROR;
- hsc_msg_len_set(msg, 0);
- hsc_rx_completed(msg);
-}
-
-static void hsc_tx_completed(struct hsi_msg *msg)
-{
- struct hsc_client_data *cl_data = hsi_client_drvdata(msg->cl);
- struct hsc_channel *channel = cl_data->channels + msg->channel;
-
- if (test_bit(HSC_CH_WRITE, &channel->flags)) {
- hsc_add_tail(channel, msg, &channel->tx_msgs_queue);
- wake_up(&channel->tx_wait);
- } else {
- hsc_add_tail(channel, msg, &channel->free_msgs_list);
- }
-}
-
-static void hsc_tx_msg_destructor(struct hsi_msg *msg)
-{
- msg->status = HSI_STATUS_ERROR;
- hsc_msg_len_set(msg, 0);
- hsc_tx_completed(msg);
-}
-
-static void hsc_break_req_destructor(struct hsi_msg *msg)
-{
- struct hsc_client_data *cl_data = hsi_client_drvdata(msg->cl);
-
- hsi_free_msg(msg);
- clear_bit(HSC_RXBREAK, &cl_data->flags);
-}
-
-static void hsc_break_received(struct hsi_msg *msg)
-{
- struct hsc_client_data *cl_data = hsi_client_drvdata(msg->cl);
- struct hsc_channel *channel = cl_data->channels;
- int i, ret;
-
- /* Broadcast HWBREAK on all channels */
- for (i = 0; i < HSC_DEVS; i++, channel++) {
- struct hsi_msg *msg2;
-
- if (!test_bit(HSC_CH_READ, &channel->flags))
- continue;
- msg2 = hsc_get_first_msg(channel, &channel->free_msgs_list);
- if (!msg2)
- continue;
- clear_bit(HSC_CH_READ, &channel->flags);
- hsc_msg_len_set(msg2, 0);
- msg2->status = HSI_STATUS_COMPLETED;
- hsc_add_tail(channel, msg2, &channel->rx_msgs_queue);
- wake_up(&channel->rx_wait);
- }
- hsi_flush(msg->cl);
- ret = hsi_async_read(msg->cl, msg);
- if (ret < 0)
- hsc_break_req_destructor(msg);
-}
-
-static int hsc_break_request(struct hsi_client *cl)
-{
- struct hsc_client_data *cl_data = hsi_client_drvdata(cl);
- struct hsi_msg *msg;
- int ret;
-
- if (test_and_set_bit(HSC_RXBREAK, &cl_data->flags))
- return -EBUSY;
-
- msg = hsi_alloc_msg(0, GFP_KERNEL);
- if (!msg) {
- clear_bit(HSC_RXBREAK, &cl_data->flags);
- return -ENOMEM;
- }
- msg->break_frame = 1;
- msg->complete = hsc_break_received;
- msg->destructor = hsc_break_req_destructor;
- ret = hsi_async_read(cl, msg);
- if (ret < 0)
- hsc_break_req_destructor(msg);
-
- return ret;
-}
-
-static int hsc_break_send(struct hsi_client *cl)
-{
- struct hsi_msg *msg;
- int ret;
-
- msg = hsi_alloc_msg(0, GFP_ATOMIC);
- if (!msg)
- return -ENOMEM;
- msg->break_frame = 1;
- msg->complete = hsi_free_msg;
- msg->destructor = hsi_free_msg;
- ret = hsi_async_write(cl, msg);
- if (ret < 0)
- hsi_free_msg(msg);
-
- return ret;
-}
-
-static int hsc_rx_set(struct hsi_client *cl, struct hsc_rx_config *rxc)
-{
- struct hsi_config tmp;
- int ret;
-
- if ((rxc->mode != HSI_MODE_STREAM) && (rxc->mode != HSI_MODE_FRAME))
- return -EINVAL;
- if ((rxc->channels == 0) || (rxc->channels > HSC_DEVS))
- return -EINVAL;
- if (rxc->channels & (rxc->channels - 1))
- return -EINVAL;
- if ((rxc->flow != HSI_FLOW_SYNC) && (rxc->flow != HSI_FLOW_PIPE))
- return -EINVAL;
- tmp = cl->rx_cfg;
- cl->rx_cfg.mode = rxc->mode;
- cl->rx_cfg.channels = rxc->channels;
- cl->rx_cfg.flow = rxc->flow;
- ret = hsi_setup(cl);
- if (ret < 0) {
- cl->rx_cfg = tmp;
- return ret;
- }
- if (rxc->mode == HSI_MODE_FRAME)
- hsc_break_request(cl);
-
- return ret;
-}
-
-static inline void hsc_rx_get(struct hsi_client *cl, struct hsc_rx_config *rxc)
-{
- rxc->mode = cl->rx_cfg.mode;
- rxc->channels = cl->rx_cfg.channels;
- rxc->flow = cl->rx_cfg.flow;
-}
-
-static int hsc_tx_set(struct hsi_client *cl, struct hsc_tx_config *txc)
-{
- struct hsi_config tmp;
- int ret;
-
- if ((txc->mode != HSI_MODE_STREAM) && (txc->mode != HSI_MODE_FRAME))
- return -EINVAL;
- if ((txc->channels == 0) || (txc->channels > HSC_DEVS))
- return -EINVAL;
- if (txc->channels & (txc->channels - 1))
- return -EINVAL;
- if ((txc->arb_mode != HSI_ARB_RR) && (txc->arb_mode != HSI_ARB_PRIO))
- return -EINVAL;
- tmp = cl->tx_cfg;
- cl->tx_cfg.mode = txc->mode;
- cl->tx_cfg.channels = txc->channels;
- cl->tx_cfg.speed = txc->speed;
- cl->tx_cfg.arb_mode = txc->arb_mode;
- ret = hsi_setup(cl);
- if (ret < 0) {
- cl->tx_cfg = tmp;
- return ret;
- }
-
- return ret;
-}
-
-static inline void hsc_tx_get(struct hsi_client *cl, struct hsc_tx_config *txc)
-{
- txc->mode = cl->tx_cfg.mode;
- txc->channels = cl->tx_cfg.channels;
- txc->speed = cl->tx_cfg.speed;
- txc->arb_mode = cl->tx_cfg.arb_mode;
-}
-
-static ssize_t hsc_read(struct file *file, char __user *buf, size_t len,
- loff_t *ppos __maybe_unused)
-{
- struct hsc_channel *channel = file->private_data;
- struct hsi_msg *msg;
- ssize_t ret;
-
- if (len == 0)
- return 0;
- if (!IS_ALIGNED(len, sizeof(u32)))
- return -EINVAL;
- if (len > max_data_size)
- len = max_data_size;
- if (channel->ch >= channel->cl->rx_cfg.channels)
- return -ECHRNG;
- if (test_and_set_bit(HSC_CH_READ, &channel->flags))
- return -EBUSY;
- msg = hsc_get_first_msg(channel, &channel->free_msgs_list);
- if (!msg) {
- ret = -ENOSPC;
- goto out;
- }
- hsc_msg_len_set(msg, len);
- msg->complete = hsc_rx_completed;
- msg->destructor = hsc_rx_msg_destructor;
- ret = hsi_async_read(channel->cl, msg);
- if (ret < 0) {
- hsc_add_tail(channel, msg, &channel->free_msgs_list);
- goto out;
- }
-
- ret = wait_event_interruptible(channel->rx_wait,
- !list_empty(&channel->rx_msgs_queue));
- if (ret < 0) {
- clear_bit(HSC_CH_READ, &channel->flags);
- hsi_flush(channel->cl);
- return -EINTR;
- }
-
- msg = hsc_get_first_msg(channel, &channel->rx_msgs_queue);
- if (msg) {
- if (msg->status != HSI_STATUS_ERROR) {
- ret = copy_to_user((void __user *)buf,
- sg_virt(msg->sgt.sgl), hsc_msg_len_get(msg));
- if (ret)
- ret = -EFAULT;
- else
- ret = hsc_msg_len_get(msg);
- } else {
- ret = -EIO;
- }
- hsc_add_tail(channel, msg, &channel->free_msgs_list);
- }
-out:
- clear_bit(HSC_CH_READ, &channel->flags);
-
- return ret;
-}
-
-static ssize_t hsc_write(struct file *file, const char __user *buf, size_t len,
- loff_t *ppos __maybe_unused)
-{
- struct hsc_channel *channel = file->private_data;
- struct hsi_msg *msg;
- ssize_t ret;
-
- if ((len == 0) || !IS_ALIGNED(len, sizeof(u32)))
- return -EINVAL;
- if (len > max_data_size)
- len = max_data_size;
- if (channel->ch >= channel->cl->tx_cfg.channels)
- return -ECHRNG;
- if (test_and_set_bit(HSC_CH_WRITE, &channel->flags))
- return -EBUSY;
- msg = hsc_get_first_msg(channel, &channel->free_msgs_list);
- if (!msg) {
- clear_bit(HSC_CH_WRITE, &channel->flags);
- return -ENOSPC;
- }
- if (copy_from_user(sg_virt(msg->sgt.sgl), (void __user *)buf, len)) {
- ret = -EFAULT;
- goto out;
- }
- hsc_msg_len_set(msg, len);
- msg->complete = hsc_tx_completed;
- msg->destructor = hsc_tx_msg_destructor;
- ret = hsi_async_write(channel->cl, msg);
- if (ret < 0)
- goto out;
-
- ret = wait_event_interruptible(channel->tx_wait,
- !list_empty(&channel->tx_msgs_queue));
- if (ret < 0) {
- clear_bit(HSC_CH_WRITE, &channel->flags);
- hsi_flush(channel->cl);
- return -EINTR;
- }
-
- msg = hsc_get_first_msg(channel, &channel->tx_msgs_queue);
- if (msg) {
- if (msg->status == HSI_STATUS_ERROR)
- ret = -EIO;
- else
- ret = hsc_msg_len_get(msg);
-
- hsc_add_tail(channel, msg, &channel->free_msgs_list);
- }
-out:
- clear_bit(HSC_CH_WRITE, &channel->flags);
-
- return ret;
-}
-
-static long hsc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
-{
- struct hsc_channel *channel = file->private_data;
- unsigned int state;
- struct hsc_rx_config rxc;
- struct hsc_tx_config txc;
- long ret = 0;
-
- switch (cmd) {
- case HSC_RESET:
- hsi_flush(channel->cl);
- break;
- case HSC_SET_PM:
- if (copy_from_user(&state, (void __user *)arg, sizeof(state)))
- return -EFAULT;
- if (state == HSC_PM_DISABLE) {
- if (test_and_set_bit(HSC_CH_WLINE, &channel->flags))
- return -EINVAL;
- ret = hsi_start_tx(channel->cl);
- } else if (state == HSC_PM_ENABLE) {
- if (!test_and_clear_bit(HSC_CH_WLINE, &channel->flags))
- return -EINVAL;
- ret = hsi_stop_tx(channel->cl);
- } else {
- ret = -EINVAL;
- }
- break;
- case HSC_SEND_BREAK:
- return hsc_break_send(channel->cl);
- case HSC_SET_RX:
- if (copy_from_user(&rxc, (void __user *)arg, sizeof(rxc)))
- return -EFAULT;
- return hsc_rx_set(channel->cl, &rxc);
- case HSC_GET_RX:
- hsc_rx_get(channel->cl, &rxc);
- if (copy_to_user((void __user *)arg, &rxc, sizeof(rxc)))
- return -EFAULT;
- break;
- case HSC_SET_TX:
- if (copy_from_user(&txc, (void __user *)arg, sizeof(txc)))
- return -EFAULT;
- return hsc_tx_set(channel->cl, &txc);
- case HSC_GET_TX:
- hsc_tx_get(channel->cl, &txc);
- if (copy_to_user((void __user *)arg, &txc, sizeof(txc)))
- return -EFAULT;
- break;
- default:
- return -ENOIOCTLCMD;
- }
-
- return ret;
-}
-
-static inline void __hsc_port_release(struct hsc_client_data *cl_data)
-{
- BUG_ON(cl_data->usecnt == 0);
-
- if (--cl_data->usecnt == 0) {
- hsi_flush(cl_data->cl);
- hsi_release_port(cl_data->cl);
- }
-}
-
-static int hsc_open(struct inode *inode, struct file *file)
-{
- struct hsc_client_data *cl_data;
- struct hsc_channel *channel;
- int ret = 0;
-
- pr_debug("open, minor = %d\n", iminor(inode));
-
- cl_data = container_of(inode->i_cdev, struct hsc_client_data, cdev);
- mutex_lock(&cl_data->lock);
- channel = cl_data->channels + (iminor(inode) & HSC_CH_MASK);
-
- if (test_and_set_bit(HSC_CH_OPEN, &channel->flags)) {
- ret = -EBUSY;
- goto out;
- }
- /*
- * Check if we have already claimed the port associated to the HSI
- * client. If not then try to claim it, else increase its refcount
- */
- if (cl_data->usecnt == 0) {
- ret = hsi_claim_port(cl_data->cl, 0);
- if (ret < 0)
- goto out;
- hsi_setup(cl_data->cl);
- }
- cl_data->usecnt++;
-
- ret = hsc_msgs_alloc(channel);
- if (ret < 0) {
- __hsc_port_release(cl_data);
- goto out;
- }
-
- file->private_data = channel;
- mutex_unlock(&cl_data->lock);
-
- return ret;
-out:
- mutex_unlock(&cl_data->lock);
-
- return ret;
-}
-
-static int hsc_release(struct inode *inode __maybe_unused, struct file *file)
-{
- struct hsc_channel *channel = file->private_data;
- struct hsc_client_data *cl_data = channel->cl_data;
-
- mutex_lock(&cl_data->lock);
- file->private_data = NULL;
- if (test_and_clear_bit(HSC_CH_WLINE, &channel->flags))
- hsi_stop_tx(channel->cl);
- __hsc_port_release(cl_data);
- hsc_reset_list(channel, &channel->rx_msgs_queue);
- hsc_reset_list(channel, &channel->tx_msgs_queue);
- hsc_reset_list(channel, &channel->free_msgs_list);
- clear_bit(HSC_CH_READ, &channel->flags);
- clear_bit(HSC_CH_WRITE, &channel->flags);
- clear_bit(HSC_CH_OPEN, &channel->flags);
- wake_up(&channel->rx_wait);
- wake_up(&channel->tx_wait);
- mutex_unlock(&cl_data->lock);
-
- return 0;
-}
-
-static const struct file_operations hsc_fops = {
- .owner = THIS_MODULE,
- .read = hsc_read,
- .write = hsc_write,
- .unlocked_ioctl = hsc_ioctl,
- .open = hsc_open,
- .release = hsc_release,
-};
-
-static void __devinit hsc_channel_init(struct hsc_channel *channel)
-{
- init_waitqueue_head(&channel->rx_wait);
- init_waitqueue_head(&channel->tx_wait);
- spin_lock_init(&channel->lock);
- INIT_LIST_HEAD(&channel->free_msgs_list);
- INIT_LIST_HEAD(&channel->rx_msgs_queue);
- INIT_LIST_HEAD(&channel->tx_msgs_queue);
-}
-
-static int __devinit hsc_probe(struct device *dev)
-{
- const char devname[] = "hsi_char";
- struct hsc_client_data *cl_data;
- struct hsc_channel *channel;
- struct hsi_client *cl = to_hsi_client(dev);
- unsigned int hsc_baseminor;
- dev_t hsc_dev;
- int ret;
- int i;
-
- cl_data = kzalloc(sizeof(*cl_data), GFP_KERNEL);
- if (!cl_data) {
- dev_err(dev, "Could not allocate hsc_client_data\n");
- return -ENOMEM;
- }
- hsc_baseminor = HSC_BASEMINOR(hsi_id(cl), hsi_port_id(cl));
- if (!hsc_major) {
- ret = alloc_chrdev_region(&hsc_dev, hsc_baseminor,
- HSC_DEVS, devname);
- if (ret > 0)
- hsc_major = MAJOR(hsc_dev);
- } else {
- hsc_dev = MKDEV(hsc_major, hsc_baseminor);
- ret = register_chrdev_region(hsc_dev, HSC_DEVS, devname);
- }
- if (ret < 0) {
- dev_err(dev, "Device %s allocation failed %d\n",
- hsc_major ? "minor" : "major", ret);
- goto out1;
- }
- mutex_init(&cl_data->lock);
- hsi_client_set_drvdata(cl, cl_data);
- cdev_init(&cl_data->cdev, &hsc_fops);
- cl_data->cdev.owner = THIS_MODULE;
- cl_data->cl = cl;
- for (i = 0, channel = cl_data->channels; i < HSC_DEVS; i++, channel++) {
- hsc_channel_init(channel);
- channel->ch = i;
- channel->cl = cl;
- channel->cl_data = cl_data;
- }
-
- /* 1 hsi client -> N char devices (one for each channel) */
- ret = cdev_add(&cl_data->cdev, hsc_dev, HSC_DEVS);
- if (ret) {
- dev_err(dev, "Could not add char device %d\n", ret);
- goto out2;
- }
-
- return 0;
-out2:
- unregister_chrdev_region(hsc_dev, HSC_DEVS);
-out1:
- kfree(cl_data);
-
- return ret;
-}
-
-static int __devexit hsc_remove(struct device *dev)
-{
- struct hsi_client *cl = to_hsi_client(dev);
- struct hsc_client_data *cl_data = hsi_client_drvdata(cl);
- dev_t hsc_dev = cl_data->cdev.dev;
-
- cdev_del(&cl_data->cdev);
- unregister_chrdev_region(hsc_dev, HSC_DEVS);
- hsi_client_set_drvdata(cl, NULL);
- kfree(cl_data);
-
- return 0;
-}
-
-static struct hsi_client_driver hsc_driver = {
- .driver = {
- .name = "hsi_char",
- .owner = THIS_MODULE,
- .probe = hsc_probe,
- .remove = __devexit_p(hsc_remove),
- },
-};
-
-static int __init hsc_init(void)
-{
- int ret;
-
- if ((max_data_size < 4) || (max_data_size > 0x10000) ||
- (max_data_size & (max_data_size - 1))) {
- pr_err("Invalid max read/write data size");
- return -EINVAL;
- }
-
- ret = hsi_register_client_driver(&hsc_driver);
- if (ret) {
- pr_err("Error while registering HSI/SSI driver %d", ret);
- return ret;
- }
-
- pr_info("HSI/SSI char device loaded\n");
-
- return 0;
-}
-module_init(hsc_init);
-
-static void __exit hsc_exit(void)
-{
- hsi_unregister_client_driver(&hsc_driver);
- pr_info("HSI char device removed\n");
-}
-module_exit(hsc_exit);
-
-MODULE_AUTHOR("Andras Domokos ");
-MODULE_ALIAS("hsi:hsi_char");
-MODULE_DESCRIPTION("HSI character device");
-MODULE_LICENSE("GPL v2");
diff --git a/trunk/drivers/hsi/hsi.c b/trunk/drivers/hsi/hsi.c
deleted file mode 100644
index 4e2d79b79334..000000000000
--- a/trunk/drivers/hsi/hsi.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- * HSI core.
- *
- * Copyright (C) 2010 Nokia Corporation. All rights reserved.
- *
- * Contact: Carlos Chinea
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "hsi_core.h"
-
-static struct device_type hsi_ctrl = {
- .name = "hsi_controller",
-};
-
-static struct device_type hsi_cl = {
- .name = "hsi_client",
-};
-
-static struct device_type hsi_port = {
- .name = "hsi_port",
-};
-
-static ssize_t modalias_show(struct device *dev,
- struct device_attribute *a __maybe_unused, char *buf)
-{
- return sprintf(buf, "hsi:%s\n", dev_name(dev));
-}
-
-static struct device_attribute hsi_bus_dev_attrs[] = {
- __ATTR_RO(modalias),
- __ATTR_NULL,
-};
-
-static int hsi_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
-{
- if (dev->type == &hsi_cl)
- add_uevent_var(env, "MODALIAS=hsi:%s", dev_name(dev));
-
- return 0;
-}
-
-static int hsi_bus_match(struct device *dev, struct device_driver *driver)
-{
- return strcmp(dev_name(dev), driver->name) == 0;
-}
-
-static struct bus_type hsi_bus_type = {
- .name = "hsi",
- .dev_attrs = hsi_bus_dev_attrs,
- .match = hsi_bus_match,
- .uevent = hsi_bus_uevent,
-};
-
-static void hsi_client_release(struct device *dev)
-{
- kfree(to_hsi_client(dev));
-}
-
-static void hsi_new_client(struct hsi_port *port, struct hsi_board_info *info)
-{
- struct hsi_client *cl;
- unsigned long flags;
-
- cl = kzalloc(sizeof(*cl), GFP_KERNEL);
- if (!cl)
- return;
- cl->device.type = &hsi_cl;
- cl->tx_cfg = info->tx_cfg;
- cl->rx_cfg = info->rx_cfg;
- cl->device.bus = &hsi_bus_type;
- cl->device.parent = &port->device;
- cl->device.release = hsi_client_release;
- dev_set_name(&cl->device, info->name);
- cl->device.platform_data = info->platform_data;
- spin_lock_irqsave(&port->clock, flags);
- list_add_tail(&cl->link, &port->clients);
- spin_unlock_irqrestore(&port->clock, flags);
- if (info->archdata)
- cl->device.archdata = *info->archdata;
- if (device_register(&cl->device) < 0) {
- pr_err("hsi: failed to register client: %s\n", info->name);
- kfree(cl);
- }
-}
-
-static void hsi_scan_board_info(struct hsi_controller *hsi)
-{
- struct hsi_cl_info *cl_info;
- struct hsi_port *p;
-
- list_for_each_entry(cl_info, &hsi_board_list, list)
- if (cl_info->info.hsi_id == hsi->id) {
- p = hsi_find_port_num(hsi, cl_info->info.port);
- if (!p)
- continue;
- hsi_new_client(p, &cl_info->info);
- }
-}
-
-static int hsi_remove_client(struct device *dev, void *data __maybe_unused)
-{
- struct hsi_client *cl = to_hsi_client(dev);
- struct hsi_port *port = to_hsi_port(dev->parent);
- unsigned long flags;
-
- spin_lock_irqsave(&port->clock, flags);
- list_del(&cl->link);
- spin_unlock_irqrestore(&port->clock, flags);
- device_unregister(dev);
-
- return 0;
-}
-
-static int hsi_remove_port(struct device *dev, void *data __maybe_unused)
-{
- device_for_each_child(dev, NULL, hsi_remove_client);
- device_unregister(dev);
-
- return 0;
-}
-
-static void hsi_controller_release(struct device *dev __maybe_unused)
-{
-}
-
-static void hsi_port_release(struct device *dev __maybe_unused)
-{
-}
-
-/**
- * hsi_unregister_controller - Unregister an HSI controller
- * @hsi: The HSI controller to register
- */
-void hsi_unregister_controller(struct hsi_controller *hsi)
-{
- device_for_each_child(&hsi->device, NULL, hsi_remove_port);
- device_unregister(&hsi->device);
-}
-EXPORT_SYMBOL_GPL(hsi_unregister_controller);
-
-/**
- * hsi_register_controller - Register an HSI controller and its ports
- * @hsi: The HSI controller to register
- *
- * Returns -errno on failure, 0 on success.
- */
-int hsi_register_controller(struct hsi_controller *hsi)
-{
- unsigned int i;
- int err;
-
- hsi->device.type = &hsi_ctrl;
- hsi->device.bus = &hsi_bus_type;
- hsi->device.release = hsi_controller_release;
- err = device_register(&hsi->device);
- if (err < 0)
- return err;
- for (i = 0; i < hsi->num_ports; i++) {
- hsi->port[i].device.parent = &hsi->device;
- hsi->port[i].device.bus = &hsi_bus_type;
- hsi->port[i].device.release = hsi_port_release;
- hsi->port[i].device.type = &hsi_port;
- INIT_LIST_HEAD(&hsi->port[i].clients);
- spin_lock_init(&hsi->port[i].clock);
- err = device_register(&hsi->port[i].device);
- if (err < 0)
- goto out;
- }
- /* Populate HSI bus with HSI clients */
- hsi_scan_board_info(hsi);
-
- return 0;
-out:
- hsi_unregister_controller(hsi);
-
- return err;
-}
-EXPORT_SYMBOL_GPL(hsi_register_controller);
-
-/**
- * hsi_register_client_driver - Register an HSI client to the HSI bus
- * @drv: HSI client driver to register
- *
- * Returns -errno on failure, 0 on success.
- */
-int hsi_register_client_driver(struct hsi_client_driver *drv)
-{
- drv->driver.bus = &hsi_bus_type;
-
- return driver_register(&drv->driver);
-}
-EXPORT_SYMBOL_GPL(hsi_register_client_driver);
-
-static inline int hsi_dummy_msg(struct hsi_msg *msg __maybe_unused)
-{
- return 0;
-}
-
-static inline int hsi_dummy_cl(struct hsi_client *cl __maybe_unused)
-{
- return 0;
-}
-
-/**
- * hsi_alloc_controller - Allocate an HSI controller and its ports
- * @n_ports: Number of ports on the HSI controller
- * @flags: Kernel allocation flags
- *
- * Return NULL on failure or a pointer to an hsi_controller on success.
- */
-struct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags)
-{
- struct hsi_controller *hsi;
- struct hsi_port *port;
- unsigned int i;
-
- if (!n_ports)
- return NULL;
-
- port = kzalloc(sizeof(*port)*n_ports, flags);
- if (!port)
- return NULL;
- hsi = kzalloc(sizeof(*hsi), flags);
- if (!hsi)
- goto out;
- for (i = 0; i < n_ports; i++) {
- dev_set_name(&port[i].device, "port%d", i);
- port[i].num = i;
- port[i].async = hsi_dummy_msg;
- port[i].setup = hsi_dummy_cl;
- port[i].flush = hsi_dummy_cl;
- port[i].start_tx = hsi_dummy_cl;
- port[i].stop_tx = hsi_dummy_cl;
- port[i].release = hsi_dummy_cl;
- mutex_init(&port[i].lock);
- }
- hsi->num_ports = n_ports;
- hsi->port = port;
-
- return hsi;
-out:
- kfree(port);
-
- return NULL;
-}
-EXPORT_SYMBOL_GPL(hsi_alloc_controller);
-
-/**
- * hsi_free_controller - Free an HSI controller
- * @hsi: Pointer to HSI controller
- */
-void hsi_free_controller(struct hsi_controller *hsi)
-{
- if (!hsi)
- return;
-
- kfree(hsi->port);
- kfree(hsi);
-}
-EXPORT_SYMBOL_GPL(hsi_free_controller);
-
-/**
- * hsi_free_msg - Free an HSI message
- * @msg: Pointer to the HSI message
- *
- * Client is responsible to free the buffers pointed by the scatterlists.
- */
-void hsi_free_msg(struct hsi_msg *msg)
-{
- if (!msg)
- return;
- sg_free_table(&msg->sgt);
- kfree(msg);
-}
-EXPORT_SYMBOL_GPL(hsi_free_msg);
-
-/**
- * hsi_alloc_msg - Allocate an HSI message
- * @nents: Number of memory entries
- * @flags: Kernel allocation flags
- *
- * nents can be 0. This mainly makes sense for read transfer.
- * In that case, HSI drivers will call the complete callback when
- * there is data to be read without consuming it.
- *
- * Return NULL on failure or a pointer to an hsi_msg on success.
- */
-struct hsi_msg *hsi_alloc_msg(unsigned int nents, gfp_t flags)
-{
- struct hsi_msg *msg;
- int err;
-
- msg = kzalloc(sizeof(*msg), flags);
- if (!msg)
- return NULL;
-
- if (!nents)
- return msg;
-
- err = sg_alloc_table(&msg->sgt, nents, flags);
- if (unlikely(err)) {
- kfree(msg);
- msg = NULL;
- }
-
- return msg;
-}
-EXPORT_SYMBOL_GPL(hsi_alloc_msg);
-
-/**
- * hsi_async - Submit an HSI transfer to the controller
- * @cl: HSI client sending the transfer
- * @msg: The HSI transfer passed to controller
- *
- * The HSI message must have the channel, ttype, complete and destructor
- * fields set beforehand. If nents > 0 then the client has to initialize
- * also the scatterlists to point to the buffers to write to or read from.
- *
- * HSI controllers relay on pre-allocated buffers from their clients and they
- * do not allocate buffers on their own.
- *
- * Once the HSI message transfer finishes, the HSI controller calls the
- * complete callback with the status and actual_len fields of the HSI message
- * updated. The complete callback can be called before returning from
- * hsi_async.
- *
- * Returns -errno on failure or 0 on success
- */
-int hsi_async(struct hsi_client *cl, struct hsi_msg *msg)
-{
- struct hsi_port *port = hsi_get_port(cl);
-
- if (!hsi_port_claimed(cl))
- return -EACCES;
-
- WARN_ON_ONCE(!msg->destructor || !msg->complete);
- msg->cl = cl;
-
- return port->async(msg);
-}
-EXPORT_SYMBOL_GPL(hsi_async);
-
-/**
- * hsi_claim_port - Claim the HSI client's port
- * @cl: HSI client that wants to claim its port
- * @share: Flag to indicate if the client wants to share the port or not.
- *
- * Returns -errno on failure, 0 on success.
- */
-int hsi_claim_port(struct hsi_client *cl, unsigned int share)
-{
- struct hsi_port *port = hsi_get_port(cl);
- int err = 0;
-
- mutex_lock(&port->lock);
- if ((port->claimed) && (!port->shared || !share)) {
- err = -EBUSY;
- goto out;
- }
- if (!try_module_get(to_hsi_controller(port->device.parent)->owner)) {
- err = -ENODEV;
- goto out;
- }
- port->claimed++;
- port->shared = !!share;
- cl->pclaimed = 1;
-out:
- mutex_unlock(&port->lock);
-
- return err;
-}
-EXPORT_SYMBOL_GPL(hsi_claim_port);
-
-/**
- * hsi_release_port - Release the HSI client's port
- * @cl: HSI client which previously claimed its port
- */
-void hsi_release_port(struct hsi_client *cl)
-{
- struct hsi_port *port = hsi_get_port(cl);
-
- mutex_lock(&port->lock);
- /* Allow HW driver to do some cleanup */
- port->release(cl);
- if (cl->pclaimed)
- port->claimed--;
- BUG_ON(port->claimed < 0);
- cl->pclaimed = 0;
- if (!port->claimed)
- port->shared = 0;
- module_put(to_hsi_controller(port->device.parent)->owner);
- mutex_unlock(&port->lock);
-}
-EXPORT_SYMBOL_GPL(hsi_release_port);
-
-static int hsi_start_rx(struct hsi_client *cl, void *data __maybe_unused)
-{
- if (cl->hsi_start_rx)
- (*cl->hsi_start_rx)(cl);
-
- return 0;
-}
-
-static int hsi_stop_rx(struct hsi_client *cl, void *data __maybe_unused)
-{
- if (cl->hsi_stop_rx)
- (*cl->hsi_stop_rx)(cl);
-
- return 0;
-}
-
-static int hsi_port_for_each_client(struct hsi_port *port, void *data,
- int (*fn)(struct hsi_client *cl, void *data))
-{
- struct hsi_client *cl;
-
- spin_lock(&port->clock);
- list_for_each_entry(cl, &port->clients, link) {
- spin_unlock(&port->clock);
- (*fn)(cl, data);
- spin_lock(&port->clock);
- }
- spin_unlock(&port->clock);
-
- return 0;
-}
-
-/**
- * hsi_event -Notifies clients about port events
- * @port: Port where the event occurred
- * @event: The event type
- *
- * Clients should not be concerned about wake line behavior. However, due
- * to a race condition in HSI HW protocol, clients need to be notified
- * about wake line changes, so they can implement a workaround for it.
- *
- * Events:
- * HSI_EVENT_START_RX - Incoming wake line high
- * HSI_EVENT_STOP_RX - Incoming wake line down
- */
-void hsi_event(struct hsi_port *port, unsigned int event)
-{
- int (*fn)(struct hsi_client *cl, void *data);
-
- switch (event) {
- case HSI_EVENT_START_RX:
- fn = hsi_start_rx;
- break;
- case HSI_EVENT_STOP_RX:
- fn = hsi_stop_rx;
- break;
- default:
- return;
- }
- hsi_port_for_each_client(port, NULL, fn);
-}
-EXPORT_SYMBOL_GPL(hsi_event);
-
-static int __init hsi_init(void)
-{
- return bus_register(&hsi_bus_type);
-}
-postcore_initcall(hsi_init);
-
-static void __exit hsi_exit(void)
-{
- bus_unregister(&hsi_bus_type);
-}
-module_exit(hsi_exit);
-
-MODULE_AUTHOR("Carlos Chinea ");
-MODULE_DESCRIPTION("High-speed Synchronous Serial Interface (HSI) framework");
-MODULE_LICENSE("GPL v2");
diff --git a/trunk/drivers/hsi/hsi_boardinfo.c b/trunk/drivers/hsi/hsi_boardinfo.c
deleted file mode 100644
index e56bc6da5f98..000000000000
--- a/trunk/drivers/hsi/hsi_boardinfo.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * HSI clients registration interface
- *
- * Copyright (C) 2010 Nokia Corporation. All rights reserved.
- *
- * Contact: Carlos Chinea
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-#include
-#include
-#include
-#include "hsi_core.h"
-
-/*
- * hsi_board_list is only used internally by the HSI framework.
- * No one else is allowed to make use of it.
- */
-LIST_HEAD(hsi_board_list);
-EXPORT_SYMBOL_GPL(hsi_board_list);
-
-/**
- * hsi_register_board_info - Register HSI clients information
- * @info: Array of HSI clients on the board
- * @len: Length of the array
- *
- * HSI clients are statically declared and registered on board files.
- *
- * HSI clients will be automatically registered to the HSI bus once the
- * controller and the port where the clients wishes to attach are registered
- * to it.
- *
- * Return -errno on failure, 0 on success.
- */
-int __init hsi_register_board_info(struct hsi_board_info const *info,
- unsigned int len)
-{
- struct hsi_cl_info *cl_info;
-
- cl_info = kzalloc(sizeof(*cl_info) * len, GFP_KERNEL);
- if (!cl_info)
- return -ENOMEM;
-
- for (; len; len--, info++, cl_info++) {
- cl_info->info = *info;
- list_add_tail(&cl_info->list, &hsi_board_list);
- }
-
- return 0;
-}
diff --git a/trunk/drivers/hsi/hsi_core.h b/trunk/drivers/hsi/hsi_core.h
deleted file mode 100644
index ab5c2fb175fd..000000000000
--- a/trunk/drivers/hsi/hsi_core.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * HSI framework internal interfaces,
- *
- * Copyright (C) 2010 Nokia Corporation. All rights reserved.
- *
- * Contact: Carlos Chinea
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-#ifndef __LINUX_HSI_CORE_H__
-#define __LINUX_HSI_CORE_H__
-
-#include
-
-struct hsi_cl_info {
- struct list_head list;
- struct hsi_board_info info;
-};
-
-extern struct list_head hsi_board_list;
-
-#endif /* __LINUX_HSI_CORE_H__ */
diff --git a/trunk/drivers/hwmon/Kconfig b/trunk/drivers/hwmon/Kconfig
index 8deedc1b9840..5b32d56dbb4d 100644
--- a/trunk/drivers/hwmon/Kconfig
+++ b/trunk/drivers/hwmon/Kconfig
@@ -253,8 +253,7 @@ config SENSORS_K10TEMP
If you say yes here you get support for the temperature
sensor(s) inside your CPU. Supported are later revisions of
the AMD Family 10h and all revisions of the AMD Family 11h,
- 12h (Llano), 14h (Brazos) and 15h (Bulldozer/Trinity)
- microarchitectures.
+ 12h (Llano), 14h (Brazos) and 15h (Bulldozer) microarchitectures.
This driver can also be built as a module. If so, the module
will be called k10temp.
@@ -426,7 +425,7 @@ config SENSORS_GL520SM
config SENSORS_GPIO_FAN
tristate "GPIO fan"
- depends on GPIOLIB
+ depends on GENERIC_GPIO
help
If you say yes here you get support for fans connected to GPIO lines.
@@ -884,7 +883,7 @@ source drivers/hwmon/pmbus/Kconfig
config SENSORS_SHT15
tristate "Sensiron humidity and temperature sensors. SHT15 and compat."
- depends on GPIOLIB
+ depends on GENERIC_GPIO
help
If you say yes here you get support for the Sensiron SHT10, SHT11,
SHT15, SHT71, SHT75 humidity and temperature sensors.
diff --git a/trunk/drivers/hwmon/acpi_power_meter.c b/trunk/drivers/hwmon/acpi_power_meter.c
index 145f13580ff0..554f046bcf20 100644
--- a/trunk/drivers/hwmon/acpi_power_meter.c
+++ b/trunk/drivers/hwmon/acpi_power_meter.c
@@ -632,7 +632,6 @@ static int register_ro_attrs(struct acpi_power_meter_resource *resource,
sensors->dev_attr.show = ro->show;
sensors->index = ro->index;
- sysfs_attr_init(&sensors->dev_attr.attr);
res = device_create_file(dev, &sensors->dev_attr);
if (res) {
sensors->dev_attr.attr.name = NULL;
@@ -662,7 +661,6 @@ static int register_rw_attrs(struct acpi_power_meter_resource *resource,
sensors->dev_attr.store = rw->set;
sensors->index = rw->index;
- sysfs_attr_init(&sensors->dev_attr.attr);
res = device_create_file(dev, &sensors->dev_attr);
if (res) {
sensors->dev_attr.attr.name = NULL;
diff --git a/trunk/drivers/hwmon/ad7314.c b/trunk/drivers/hwmon/ad7314.c
index ce43642ef03e..0e0cfcc36f8d 100644
--- a/trunk/drivers/hwmon/ad7314.c
+++ b/trunk/drivers/hwmon/ad7314.c
@@ -128,7 +128,6 @@ static int __devinit ad7314_probe(struct spi_device *spi_dev)
ret = PTR_ERR(chip->hwmon_dev);
goto error_remove_group;
}
- chip->spi_dev = spi_dev;
return 0;
error_remove_group:
diff --git a/trunk/drivers/hwmon/adm1031.c b/trunk/drivers/hwmon/adm1031.c
index 44e1fd7f3d81..ff37363ea5bc 100644
--- a/trunk/drivers/hwmon/adm1031.c
+++ b/trunk/drivers/hwmon/adm1031.c
@@ -233,15 +233,18 @@ static const auto_chan_table_t auto_channel_select_table_adm1030 = {
* nearest match if no exact match where found.
*/
static int
-get_fan_auto_nearest(struct adm1031_data *data, int chan, u8 val, u8 reg)
+get_fan_auto_nearest(struct adm1031_data *data,
+ int chan, u8 val, u8 reg, u8 *new_reg)
{
int i;
int first_match = -1, exact_match = -1;
u8 other_reg_val =
(*data->chan_select_table)[FAN_CHAN_FROM_REG(reg)][chan ? 0 : 1];
- if (val == 0)
+ if (val == 0) {
+ *new_reg = 0;
return 0;
+ }
for (i = 0; i < 8; i++) {
if ((val == (*data->chan_select_table)[i][chan]) &&
@@ -261,11 +264,13 @@ get_fan_auto_nearest(struct adm1031_data *data, int chan, u8 val, u8 reg)
}
if (exact_match >= 0)
- return exact_match;
+ *new_reg = exact_match;
else if (first_match >= 0)
- return first_match;
+ *new_reg = first_match;
+ else
+ return -EINVAL;
- return -EINVAL;
+ return 0;
}
static ssize_t show_fan_auto_channel(struct device *dev,
@@ -296,12 +301,11 @@ set_fan_auto_channel(struct device *dev, struct device_attribute *attr,
mutex_lock(&data->update_lock);
- ret = get_fan_auto_nearest(data, nr, val, data->conf1);
- if (ret < 0) {
+ ret = get_fan_auto_nearest(data, nr, val, data->conf1, ®);
+ if (ret) {
mutex_unlock(&data->update_lock);
return ret;
}
- reg = ret;
data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^
(old_fan_mode & ADM1031_CONF1_AUTO_MODE)) {
diff --git a/trunk/drivers/hwmon/f75375s.c b/trunk/drivers/hwmon/f75375s.c
index ece4159bd453..729499e75210 100644
--- a/trunk/drivers/hwmon/f75375s.c
+++ b/trunk/drivers/hwmon/f75375s.c
@@ -276,7 +276,6 @@ static bool duty_mode_enabled(u8 pwm_enable)
return false;
default:
BUG();
- return true;
}
}
@@ -292,7 +291,6 @@ static bool auto_mode_enabled(u8 pwm_enable)
return true;
default:
BUG();
- return false;
}
}
diff --git a/trunk/drivers/hwmon/k10temp.c b/trunk/drivers/hwmon/k10temp.c
index 307bb325dde9..aba29d63f195 100644
--- a/trunk/drivers/hwmon/k10temp.c
+++ b/trunk/drivers/hwmon/k10temp.c
@@ -33,9 +33,6 @@ static bool force;
module_param(force, bool, 0444);
MODULE_PARM_DESC(force, "force loading on processors with erratum 319");
-/* PCI-IDs for Northbridge devices not used anywhere else */
-#define PCI_DEVICE_ID_AMD_15H_M10H_NB_F3 0x1403
-
/* CPUID function 0x80000001, ebx */
#define CPUID_PKGTYPE_MASK 0xf0000000
#define CPUID_PKGTYPE_F 0x00000000
@@ -213,7 +210,6 @@ static DEFINE_PCI_DEVICE_TABLE(k10temp_id_table) = {
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_11H_NB_MISC) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F3) },
- { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_NB_F3) },
{}
};
MODULE_DEVICE_TABLE(pci, k10temp_id_table);
diff --git a/trunk/drivers/hwmon/max6639.c b/trunk/drivers/hwmon/max6639.c
index de8f7adaccbd..193067e27b6f 100644
--- a/trunk/drivers/hwmon/max6639.c
+++ b/trunk/drivers/hwmon/max6639.c
@@ -596,10 +596,8 @@ static int max6639_remove(struct i2c_client *client)
return 0;
}
-#ifdef CONFIG_PM_SLEEP
-static int max6639_suspend(struct device *dev)
+static int max6639_suspend(struct i2c_client *client, pm_message_t mesg)
{
- struct i2c_client *client = to_i2c_client(dev);
int data = i2c_smbus_read_byte_data(client, MAX6639_REG_GCONFIG);
if (data < 0)
return data;
@@ -608,9 +606,8 @@ static int max6639_suspend(struct device *dev)
MAX6639_REG_GCONFIG, data | MAX6639_GCONFIG_STANDBY);
}
-static int max6639_resume(struct device *dev)
+static int max6639_resume(struct i2c_client *client)
{
- struct i2c_client *client = to_i2c_client(dev);
int data = i2c_smbus_read_byte_data(client, MAX6639_REG_GCONFIG);
if (data < 0)
return data;
@@ -618,7 +615,6 @@ static int max6639_resume(struct device *dev)
return i2c_smbus_write_byte_data(client,
MAX6639_REG_GCONFIG, data & ~MAX6639_GCONFIG_STANDBY);
}
-#endif /* CONFIG_PM_SLEEP */
static const struct i2c_device_id max6639_id[] = {
{"max6639", 0},
@@ -627,18 +623,15 @@ static const struct i2c_device_id max6639_id[] = {
MODULE_DEVICE_TABLE(i2c, max6639_id);
-static const struct dev_pm_ops max6639_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(max6639_suspend, max6639_resume)
-};
-
static struct i2c_driver max6639_driver = {
.class = I2C_CLASS_HWMON,
.driver = {
.name = "max6639",
- .pm = &max6639_pm_ops,
},
.probe = max6639_probe,
.remove = max6639_remove,
+ .suspend = max6639_suspend,
+ .resume = max6639_resume,
.id_table = max6639_id,
.detect = max6639_detect,
.address_list = normal_i2c,
diff --git a/trunk/drivers/hwmon/w83627ehf.c b/trunk/drivers/hwmon/w83627ehf.c
index 54922ed12978..a25350cf9554 100644
--- a/trunk/drivers/hwmon/w83627ehf.c
+++ b/trunk/drivers/hwmon/w83627ehf.c
@@ -2619,15 +2619,15 @@ static struct platform_driver w83627ehf_driver = {
static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
struct w83627ehf_sio_data *sio_data)
{
- static const char sio_name_W83627EHF[] __initconst = "W83627EHF";
- static const char sio_name_W83627EHG[] __initconst = "W83627EHG";
- static const char sio_name_W83627DHG[] __initconst = "W83627DHG";
- static const char sio_name_W83627DHG_P[] __initconst = "W83627DHG-P";
- static const char sio_name_W83627UHG[] __initconst = "W83627UHG";
- static const char sio_name_W83667HG[] __initconst = "W83667HG";
- static const char sio_name_W83667HG_B[] __initconst = "W83667HG-B";
- static const char sio_name_NCT6775[] __initconst = "NCT6775F";
- static const char sio_name_NCT6776[] __initconst = "NCT6776F";
+ static const char __initdata sio_name_W83627EHF[] = "W83627EHF";
+ static const char __initdata sio_name_W83627EHG[] = "W83627EHG";
+ static const char __initdata sio_name_W83627DHG[] = "W83627DHG";
+ static const char __initdata sio_name_W83627DHG_P[] = "W83627DHG-P";
+ static const char __initdata sio_name_W83627UHG[] = "W83627UHG";
+ static const char __initdata sio_name_W83667HG[] = "W83667HG";
+ static const char __initdata sio_name_W83667HG_B[] = "W83667HG-B";
+ static const char __initdata sio_name_NCT6775[] = "NCT6775F";
+ static const char __initdata sio_name_NCT6776[] = "NCT6776F";
u16 val;
const char *sio_name;
diff --git a/trunk/drivers/idle/i7300_idle.c b/trunk/drivers/idle/i7300_idle.c
index fa080ebd568f..c976285d313e 100644
--- a/trunk/drivers/idle/i7300_idle.c
+++ b/trunk/drivers/idle/i7300_idle.c
@@ -516,6 +516,12 @@ static struct notifier_block i7300_idle_nb = {
MODULE_DEVICE_TABLE(pci, pci_tbl);
+int stats_open_generic(struct inode *inode, struct file *fp)
+{
+ fp->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t stats_read_ul(struct file *fp, char __user *ubuf, size_t count,
loff_t *off)
{
@@ -528,7 +534,7 @@ static ssize_t stats_read_ul(struct file *fp, char __user *ubuf, size_t count,
}
static const struct file_operations idle_fops = {
- .open = simple_open,
+ .open = stats_open_generic,
.read = stats_read_ul,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/iommu/amd_iommu.c b/trunk/drivers/iommu/amd_iommu.c
index a5bee8e2dfce..ae2ec929e52f 100644
--- a/trunk/drivers/iommu/amd_iommu.c
+++ b/trunk/drivers/iommu/amd_iommu.c
@@ -2707,8 +2707,7 @@ static void unmap_sg(struct device *dev, struct scatterlist *sglist,
* The exported alloc_coherent function for dma_ops.
*/
static void *alloc_coherent(struct device *dev, size_t size,
- dma_addr_t *dma_addr, gfp_t flag,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_addr, gfp_t flag)
{
unsigned long flags;
void *virt_addr;
@@ -2766,8 +2765,7 @@ static void *alloc_coherent(struct device *dev, size_t size,
* The exported free_coherent function for dma_ops.
*/
static void free_coherent(struct device *dev, size_t size,
- void *virt_addr, dma_addr_t dma_addr,
- struct dma_attrs *attrs)
+ void *virt_addr, dma_addr_t dma_addr)
{
unsigned long flags;
struct protection_domain *domain;
@@ -2848,8 +2846,8 @@ static void __init prealloc_protection_domains(void)
}
static struct dma_map_ops amd_iommu_dma_ops = {
- .alloc = alloc_coherent,
- .free = free_coherent,
+ .alloc_coherent = alloc_coherent,
+ .free_coherent = free_coherent,
.map_page = map_page,
.unmap_page = unmap_page,
.map_sg = map_sg,
diff --git a/trunk/drivers/iommu/intel-iommu.c b/trunk/drivers/iommu/intel-iommu.c
index f93d5ac8f81c..132f93b05154 100644
--- a/trunk/drivers/iommu/intel-iommu.c
+++ b/trunk/drivers/iommu/intel-iommu.c
@@ -2949,8 +2949,7 @@ static void intel_unmap_page(struct device *dev, dma_addr_t dev_addr,
}
static void *intel_alloc_coherent(struct device *hwdev, size_t size,
- dma_addr_t *dma_handle, gfp_t flags,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flags)
{
void *vaddr;
int order;
@@ -2982,7 +2981,7 @@ static void *intel_alloc_coherent(struct device *hwdev, size_t size,
}
static void intel_free_coherent(struct device *hwdev, size_t size, void *vaddr,
- dma_addr_t dma_handle, struct dma_attrs *attrs)
+ dma_addr_t dma_handle)
{
int order;
@@ -3127,8 +3126,8 @@ static int intel_mapping_error(struct device *dev, dma_addr_t dma_addr)
}
struct dma_map_ops intel_dma_ops = {
- .alloc = intel_alloc_coherent,
- .free = intel_free_coherent,
+ .alloc_coherent = intel_alloc_coherent,
+ .free_coherent = intel_free_coherent,
.map_sg = intel_map_sg,
.unmap_sg = intel_unmap_sg,
.map_page = intel_map_page,
diff --git a/trunk/drivers/iommu/omap-iommu-debug.c b/trunk/drivers/iommu/omap-iommu-debug.c
index f55fc5dfbadc..103dbd92e256 100644
--- a/trunk/drivers/iommu/omap-iommu-debug.c
+++ b/trunk/drivers/iommu/omap-iommu-debug.c
@@ -323,9 +323,15 @@ static ssize_t debug_write_mem(struct file *file, const char __user *userbuf,
return count;
}
+static int debug_open_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
#define DEBUG_FOPS(name) \
static const struct file_operations debug_##name##_fops = { \
- .open = simple_open, \
+ .open = debug_open_generic, \
.read = debug_read_##name, \
.write = debug_write_##name, \
.llseek = generic_file_llseek, \
@@ -333,7 +339,7 @@ static ssize_t debug_write_mem(struct file *file, const char __user *userbuf,
#define DEBUG_FOPS_RO(name) \
static const struct file_operations debug_##name##_fops = { \
- .open = simple_open, \
+ .open = debug_open_generic, \
.read = debug_read_##name, \
.llseek = generic_file_llseek, \
};
diff --git a/trunk/drivers/isdn/hardware/mISDN/avmfritz.c b/trunk/drivers/isdn/hardware/mISDN/avmfritz.c
index c0b8c960ee3f..05ed4d0cb18b 100644
--- a/trunk/drivers/isdn/hardware/mISDN/avmfritz.c
+++ b/trunk/drivers/isdn/hardware/mISDN/avmfritz.c
@@ -891,7 +891,7 @@ open_bchannel(struct fritzcard *fc, struct channel_req *rq)
{
struct bchannel *bch;
- if (rq->adr.channel == 0 || rq->adr.channel > 2)
+ if (rq->adr.channel > 2)
return -EINVAL;
if (rq->protocol == ISDN_P_NONE)
return -EINVAL;
diff --git a/trunk/drivers/isdn/hardware/mISDN/hfcpci.c b/trunk/drivers/isdn/hardware/mISDN/hfcpci.c
index e2c83a2d7691..d055ae7fa040 100644
--- a/trunk/drivers/isdn/hardware/mISDN/hfcpci.c
+++ b/trunk/drivers/isdn/hardware/mISDN/hfcpci.c
@@ -1962,7 +1962,7 @@ open_bchannel(struct hfc_pci *hc, struct channel_req *rq)
{
struct bchannel *bch;
- if (rq->adr.channel == 0 || rq->adr.channel > 2)
+ if (rq->adr.channel > 2)
return -EINVAL;
if (rq->protocol == ISDN_P_NONE)
return -EINVAL;
diff --git a/trunk/drivers/isdn/hardware/mISDN/hfcsusb.c b/trunk/drivers/isdn/hardware/mISDN/hfcsusb.c
index 8cde2a0538ab..602338734634 100644
--- a/trunk/drivers/isdn/hardware/mISDN/hfcsusb.c
+++ b/trunk/drivers/isdn/hardware/mISDN/hfcsusb.c
@@ -486,7 +486,7 @@ open_bchannel(struct hfcsusb *hw, struct channel_req *rq)
{
struct bchannel *bch;
- if (rq->adr.channel == 0 || rq->adr.channel > 2)
+ if (rq->adr.channel > 2)
return -EINVAL;
if (rq->protocol == ISDN_P_NONE)
return -EINVAL;
diff --git a/trunk/drivers/isdn/hardware/mISDN/mISDNipac.c b/trunk/drivers/isdn/hardware/mISDN/mISDNipac.c
index 884369f09cad..b47e9bed2185 100644
--- a/trunk/drivers/isdn/hardware/mISDN/mISDNipac.c
+++ b/trunk/drivers/isdn/hardware/mISDN/mISDNipac.c
@@ -1506,7 +1506,7 @@ open_bchannel(struct ipac_hw *ipac, struct channel_req *rq)
{
struct bchannel *bch;
- if (rq->adr.channel == 0 || rq->adr.channel > 2)
+ if (rq->adr.channel > 2)
return -EINVAL;
if (rq->protocol == ISDN_P_NONE)
return -EINVAL;
diff --git a/trunk/drivers/isdn/hardware/mISDN/mISDNisar.c b/trunk/drivers/isdn/hardware/mISDN/mISDNisar.c
index 9a6da6edcfa8..10446ab404b5 100644
--- a/trunk/drivers/isdn/hardware/mISDN/mISDNisar.c
+++ b/trunk/drivers/isdn/hardware/mISDN/mISDNisar.c
@@ -1670,7 +1670,7 @@ isar_open(struct isar_hw *isar, struct channel_req *rq)
{
struct bchannel *bch;
- if (rq->adr.channel == 0 || rq->adr.channel > 2)
+ if (rq->adr.channel > 2)
return -EINVAL;
if (rq->protocol == ISDN_P_NONE)
return -EINVAL;
diff --git a/trunk/drivers/isdn/hardware/mISDN/netjet.c b/trunk/drivers/isdn/hardware/mISDN/netjet.c
index c726e09d0981..dd6de9f7a8a3 100644
--- a/trunk/drivers/isdn/hardware/mISDN/netjet.c
+++ b/trunk/drivers/isdn/hardware/mISDN/netjet.c
@@ -860,7 +860,7 @@ open_bchannel(struct tiger_hw *card, struct channel_req *rq)
{
struct bchannel *bch;
- if (rq->adr.channel == 0 || rq->adr.channel > 2)
+ if (rq->adr.channel > 2)
return -EINVAL;
if (rq->protocol == ISDN_P_NONE)
return -EINVAL;
diff --git a/trunk/drivers/isdn/hardware/mISDN/w6692.c b/trunk/drivers/isdn/hardware/mISDN/w6692.c
index 2183357f0799..7f1e7ba75cd1 100644
--- a/trunk/drivers/isdn/hardware/mISDN/w6692.c
+++ b/trunk/drivers/isdn/hardware/mISDN/w6692.c
@@ -1015,7 +1015,7 @@ open_bchannel(struct w6692_hw *card, struct channel_req *rq)
{
struct bchannel *bch;
- if (rq->adr.channel == 0 || rq->adr.channel > 2)
+ if (rq->adr.channel > 2)
return -EINVAL;
if (rq->protocol == ISDN_P_NONE)
return -EINVAL;
diff --git a/trunk/drivers/md/linear.c b/trunk/drivers/md/linear.c
index fa211d80fc0a..b0fcc7d02adb 100644
--- a/trunk/drivers/md/linear.c
+++ b/trunk/drivers/md/linear.c
@@ -198,7 +198,6 @@ static struct linear_conf *linear_conf(struct mddev *mddev, int raid_disks)
static int linear_run (struct mddev *mddev)
{
struct linear_conf *conf;
- int ret;
if (md_check_no_bitmap(mddev))
return -EINVAL;
@@ -212,13 +211,7 @@ static int linear_run (struct mddev *mddev)
blk_queue_merge_bvec(mddev->queue, linear_mergeable_bvec);
mddev->queue->backing_dev_info.congested_fn = linear_congested;
mddev->queue->backing_dev_info.congested_data = mddev;
-
- ret = md_integrity_register(mddev);
- if (ret) {
- kfree(conf);
- mddev->private = NULL;
- }
- return ret;
+ return md_integrity_register(mddev);
}
static int linear_add(struct mddev *mddev, struct md_rdev *rdev)
diff --git a/trunk/drivers/md/raid0.c b/trunk/drivers/md/raid0.c
index de63a1fc3737..6f31f5596e01 100644
--- a/trunk/drivers/md/raid0.c
+++ b/trunk/drivers/md/raid0.c
@@ -407,8 +407,6 @@ static sector_t raid0_size(struct mddev *mddev, sector_t sectors, int raid_disks
return array_sectors;
}
-static int raid0_stop(struct mddev *mddev);
-
static int raid0_run(struct mddev *mddev)
{
struct r0conf *conf;
@@ -456,12 +454,7 @@ static int raid0_run(struct mddev *mddev)
blk_queue_merge_bvec(mddev->queue, raid0_mergeable_bvec);
dump_zones(mddev);
-
- ret = md_integrity_register(mddev);
- if (ret)
- raid0_stop(mddev);
-
- return ret;
+ return md_integrity_register(mddev);
}
static int raid0_stop(struct mddev *mddev)
@@ -632,7 +625,6 @@ static void *raid0_takeover_raid10(struct mddev *mddev)
static void *raid0_takeover_raid1(struct mddev *mddev)
{
struct r0conf *priv_conf;
- int chunksect;
/* Check layout:
* - (N - 1) mirror drives must be already faulty
@@ -643,25 +635,10 @@ static void *raid0_takeover_raid1(struct mddev *mddev)
return ERR_PTR(-EINVAL);
}
- /*
- * a raid1 doesn't have the notion of chunk size, so
- * figure out the largest suitable size we can use.
- */
- chunksect = 64 * 2; /* 64K by default */
-
- /* The array must be an exact multiple of chunksize */
- while (chunksect && (mddev->array_sectors & (chunksect - 1)))
- chunksect >>= 1;
-
- if ((chunksect << 9) < PAGE_SIZE)
- /* array size does not allow a suitable chunk size */
- return ERR_PTR(-EINVAL);
-
/* Set new parameters */
mddev->new_level = 0;
mddev->new_layout = 0;
- mddev->new_chunk_sectors = chunksect;
- mddev->chunk_sectors = chunksect;
+ mddev->new_chunk_sectors = 128; /* by default set chunk size to 64k */
mddev->delta_disks = 1 - mddev->raid_disks;
mddev->raid_disks = 1;
/* make sure it will be not marked as dirty */
diff --git a/trunk/drivers/md/raid1.c b/trunk/drivers/md/raid1.c
index d35e4c991e38..4a40a200d769 100644
--- a/trunk/drivers/md/raid1.c
+++ b/trunk/drivers/md/raid1.c
@@ -1738,7 +1738,7 @@ static int process_checks(struct r1bio *r1_bio)
s = sbio->bi_io_vec[j].bv_page;
if (memcmp(page_address(p),
page_address(s),
- sbio->bi_io_vec[j].bv_len))
+ PAGE_SIZE))
break;
}
} else
@@ -2386,7 +2386,8 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp
int ok = 1;
for (i = 0 ; i < conf->raid_disks * 2 ; i++)
if (r1_bio->bios[i]->bi_end_io == end_sync_write) {
- struct md_rdev *rdev = conf->mirrors[i].rdev;
+ struct md_rdev *rdev =
+ rcu_dereference(conf->mirrors[i].rdev);
ok = rdev_set_badblocks(rdev, sector_nr,
min_bad, 0
) && ok;
@@ -2635,13 +2636,11 @@ static struct r1conf *setup_conf(struct mddev *mddev)
return ERR_PTR(err);
}
-static int stop(struct mddev *mddev);
static int run(struct mddev *mddev)
{
struct r1conf *conf;
int i;
struct md_rdev *rdev;
- int ret;
if (mddev->level != 1) {
printk(KERN_ERR "md/raid1:%s: raid level not set to mirroring (%d)\n",
@@ -2706,11 +2705,7 @@ static int run(struct mddev *mddev)
mddev->queue->backing_dev_info.congested_data = mddev;
blk_queue_merge_bvec(mddev->queue, raid1_mergeable_bvec);
}
-
- ret = md_integrity_register(mddev);
- if (ret)
- stop(mddev);
- return ret;
+ return md_integrity_register(mddev);
}
static int stop(struct mddev *mddev)
diff --git a/trunk/drivers/md/raid10.c b/trunk/drivers/md/raid10.c
index fff782189e48..3540316886f2 100644
--- a/trunk/drivers/md/raid10.c
+++ b/trunk/drivers/md/raid10.c
@@ -1821,7 +1821,7 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
for (j = 0; j < vcnt; j++)
if (memcmp(page_address(fbio->bi_io_vec[j].bv_page),
page_address(tbio->bi_io_vec[j].bv_page),
- fbio->bi_io_vec[j].bv_len))
+ PAGE_SIZE))
break;
if (j == vcnt)
continue;
diff --git a/trunk/drivers/md/raid5.c b/trunk/drivers/md/raid5.c
index f351422938e0..23ac880bba9a 100644
--- a/trunk/drivers/md/raid5.c
+++ b/trunk/drivers/md/raid5.c
@@ -2471,41 +2471,39 @@ handle_failed_sync(struct r5conf *conf, struct stripe_head *sh,
int abort = 0;
int i;
+ md_done_sync(conf->mddev, STRIPE_SECTORS, 0);
clear_bit(STRIPE_SYNCING, &sh->state);
s->syncing = 0;
s->replacing = 0;
/* There is nothing more to do for sync/check/repair.
- * Don't even need to abort as that is handled elsewhere
- * if needed, and not always wanted e.g. if there is a known
- * bad block here.
* For recover/replace we need to record a bad block on all
* non-sync devices, or abort the recovery
*/
- if (test_bit(MD_RECOVERY_RECOVER, &conf->mddev->recovery)) {
- /* During recovery devices cannot be removed, so
- * locking and refcounting of rdevs is not needed
- */
- for (i = 0; i < conf->raid_disks; i++) {
- struct md_rdev *rdev = conf->disks[i].rdev;
- if (rdev
- && !test_bit(Faulty, &rdev->flags)
- && !test_bit(In_sync, &rdev->flags)
- && !rdev_set_badblocks(rdev, sh->sector,
- STRIPE_SECTORS, 0))
- abort = 1;
- rdev = conf->disks[i].replacement;
- if (rdev
- && !test_bit(Faulty, &rdev->flags)
- && !test_bit(In_sync, &rdev->flags)
- && !rdev_set_badblocks(rdev, sh->sector,
- STRIPE_SECTORS, 0))
- abort = 1;
- }
- if (abort)
- conf->recovery_disabled =
- conf->mddev->recovery_disabled;
+ if (!test_bit(MD_RECOVERY_RECOVER, &conf->mddev->recovery))
+ return;
+ /* During recovery devices cannot be removed, so locking and
+ * refcounting of rdevs is not needed
+ */
+ for (i = 0; i < conf->raid_disks; i++) {
+ struct md_rdev *rdev = conf->disks[i].rdev;
+ if (rdev
+ && !test_bit(Faulty, &rdev->flags)
+ && !test_bit(In_sync, &rdev->flags)
+ && !rdev_set_badblocks(rdev, sh->sector,
+ STRIPE_SECTORS, 0))
+ abort = 1;
+ rdev = conf->disks[i].replacement;
+ if (rdev
+ && !test_bit(Faulty, &rdev->flags)
+ && !test_bit(In_sync, &rdev->flags)
+ && !rdev_set_badblocks(rdev, sh->sector,
+ STRIPE_SECTORS, 0))
+ abort = 1;
+ }
+ if (abort) {
+ conf->recovery_disabled = conf->mddev->recovery_disabled;
+ set_bit(MD_RECOVERY_INTR, &conf->mddev->recovery);
}
- md_done_sync(conf->mddev, STRIPE_SECTORS, !abort);
}
static int want_replace(struct stripe_head *sh, int disk_idx)
@@ -3205,8 +3203,7 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s)
/* Not in-sync */;
else if (is_bad) {
/* also not in-sync */
- if (!test_bit(WriteErrorSeen, &rdev->flags) &&
- test_bit(R5_UPTODATE, &dev->flags)) {
+ if (!test_bit(WriteErrorSeen, &rdev->flags)) {
/* treat as in-sync, but with a read error
* which we can now try to correct
*/
@@ -3279,14 +3276,12 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s)
/* If there is a failed device being replaced,
* we must be recovering.
* else if we are after recovery_cp, we must be syncing
- * else if MD_RECOVERY_REQUESTED is set, we also are syncing.
* else we can only be replacing
* sync and recovery both need to read all devices, and so
* use the same flag.
*/
if (do_recovery ||
- sh->sector >= conf->mddev->recovery_cp ||
- test_bit(MD_RECOVERY_REQUESTED, &(conf->mddev->recovery)))
+ sh->sector >= conf->mddev->recovery_cp)
s->syncing = 1;
else
s->replacing = 1;
diff --git a/trunk/drivers/mfd/aat2870-core.c b/trunk/drivers/mfd/aat2870-core.c
index 44a3fdbadef4..3aa36eb5c79b 100644
--- a/trunk/drivers/mfd/aat2870-core.c
+++ b/trunk/drivers/mfd/aat2870-core.c
@@ -262,6 +262,13 @@ static ssize_t aat2870_dump_reg(struct aat2870_data *aat2870, char *buf)
return count;
}
+static int aat2870_reg_open_file(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+
+ return 0;
+}
+
static ssize_t aat2870_reg_read_file(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
@@ -323,7 +330,7 @@ static ssize_t aat2870_reg_write_file(struct file *file,
}
static const struct file_operations aat2870_reg_fops = {
- .open = simple_open,
+ .open = aat2870_reg_open_file,
.read = aat2870_reg_read_file,
.write = aat2870_reg_write_file,
};
diff --git a/trunk/drivers/mfd/ab3100-core.c b/trunk/drivers/mfd/ab3100-core.c
index 1efad20fb175..60107ee166fc 100644
--- a/trunk/drivers/mfd/ab3100-core.c
+++ b/trunk/drivers/mfd/ab3100-core.c
@@ -483,6 +483,12 @@ struct ab3100_get_set_reg_priv {
bool mode;
};
+static int ab3100_get_set_reg_open_file(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t ab3100_get_set_reg(struct file *file,
const char __user *user_buf,
size_t count, loff_t *ppos)
@@ -577,7 +583,7 @@ static ssize_t ab3100_get_set_reg(struct file *file,
}
static const struct file_operations ab3100_get_set_reg_fops = {
- .open = simple_open,
+ .open = ab3100_get_set_reg_open_file,
.write = ab3100_get_set_reg,
.llseek = noop_llseek,
};
diff --git a/trunk/drivers/misc/ibmasm/ibmasmfs.c b/trunk/drivers/misc/ibmasm/ibmasmfs.c
index 6673e578b3e9..1c034b80d408 100644
--- a/trunk/drivers/misc/ibmasm/ibmasmfs.c
+++ b/trunk/drivers/misc/ibmasm/ibmasmfs.c
@@ -500,6 +500,12 @@ static ssize_t r_heartbeat_file_write(struct file *file, const char __user *buf,
return 1;
}
+static int remote_settings_file_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static int remote_settings_file_close(struct inode *inode, struct file *file)
{
return 0;
@@ -594,7 +600,7 @@ static const struct file_operations r_heartbeat_fops = {
};
static const struct file_operations remote_settings_fops = {
- .open = simple_open,
+ .open = remote_settings_file_open,
.release = remote_settings_file_close,
.read = remote_settings_file_read,
.write = remote_settings_file_write,
diff --git a/trunk/drivers/misc/kgdbts.c b/trunk/drivers/misc/kgdbts.c
index 3aa9a969b373..3f7ad83ed740 100644
--- a/trunk/drivers/misc/kgdbts.c
+++ b/trunk/drivers/misc/kgdbts.c
@@ -134,17 +134,12 @@ static int force_hwbrks;
static int hwbreaks_ok;
static int hw_break_val;
static int hw_break_val2;
-static int cont_instead_of_sstep;
-static unsigned long cont_thread_id;
-static unsigned long sstep_thread_id;
#if defined(CONFIG_ARM) || defined(CONFIG_MIPS) || defined(CONFIG_SPARC)
static int arch_needs_sstep_emulation = 1;
#else
static int arch_needs_sstep_emulation;
#endif
-static unsigned long cont_addr;
static unsigned long sstep_addr;
-static int restart_from_top_after_write;
static int sstep_state;
/* Storage for the registers, in GDB format. */
@@ -192,8 +187,7 @@ static int kgdbts_unreg_thread(void *ptr)
*/
while (!final_ack)
msleep_interruptible(1500);
- /* Pause for any other threads to exit after final ack. */
- msleep_interruptible(1000);
+
if (configured)
kgdb_unregister_io_module(&kgdbts_io_ops);
configured = 0;
@@ -217,7 +211,7 @@ static unsigned long lookup_addr(char *arg)
if (!strcmp(arg, "kgdbts_break_test"))
addr = (unsigned long)kgdbts_break_test;
else if (!strcmp(arg, "sys_open"))
- addr = (unsigned long)do_sys_open;
+ addr = (unsigned long)sys_open;
else if (!strcmp(arg, "do_fork"))
addr = (unsigned long)do_fork;
else if (!strcmp(arg, "hw_break_val"))
@@ -289,16 +283,6 @@ static void hw_break_val_write(void)
hw_break_val++;
}
-static int get_thread_id_continue(char *put_str, char *arg)
-{
- char *ptr = &put_str[11];
-
- if (put_str[1] != 'T' || put_str[2] != '0')
- return 1;
- kgdb_hex2long(&ptr, &cont_thread_id);
- return 0;
-}
-
static int check_and_rewind_pc(char *put_str, char *arg)
{
unsigned long addr = lookup_addr(arg);
@@ -315,21 +299,13 @@ static int check_and_rewind_pc(char *put_str, char *arg)
if (addr + BREAK_INSTR_SIZE == ip)
offset = -BREAK_INSTR_SIZE;
#endif
-
- if (arch_needs_sstep_emulation && sstep_addr &&
- ip + offset == sstep_addr &&
- ((!strcmp(arg, "sys_open") || !strcmp(arg, "do_fork")))) {
- /* This is special case for emulated single step */
- v2printk("Emul: rewind hit single step bp\n");
- restart_from_top_after_write = 1;
- } else if (strcmp(arg, "silent") && ip + offset != addr) {
+ if (strcmp(arg, "silent") && ip + offset != addr) {
eprintk("kgdbts: BP mismatch %lx expected %lx\n",
ip + offset, addr);
return 1;
}
/* Readjust the instruction pointer if needed */
ip += offset;
- cont_addr = ip;
#ifdef GDB_ADJUSTS_BREAK_OFFSET
instruction_pointer_set(&kgdbts_regs, ip);
#endif
@@ -339,8 +315,6 @@ static int check_and_rewind_pc(char *put_str, char *arg)
static int check_single_step(char *put_str, char *arg)
{
unsigned long addr = lookup_addr(arg);
- static int matched_id;
-
/*
* From an arch indepent point of view the instruction pointer
* should be on a different instruction
@@ -350,29 +324,6 @@ static int check_single_step(char *put_str, char *arg)
gdb_regs_to_pt_regs(kgdbts_gdb_regs, &kgdbts_regs);
v2printk("Singlestep stopped at IP: %lx\n",
instruction_pointer(&kgdbts_regs));
-
- if (sstep_thread_id != cont_thread_id) {
- /*
- * Ensure we stopped in the same thread id as before, else the
- * debugger should continue until the original thread that was
- * single stepped is scheduled again, emulating gdb's behavior.
- */
- v2printk("ThrID does not match: %lx\n", cont_thread_id);
- if (arch_needs_sstep_emulation) {
- if (matched_id &&
- instruction_pointer(&kgdbts_regs) != addr)
- goto continue_test;
- matched_id++;
- ts.idx -= 2;
- sstep_state = 0;
- return 0;
- }
- cont_instead_of_sstep = 1;
- ts.idx -= 4;
- return 0;
- }
-continue_test:
- matched_id = 0;
if (instruction_pointer(&kgdbts_regs) == addr) {
eprintk("kgdbts: SingleStep failed at %lx\n",
instruction_pointer(&kgdbts_regs));
@@ -414,40 +365,10 @@ static int got_break(char *put_str, char *arg)
return 1;
}
-static void get_cont_catch(char *arg)
-{
- /* Always send detach because the test is completed at this point */
- fill_get_buf("D");
-}
-
-static int put_cont_catch(char *put_str, char *arg)
-{
- /* This is at the end of the test and we catch any and all input */
- v2printk("kgdbts: cleanup task: %lx\n", sstep_thread_id);
- ts.idx--;
- return 0;
-}
-
-static int emul_reset(char *put_str, char *arg)
-{
- if (strncmp(put_str, "$OK", 3))
- return 1;
- if (restart_from_top_after_write) {
- restart_from_top_after_write = 0;
- ts.idx = -1;
- }
- return 0;
-}
-
static void emul_sstep_get(char *arg)
{
if (!arch_needs_sstep_emulation) {
- if (cont_instead_of_sstep) {
- cont_instead_of_sstep = 0;
- fill_get_buf("c");
- } else {
- fill_get_buf(arg);
- }
+ fill_get_buf(arg);
return;
}
switch (sstep_state) {
@@ -477,11 +398,9 @@ static void emul_sstep_get(char *arg)
static int emul_sstep_put(char *put_str, char *arg)
{
if (!arch_needs_sstep_emulation) {
- char *ptr = &put_str[11];
- if (put_str[1] != 'T' || put_str[2] != '0')
- return 1;
- kgdb_hex2long(&ptr, &sstep_thread_id);
- return 0;
+ if (!strncmp(put_str+1, arg, 2))
+ return 0;
+ return 1;
}
switch (sstep_state) {
case 1:
@@ -492,7 +411,8 @@ static int emul_sstep_put(char *put_str, char *arg)
v2printk("Stopped at IP: %lx\n",
instruction_pointer(&kgdbts_regs));
/* Want to stop at IP + break instruction size by default */
- sstep_addr = cont_addr + BREAK_INSTR_SIZE;
+ sstep_addr = instruction_pointer(&kgdbts_regs) +
+ BREAK_INSTR_SIZE;
break;
case 2:
if (strncmp(put_str, "$OK", 3)) {
@@ -504,9 +424,6 @@ static int emul_sstep_put(char *put_str, char *arg)
if (strncmp(put_str, "$T0", 3)) {
eprintk("kgdbts: failed continue sstep\n");
return 1;
- } else {
- char *ptr = &put_str[11];
- kgdb_hex2long(&ptr, &sstep_thread_id);
}
break;
case 4:
@@ -585,10 +502,10 @@ static struct test_struct bad_read_test[] = {
static struct test_struct singlestep_break_test[] = {
{ "?", "S0*" }, /* Clear break points */
{ "kgdbts_break_test", "OK", sw_break, }, /* set sw breakpoint */
- { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */
- { "kgdbts_break_test", "OK", sw_rem_break }, /*remove breakpoint */
+ { "c", "T0*", }, /* Continue */
{ "g", "kgdbts_break_test", NULL, check_and_rewind_pc },
{ "write", "OK", write_regs }, /* Write registers */
+ { "kgdbts_break_test", "OK", sw_rem_break }, /*remove breakpoint */
{ "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */
{ "g", "kgdbts_break_test", NULL, check_single_step },
{ "kgdbts_break_test", "OK", sw_break, }, /* set sw breakpoint */
@@ -606,16 +523,16 @@ static struct test_struct singlestep_break_test[] = {
static struct test_struct do_fork_test[] = {
{ "?", "S0*" }, /* Clear break points */
{ "do_fork", "OK", sw_break, }, /* set sw breakpoint */
- { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */
- { "do_fork", "OK", sw_rem_break }, /*remove breakpoint */
+ { "c", "T0*", }, /* Continue */
{ "g", "do_fork", NULL, check_and_rewind_pc }, /* check location */
- { "write", "OK", write_regs, emul_reset }, /* Write registers */
+ { "write", "OK", write_regs }, /* Write registers */
+ { "do_fork", "OK", sw_rem_break }, /*remove breakpoint */
{ "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */
{ "g", "do_fork", NULL, check_single_step },
{ "do_fork", "OK", sw_break, }, /* set sw breakpoint */
{ "7", "T0*", skip_back_repeat_test }, /* Loop based on repeat_test */
{ "D", "OK", NULL, final_ack_set }, /* detach and unregister I/O */
- { "", "", get_cont_catch, put_cont_catch },
+ { "", "" },
};
/* Test for hitting a breakpoint at sys_open for what ever the number
@@ -624,16 +541,16 @@ static struct test_struct do_fork_test[] = {
static struct test_struct sys_open_test[] = {
{ "?", "S0*" }, /* Clear break points */
{ "sys_open", "OK", sw_break, }, /* set sw breakpoint */
- { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */
- { "sys_open", "OK", sw_rem_break }, /*remove breakpoint */
+ { "c", "T0*", }, /* Continue */
{ "g", "sys_open", NULL, check_and_rewind_pc }, /* check location */
- { "write", "OK", write_regs, emul_reset }, /* Write registers */
+ { "write", "OK", write_regs }, /* Write registers */
+ { "sys_open", "OK", sw_rem_break }, /*remove breakpoint */
{ "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */
{ "g", "sys_open", NULL, check_single_step },
{ "sys_open", "OK", sw_break, }, /* set sw breakpoint */
{ "7", "T0*", skip_back_repeat_test }, /* Loop based on repeat_test */
{ "D", "OK", NULL, final_ack_set }, /* detach and unregister I/O */
- { "", "", get_cont_catch, put_cont_catch },
+ { "", "" },
};
/*
@@ -776,8 +693,8 @@ static int run_simple_test(int is_get_char, int chr)
/* This callback is a put char which is when kgdb sends data to
* this I/O module.
*/
- if (ts.tst[ts.idx].get[0] == '\0' && ts.tst[ts.idx].put[0] == '\0' &&
- !ts.tst[ts.idx].get_handler) {
+ if (ts.tst[ts.idx].get[0] == '\0' &&
+ ts.tst[ts.idx].put[0] == '\0') {
eprintk("kgdbts: ERROR: beyond end of test on"
" '%s' line %i\n", ts.name, ts.idx);
return 0;
@@ -990,17 +907,6 @@ static void kgdbts_run_tests(void)
if (ptr)
sstep_test = simple_strtol(ptr+1, NULL, 10);
- /* All HW break point tests */
- if (arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT) {
- hwbreaks_ok = 1;
- v1printk("kgdbts:RUN hw breakpoint test\n");
- run_breakpoint_test(1);
- v1printk("kgdbts:RUN hw write breakpoint test\n");
- run_hw_break_test(1);
- v1printk("kgdbts:RUN access write breakpoint test\n");
- run_hw_break_test(0);
- }
-
/* required internal KGDB tests */
v1printk("kgdbts:RUN plant and detach test\n");
run_plant_and_detach_test(0);
@@ -1018,11 +924,35 @@ static void kgdbts_run_tests(void)
/* ===Optional tests=== */
+ /* All HW break point tests */
+ if (arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT) {
+ hwbreaks_ok = 1;
+ v1printk("kgdbts:RUN hw breakpoint test\n");
+ run_breakpoint_test(1);
+ v1printk("kgdbts:RUN hw write breakpoint test\n");
+ run_hw_break_test(1);
+ v1printk("kgdbts:RUN access write breakpoint test\n");
+ run_hw_break_test(0);
+ }
+
if (nmi_sleep) {
v1printk("kgdbts:RUN NMI sleep %i seconds test\n", nmi_sleep);
run_nmi_sleep_test(nmi_sleep);
}
+#ifdef CONFIG_DEBUG_RODATA
+ /* Until there is an api to write to read-only text segments, use
+ * HW breakpoints for the remainder of any tests, else print a
+ * failure message if hw breakpoints do not work.
+ */
+ if (!(arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT && hwbreaks_ok)) {
+ eprintk("kgdbts: HW breakpoints do not work,"
+ "skipping remaining tests\n");
+ return;
+ }
+ force_hwbrks = 1;
+#endif /* CONFIG_DEBUG_RODATA */
+
/* If the do_fork test is run it will be the last test that is
* executed because a kernel thread will be spawned at the very
* end to unregister the debug hooks.
diff --git a/trunk/drivers/mtd/ubi/debug.c b/trunk/drivers/mtd/ubi/debug.c
index 61af9bb560ab..e2cdebf40840 100644
--- a/trunk/drivers/mtd/ubi/debug.c
+++ b/trunk/drivers/mtd/ubi/debug.c
@@ -386,11 +386,19 @@ static ssize_t dfs_file_write(struct file *file, const char __user *user_buf,
return count;
}
+static int default_open(struct inode *inode, struct file *file)
+{
+ if (inode->i_private)
+ file->private_data = inode->i_private;
+
+ return 0;
+}
+
/* File operations for all UBI debugfs files */
static const struct file_operations dfs_fops = {
.read = dfs_file_read,
.write = dfs_file_write,
- .open = simple_open,
+ .open = default_open,
.llseek = no_llseek,
.owner = THIS_MODULE,
};
diff --git a/trunk/drivers/net/bonding/bond_main.c b/trunk/drivers/net/bonding/bond_main.c
index 941b4e189adf..0c76186bb9e7 100644
--- a/trunk/drivers/net/bonding/bond_main.c
+++ b/trunk/drivers/net/bonding/bond_main.c
@@ -891,15 +891,9 @@ static void bond_do_fail_over_mac(struct bonding *bond,
switch (bond->params.fail_over_mac) {
case BOND_FOM_ACTIVE:
- if (new_active) {
+ if (new_active)
memcpy(bond->dev->dev_addr, new_active->dev->dev_addr,
new_active->dev->addr_len);
- write_unlock_bh(&bond->curr_slave_lock);
- read_unlock(&bond->lock);
- call_netdevice_notifiers(NETDEV_CHANGEADDR, bond->dev);
- read_lock(&bond->lock);
- write_lock_bh(&bond->curr_slave_lock);
- }
break;
case BOND_FOM_FOLLOW:
/*
diff --git a/trunk/drivers/net/caif/caif_spi.c b/trunk/drivers/net/caif/caif_spi.c
index b71ce9bf0afb..96391c36fa74 100644
--- a/trunk/drivers/net/caif/caif_spi.c
+++ b/trunk/drivers/net/caif/caif_spi.c
@@ -127,6 +127,12 @@ static inline void dev_debugfs_rem(struct cfspi *cfspi)
debugfs_remove(cfspi->dbgfs_dir);
}
+static int dbgfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t dbgfs_state(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
@@ -237,13 +243,13 @@ static ssize_t dbgfs_frame(struct file *file, char __user *user_buf,
}
static const struct file_operations dbgfs_state_fops = {
- .open = simple_open,
+ .open = dbgfs_open,
.read = dbgfs_state,
.owner = THIS_MODULE
};
static const struct file_operations dbgfs_frame_fops = {
- .open = simple_open,
+ .open = dbgfs_open,
.read = dbgfs_frame,
.owner = THIS_MODULE
};
diff --git a/trunk/drivers/net/eql.c b/trunk/drivers/net/eql.c
index f219d38acf58..a59cf961a436 100644
--- a/trunk/drivers/net/eql.c
+++ b/trunk/drivers/net/eql.c
@@ -125,7 +125,6 @@
#include
#include
#include
-#include
#include
@@ -144,7 +143,7 @@ static void eql_timer(unsigned long param)
equalizer_t *eql = (equalizer_t *) param;
struct list_head *this, *tmp, *head;
- spin_lock(&eql->queue.lock);
+ spin_lock_bh(&eql->queue.lock);
head = &eql->queue.all_slaves;
list_for_each_safe(this, tmp, head) {
slave_t *slave = list_entry(this, slave_t, list);
@@ -158,7 +157,7 @@ static void eql_timer(unsigned long param)
}
}
- spin_unlock(&eql->queue.lock);
+ spin_unlock_bh(&eql->queue.lock);
eql->timer.expires = jiffies + EQL_DEFAULT_RESCHED_IVAL;
add_timer(&eql->timer);
@@ -342,7 +341,7 @@ static netdev_tx_t eql_slave_xmit(struct sk_buff *skb, struct net_device *dev)
struct net_device *slave_dev = slave->dev;
skb->dev = slave_dev;
- skb->priority = TC_PRIO_FILLER;
+ skb->priority = 1;
slave->bytes_queued += skb->len;
dev_queue_xmit(skb);
dev->stats.tx_packets++;
diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index 2c9ee552dffc..e37161f19250 100644
--- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -1173,13 +1173,6 @@ enum {
};
-struct bnx2x_prev_path_list {
- u8 bus;
- u8 slot;
- u8 path;
- struct list_head list;
-};
-
struct bnx2x {
/* Fields used in the tx and intr/napi performance paths
* are grouped together in the beginning of the structure
diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 44556b719e81..f1f3ca65667a 100644
--- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -1721,29 +1721,6 @@ static void bnx2x_squeeze_objects(struct bnx2x *bp)
} while (0)
#endif
-bool bnx2x_test_firmware_version(struct bnx2x *bp, bool is_err)
-{
- /* build FW version dword */
- u32 my_fw = (BCM_5710_FW_MAJOR_VERSION) +
- (BCM_5710_FW_MINOR_VERSION << 8) +
- (BCM_5710_FW_REVISION_VERSION << 16) +
- (BCM_5710_FW_ENGINEERING_VERSION << 24);
-
- /* read loaded FW from chip */
- u32 loaded_fw = REG_RD(bp, XSEM_REG_PRAM);
-
- DP(NETIF_MSG_IFUP, "loaded fw %x, my fw %x\n", loaded_fw, my_fw);
-
- if (loaded_fw != my_fw) {
- if (is_err)
- BNX2X_ERR("bnx2x with FW %x was already loaded, which mismatches my %x FW. aborting\n",
- loaded_fw, my_fw);
- return false;
- }
-
- return true;
-}
-
/* must be called with rtnl_lock */
int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
{
@@ -1838,8 +1815,23 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
}
if (load_code != FW_MSG_CODE_DRV_LOAD_COMMON_CHIP &&
load_code != FW_MSG_CODE_DRV_LOAD_COMMON) {
+ /* build FW version dword */
+ u32 my_fw = (BCM_5710_FW_MAJOR_VERSION) +
+ (BCM_5710_FW_MINOR_VERSION << 8) +
+ (BCM_5710_FW_REVISION_VERSION << 16) +
+ (BCM_5710_FW_ENGINEERING_VERSION << 24);
+
+ /* read loaded FW from chip */
+ u32 loaded_fw = REG_RD(bp, XSEM_REG_PRAM);
+
+ DP(BNX2X_MSG_SP, "loaded fw %x, my fw %x",
+ loaded_fw, my_fw);
+
/* abort nic load if version mismatch */
- if (!bnx2x_test_firmware_version(bp, true)) {
+ if (my_fw != loaded_fw) {
+ BNX2X_ERR("bnx2x with FW %x already loaded, "
+ "which mismatches my %x FW. aborting",
+ loaded_fw, my_fw);
rc = -EBUSY;
LOAD_ERROR_EXIT(bp, load_error2);
}
diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
index 5c27454d2ec2..8b163388659a 100644
--- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
+++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
@@ -431,9 +431,6 @@ void bnx2x_panic_dump(struct bnx2x *bp);
void bnx2x_fw_dump_lvl(struct bnx2x *bp, const char *lvl);
-/* validate currect fw is loaded */
-bool bnx2x_test_firmware_version(struct bnx2x *bp, bool is_err);
-
/* dev_close main block */
int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode);
diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
index dbff5915b81a..5d71b7d43237 100644
--- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
+++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
@@ -1251,9 +1251,6 @@ struct drv_func_mb {
#define DRV_MSG_CODE_LINK_STATUS_CHANGED 0x01000000
- #define DRV_MSG_CODE_INITIATE_FLR 0x02000000
- #define REQ_BC_VER_4_INITIATE_FLR 0x00070213
-
#define BIOS_MSG_CODE_LIC_CHALLENGE 0xff010000
#define BIOS_MSG_CODE_LIC_RESPONSE 0xff020000
#define BIOS_MSG_CODE_VIRT_MAC_PRIM 0xff030000
diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
index efa557b76ac7..beb4cdbdb6e1 100644
--- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
+++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
@@ -35,6 +35,7 @@
#define ETH_MAX_PACKET_SIZE 1500
#define ETH_MAX_JUMBO_PACKET_SIZE 9600
#define MDIO_ACCESS_TIMEOUT 1000
+#define BMAC_CONTROL_RX_ENABLE 2
#define WC_LANE_MAX 4
#define I2C_SWITCH_WIDTH 2
#define I2C_BSC0 0
diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
index 763535ee4832..7ba557a610da 100644
--- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
+++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
@@ -89,8 +89,6 @@
#define PFC_BRB_FULL_LB_XON_THRESHOLD 250
#define MAXVAL(a, b) (((a) > (b)) ? (a) : (b))
-
-#define BMAC_CONTROL_RX_ENABLE 2
/***********************************************************/
/* Structs */
/***********************************************************/
diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index e077d2508727..f7f9aa807264 100644
--- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -52,7 +52,6 @@
#include
#include
#include
-#include
#include
#include
@@ -212,10 +211,6 @@ static DEFINE_PCI_DEVICE_TABLE(bnx2x_pci_tbl) = {
MODULE_DEVICE_TABLE(pci, bnx2x_pci_tbl);
-/* Global resources for unloading a previously loaded device */
-#define BNX2X_PREV_WAIT_NEEDED 1
-static DEFINE_SEMAPHORE(bnx2x_prev_sem);
-static LIST_HEAD(bnx2x_prev_list);
/****************************************************************************
* General service functions
****************************************************************************/
@@ -8817,371 +8812,109 @@ static inline void bnx2x_undi_int_disable(struct bnx2x *bp)
bnx2x_undi_int_disable_e1h(bp);
}
-static void __devinit bnx2x_prev_unload_close_mac(struct bnx2x *bp)
+static void __devinit bnx2x_undi_unload(struct bnx2x *bp)
{
- u32 val, base_addr, offset, mask, reset_reg;
- bool mac_stopped = false;
- u8 port = BP_PORT(bp);
-
- reset_reg = REG_RD(bp, MISC_REG_RESET_REG_2);
-
- if (!CHIP_IS_E3(bp)) {
- val = REG_RD(bp, NIG_REG_BMAC0_REGS_OUT_EN + port * 4);
- mask = MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port;
- if ((mask & reset_reg) && val) {
- u32 wb_data[2];
- BNX2X_DEV_INFO("Disable bmac Rx\n");
- base_addr = BP_PORT(bp) ? NIG_REG_INGRESS_BMAC1_MEM
- : NIG_REG_INGRESS_BMAC0_MEM;
- offset = CHIP_IS_E2(bp) ? BIGMAC2_REGISTER_BMAC_CONTROL
- : BIGMAC_REGISTER_BMAC_CONTROL;
-
- /*
- * use rd/wr since we cannot use dmae. This is safe
- * since MCP won't access the bus due to the request
- * to unload, and no function on the path can be
- * loaded at this time.
- */
- wb_data[0] = REG_RD(bp, base_addr + offset);
- wb_data[1] = REG_RD(bp, base_addr + offset + 0x4);
- wb_data[0] &= ~BMAC_CONTROL_RX_ENABLE;
- REG_WR(bp, base_addr + offset, wb_data[0]);
- REG_WR(bp, base_addr + offset + 0x4, wb_data[1]);
-
- }
- BNX2X_DEV_INFO("Disable emac Rx\n");
- REG_WR(bp, NIG_REG_NIG_EMAC0_EN + BP_PORT(bp)*4, 0);
-
- mac_stopped = true;
- } else {
- if (reset_reg & MISC_REGISTERS_RESET_REG_2_XMAC) {
- BNX2X_DEV_INFO("Disable xmac Rx\n");
- base_addr = BP_PORT(bp) ? GRCBASE_XMAC1 : GRCBASE_XMAC0;
- val = REG_RD(bp, base_addr + XMAC_REG_PFC_CTRL_HI);
- REG_WR(bp, base_addr + XMAC_REG_PFC_CTRL_HI,
- val & ~(1 << 1));
- REG_WR(bp, base_addr + XMAC_REG_PFC_CTRL_HI,
- val | (1 << 1));
- REG_WR(bp, base_addr + XMAC_REG_CTRL, 0);
- mac_stopped = true;
- }
- mask = MISC_REGISTERS_RESET_REG_2_UMAC0 << port;
- if (mask & reset_reg) {
- BNX2X_DEV_INFO("Disable umac Rx\n");
- base_addr = BP_PORT(bp) ? GRCBASE_UMAC1 : GRCBASE_UMAC0;
- REG_WR(bp, base_addr + UMAC_REG_COMMAND_CONFIG, 0);
- mac_stopped = true;
- }
- }
-
- if (mac_stopped)
- msleep(20);
-
-}
-
-#define BNX2X_PREV_UNDI_PROD_ADDR(p) (BAR_TSTRORM_INTMEM + 0x1508 + ((p) << 4))
-#define BNX2X_PREV_UNDI_RCQ(val) ((val) & 0xffff)
-#define BNX2X_PREV_UNDI_BD(val) ((val) >> 16 & 0xffff)
-#define BNX2X_PREV_UNDI_PROD(rcq, bd) ((bd) << 16 | (rcq))
-
-static void __devinit bnx2x_prev_unload_undi_inc(struct bnx2x *bp, u8 port,
- u8 inc)
-{
- u16 rcq, bd;
- u32 tmp_reg = REG_RD(bp, BNX2X_PREV_UNDI_PROD_ADDR(port));
-
- rcq = BNX2X_PREV_UNDI_RCQ(tmp_reg) + inc;
- bd = BNX2X_PREV_UNDI_BD(tmp_reg) + inc;
-
- tmp_reg = BNX2X_PREV_UNDI_PROD(rcq, bd);
- REG_WR(bp, BNX2X_PREV_UNDI_PROD_ADDR(port), tmp_reg);
-
- BNX2X_DEV_INFO("UNDI producer [%d] rings bd -> 0x%04x, rcq -> 0x%04x\n",
- port, bd, rcq);
-}
-
-static int __devinit bnx2x_prev_mcp_done(struct bnx2x *bp)
-{
- u32 rc = bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, 0);
- if (!rc) {
- BNX2X_ERR("MCP response failure, aborting\n");
- return -EBUSY;
- }
-
- return 0;
-}
-
-static bool __devinit bnx2x_prev_is_path_marked(struct bnx2x *bp)
-{
- struct bnx2x_prev_path_list *tmp_list;
- int rc = false;
-
- if (down_trylock(&bnx2x_prev_sem))
- return false;
-
- list_for_each_entry(tmp_list, &bnx2x_prev_list, list) {
- if (PCI_SLOT(bp->pdev->devfn) == tmp_list->slot &&
- bp->pdev->bus->number == tmp_list->bus &&
- BP_PATH(bp) == tmp_list->path) {
- rc = true;
- BNX2X_DEV_INFO("Path %d was already cleaned from previous drivers\n",
- BP_PATH(bp));
- break;
- }
- }
-
- up(&bnx2x_prev_sem);
-
- return rc;
-}
-
-static int __devinit bnx2x_prev_mark_path(struct bnx2x *bp)
-{
- struct bnx2x_prev_path_list *tmp_list;
- int rc;
-
- tmp_list = (struct bnx2x_prev_path_list *)
- kmalloc(sizeof(struct bnx2x_prev_path_list), GFP_KERNEL);
- if (!tmp_list) {
- BNX2X_ERR("Failed to allocate 'bnx2x_prev_path_list'\n");
- return -ENOMEM;
- }
-
- tmp_list->bus = bp->pdev->bus->number;
- tmp_list->slot = PCI_SLOT(bp->pdev->devfn);
- tmp_list->path = BP_PATH(bp);
-
- rc = down_interruptible(&bnx2x_prev_sem);
- if (rc) {
- BNX2X_ERR("Received %d when tried to take lock\n", rc);
- kfree(tmp_list);
- } else {
- BNX2X_DEV_INFO("Marked path [%d] - finished previous unload\n",
- BP_PATH(bp));
- list_add(&tmp_list->list, &bnx2x_prev_list);
- up(&bnx2x_prev_sem);
- }
-
- return rc;
-}
-
-static bool __devinit bnx2x_can_flr(struct bnx2x *bp)
-{
- int pos;
- u32 cap;
- struct pci_dev *dev = bp->pdev;
-
- pos = pci_pcie_cap(dev);
- if (!pos)
- return false;
-
- pci_read_config_dword(dev, pos + PCI_EXP_DEVCAP, &cap);
- if (!(cap & PCI_EXP_DEVCAP_FLR))
- return false;
-
- return true;
-}
-
-static int __devinit bnx2x_do_flr(struct bnx2x *bp)
-{
- int i, pos;
- u16 status;
- struct pci_dev *dev = bp->pdev;
-
- /* probe the capability first */
- if (bnx2x_can_flr(bp))
- return -ENOTTY;
-
- pos = pci_pcie_cap(dev);
- if (!pos)
- return -ENOTTY;
-
- /* Wait for Transaction Pending bit clean */
- for (i = 0; i < 4; i++) {
- if (i)
- msleep((1 << (i - 1)) * 100);
-
- pci_read_config_word(dev, pos + PCI_EXP_DEVSTA, &status);
- if (!(status & PCI_EXP_DEVSTA_TRPND))
- goto clear;
- }
-
- dev_err(&dev->dev,
- "transaction is not cleared; proceeding with reset anyway\n");
-
-clear:
- if (bp->common.bc_ver < REQ_BC_VER_4_INITIATE_FLR) {
- BNX2X_ERR("FLR not supported by BC_VER: 0x%x\n",
- bp->common.bc_ver);
- return -EINVAL;
- }
-
- bnx2x_fw_command(bp, DRV_MSG_CODE_INITIATE_FLR, 0);
-
- return 0;
-}
-
-static int __devinit bnx2x_prev_unload_uncommon(struct bnx2x *bp)
-{
- int rc;
-
- BNX2X_DEV_INFO("Uncommon unload Flow\n");
-
- /* Test if previous unload process was already finished for this path */
- if (bnx2x_prev_is_path_marked(bp))
- return bnx2x_prev_mcp_done(bp);
-
- /* If function has FLR capabilities, and existing FW version matches
- * the one required, then FLR will be sufficient to clean any residue
- * left by previous driver
- */
- if (bnx2x_test_firmware_version(bp, false) && bnx2x_can_flr(bp))
- return bnx2x_do_flr(bp);
-
- /* Close the MCP request, return failure*/
- rc = bnx2x_prev_mcp_done(bp);
- if (!rc)
- rc = BNX2X_PREV_WAIT_NEEDED;
-
- return rc;
-}
-
-static int __devinit bnx2x_prev_unload_common(struct bnx2x *bp)
-{
- u32 reset_reg, tmp_reg = 0, rc;
- /* It is possible a previous function received 'common' answer,
- * but hasn't loaded yet, therefore creating a scenario of
- * multiple functions receiving 'common' on the same path.
- */
- BNX2X_DEV_INFO("Common unload Flow\n");
-
- if (bnx2x_prev_is_path_marked(bp))
- return bnx2x_prev_mcp_done(bp);
-
- reset_reg = REG_RD(bp, MISC_REG_RESET_REG_1);
+ u32 val;
- /* Reset should be performed after BRB is emptied */
- if (reset_reg & MISC_REGISTERS_RESET_REG_1_RST_BRB1) {
- u32 timer_count = 1000;
- bool prev_undi = false;
+ /* possibly another driver is trying to reset the chip */
+ bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_RESET);
- /* Close the MAC Rx to prevent BRB from filling up */
- bnx2x_prev_unload_close_mac(bp);
+ /* check if doorbell queue is reset */
+ if (REG_RD(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET)
+ & MISC_REGISTERS_RESET_REG_1_RST_DORQ) {
- /* Check if the UNDI driver was previously loaded
+ /*
+ * Check if it is the UNDI driver
* UNDI driver initializes CID offset for normal bell to 0x7
*/
- reset_reg = REG_RD(bp, MISC_REG_RESET_REG_1);
- if (reset_reg & MISC_REGISTERS_RESET_REG_1_RST_DORQ) {
- tmp_reg = REG_RD(bp, DORQ_REG_NORM_CID_OFST);
- if (tmp_reg == 0x7) {
- BNX2X_DEV_INFO("UNDI previously loaded\n");
- prev_undi = true;
- /* clear the UNDI indication */
- REG_WR(bp, DORQ_REG_NORM_CID_OFST, 0);
+ val = REG_RD(bp, DORQ_REG_NORM_CID_OFST);
+ if (val == 0x7) {
+ u32 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
+ /* save our pf_num */
+ int orig_pf_num = bp->pf_num;
+ int port;
+ u32 swap_en, swap_val, value;
+
+ /* clear the UNDI indication */
+ REG_WR(bp, DORQ_REG_NORM_CID_OFST, 0);
+
+ BNX2X_DEV_INFO("UNDI is active! reset device\n");
+
+ /* try unload UNDI on port 0 */
+ bp->pf_num = 0;
+ bp->fw_seq =
+ (SHMEM_RD(bp, func_mb[bp->pf_num].drv_mb_header) &
+ DRV_MSG_SEQ_NUMBER_MASK);
+ reset_code = bnx2x_fw_command(bp, reset_code, 0);
+
+ /* if UNDI is loaded on the other port */
+ if (reset_code != FW_MSG_CODE_DRV_UNLOAD_COMMON) {
+
+ /* send "DONE" for previous unload */
+ bnx2x_fw_command(bp,
+ DRV_MSG_CODE_UNLOAD_DONE, 0);
+
+ /* unload UNDI on port 1 */
+ bp->pf_num = 1;
+ bp->fw_seq =
+ (SHMEM_RD(bp, func_mb[bp->pf_num].drv_mb_header) &
+ DRV_MSG_SEQ_NUMBER_MASK);
+ reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
+
+ bnx2x_fw_command(bp, reset_code, 0);
}
- }
- /* wait until BRB is empty */
- tmp_reg = REG_RD(bp, BRB1_REG_NUM_OF_FULL_BLOCKS);
- while (timer_count) {
- u32 prev_brb = tmp_reg;
- tmp_reg = REG_RD(bp, BRB1_REG_NUM_OF_FULL_BLOCKS);
- if (!tmp_reg)
- break;
-
- BNX2X_DEV_INFO("BRB still has 0x%08x\n", tmp_reg);
-
- /* reset timer as long as BRB actually gets emptied */
- if (prev_brb > tmp_reg)
- timer_count = 1000;
- else
- timer_count--;
-
- /* If UNDI resides in memory, manually increment it */
- if (prev_undi)
- bnx2x_prev_unload_undi_inc(bp, BP_PORT(bp), 1);
-
- udelay(10);
- }
-
- if (!timer_count)
- BNX2X_ERR("Failed to empty BRB, hope for the best\n");
-
- }
-
- /* No packets are in the pipeline, path is ready for reset */
- bnx2x_reset_common(bp);
-
- rc = bnx2x_prev_mark_path(bp);
- if (rc) {
- bnx2x_prev_mcp_done(bp);
- return rc;
- }
-
- return bnx2x_prev_mcp_done(bp);
-}
-
-static int __devinit bnx2x_prev_unload(struct bnx2x *bp)
-{
- int time_counter = 10;
- u32 rc, fw, hw_lock_reg, hw_lock_val;
- BNX2X_DEV_INFO("Entering Previous Unload Flow\n");
-
- /* Release previously held locks */
- hw_lock_reg = (BP_FUNC(bp) <= 5) ?
- (MISC_REG_DRIVER_CONTROL_1 + BP_FUNC(bp) * 8) :
- (MISC_REG_DRIVER_CONTROL_7 + (BP_FUNC(bp) - 6) * 8);
-
- hw_lock_val = (REG_RD(bp, hw_lock_reg));
- if (hw_lock_val) {
- if (hw_lock_val & HW_LOCK_RESOURCE_NVRAM) {
- BNX2X_DEV_INFO("Release Previously held NVRAM lock\n");
- REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB,
- (MCPR_NVM_SW_ARB_ARB_REQ_CLR1 << BP_PORT(bp)));
- }
-
- BNX2X_DEV_INFO("Release Previously held hw lock\n");
- REG_WR(bp, hw_lock_reg, 0xffffffff);
- } else
- BNX2X_DEV_INFO("No need to release hw/nvram locks\n");
+ bnx2x_undi_int_disable(bp);
+ port = BP_PORT(bp);
+
+ /* close input traffic and wait for it */
+ /* Do not rcv packets to BRB */
+ REG_WR(bp, (port ? NIG_REG_LLH1_BRB1_DRV_MASK :
+ NIG_REG_LLH0_BRB1_DRV_MASK), 0x0);
+ /* Do not direct rcv packets that are not for MCP to
+ * the BRB */
+ REG_WR(bp, (port ? NIG_REG_LLH1_BRB1_NOT_MCP :
+ NIG_REG_LLH0_BRB1_NOT_MCP), 0x0);
+ /* clear AEU */
+ REG_WR(bp, (port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 :
+ MISC_REG_AEU_MASK_ATTN_FUNC_0), 0);
+ msleep(10);
+
+ /* save NIG port swap info */
+ swap_val = REG_RD(bp, NIG_REG_PORT_SWAP);
+ swap_en = REG_RD(bp, NIG_REG_STRAP_OVERRIDE);
+ /* reset device */
+ REG_WR(bp,
+ GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR,
+ 0xd3ffffff);
+
+ value = 0x1400;
+ if (CHIP_IS_E3(bp)) {
+ value |= MISC_REGISTERS_RESET_REG_2_MSTAT0;
+ value |= MISC_REGISTERS_RESET_REG_2_MSTAT1;
+ }
- if (MCPR_ACCESS_LOCK_LOCK & REG_RD(bp, MCP_REG_MCPR_ACCESS_LOCK)) {
- BNX2X_DEV_INFO("Release previously held alr\n");
- REG_WR(bp, MCP_REG_MCPR_ACCESS_LOCK, 0);
- }
+ REG_WR(bp,
+ GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR,
+ value);
+ /* take the NIG out of reset and restore swap values */
+ REG_WR(bp,
+ GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET,
+ MISC_REGISTERS_RESET_REG_1_RST_NIG);
+ REG_WR(bp, NIG_REG_PORT_SWAP, swap_val);
+ REG_WR(bp, NIG_REG_STRAP_OVERRIDE, swap_en);
- do {
- /* Lock MCP using an unload request */
- fw = bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS, 0);
- if (!fw) {
- BNX2X_ERR("MCP response failure, aborting\n");
- rc = -EBUSY;
- break;
- }
+ /* send unload done to the MCP */
+ bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, 0);
- if (fw == FW_MSG_CODE_DRV_UNLOAD_COMMON) {
- rc = bnx2x_prev_unload_common(bp);
- break;
+ /* restore our func and fw_seq */
+ bp->pf_num = orig_pf_num;
}
-
- /* non-common reply from MCP night require looping */
- rc = bnx2x_prev_unload_uncommon(bp);
- if (rc != BNX2X_PREV_WAIT_NEEDED)
- break;
-
- msleep(20);
- } while (--time_counter);
-
- if (!time_counter || rc) {
- BNX2X_ERR("Failed unloading previous driver, aborting\n");
- rc = -EBUSY;
}
- BNX2X_DEV_INFO("Finished Previous Unload Flow [%d]\n", rc);
-
- return rc;
+ /* now it's safe to release the lock */
+ bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RESET);
}
static void __devinit bnx2x_get_common_hwinfo(struct bnx2x *bp)
@@ -10367,16 +10100,8 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp)
func = BP_FUNC(bp);
/* need to reset chip if undi was active */
- if (!BP_NOMCP(bp)) {
- /* init fw_seq */
- bp->fw_seq =
- SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_mb_header) &
- DRV_MSG_SEQ_NUMBER_MASK;
- BNX2X_DEV_INFO("fw_seq 0x%08x\n", bp->fw_seq);
-
- bnx2x_prev_unload(bp);
- }
-
+ if (!BP_NOMCP(bp))
+ bnx2x_undi_unload(bp);
if (CHIP_REV_IS_FPGA(bp))
dev_err(&bp->pdev->dev, "FPGA detected\n");
@@ -11706,18 +11431,9 @@ static int __init bnx2x_init(void)
static void __exit bnx2x_cleanup(void)
{
- struct list_head *pos, *q;
pci_unregister_driver(&bnx2x_pci_driver);
destroy_workqueue(bnx2x_wq);
-
- /* Free globablly allocated resources */
- list_for_each_safe(pos, q, &bnx2x_prev_list) {
- struct bnx2x_prev_path_list *tmp =
- list_entry(pos, struct bnx2x_prev_path_list, list);
- list_del(pos);
- kfree(tmp);
- }
}
void bnx2x_notify_link_changed(struct bnx2x *bp)
diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
index ab0a250f95fa..fd7fb4581849 100644
--- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
+++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
@@ -987,7 +987,6 @@
* clear; 1 = set. Data valid only in addresses 0-4. all the rest are zero. */
#define IGU_REG_WRITE_DONE_PENDING 0x130480
#define MCP_A_REG_MCPR_SCRATCH 0x3a0000
-#define MCP_REG_MCPR_ACCESS_LOCK 0x8009c
#define MCP_REG_MCPR_CPU_PROGRAM_COUNTER 0x8501c
#define MCP_REG_MCPR_GP_INPUTS 0x800c0
#define MCP_REG_MCPR_GP_OENABLE 0x800c8
@@ -1687,7 +1686,6 @@
[10] rst_dbg; [11] rst_misc_core; [12] rst_dbue (UART); [13]
Pci_resetmdio_n; [14] rst_emac0_hard_core; [15] rst_emac1_hard_core; 16]
rst_pxp_rq_rd_wr; 31:17] reserved */
-#define MISC_REG_RESET_REG_1 0xa580
#define MISC_REG_RESET_REG_2 0xa590
/* [RW 20] 20 bit GRC address where the scratch-pad of the MCP that is
shared with the driver resides */
@@ -5608,7 +5606,6 @@
/* [RC 32] Parity register #0 read clear */
#define XSEM_REG_XSEM_PRTY_STS_CLR_0 0x280128
#define XSEM_REG_XSEM_PRTY_STS_CLR_1 0x280138
-#define MCPR_ACCESS_LOCK_LOCK (1L<<31)
#define MCPR_NVM_ACCESS_ENABLE_EN (1L<<0)
#define MCPR_NVM_ACCESS_ENABLE_WR_EN (1L<<1)
#define MCPR_NVM_ADDR_NVM_ADDR_VALUE (0xffffffL<<0)
@@ -5735,7 +5732,6 @@
#define MISC_REGISTERS_GPIO_PORT_SHIFT 4
#define MISC_REGISTERS_GPIO_SET_POS 8
#define MISC_REGISTERS_RESET_REG_1_CLEAR 0x588
-#define MISC_REGISTERS_RESET_REG_1_RST_BRB1 (0x1<<0)
#define MISC_REGISTERS_RESET_REG_1_RST_DORQ (0x1<<19)
#define MISC_REGISTERS_RESET_REG_1_RST_HC (0x1<<29)
#define MISC_REGISTERS_RESET_REG_1_RST_NIG (0x1<<7)
diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
index 513573321625..3f52fadee3ed 100644
--- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
+++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
@@ -3847,7 +3847,7 @@ static bool bnx2x_credit_pool_get_entry(
continue;
/* If we've got here we are going to find a free entry */
- for (idx = vec * BIT_VEC64_ELEM_SZ, i = 0;
+ for (idx = vec * BNX2X_POOL_VEC_SIZE, i = 0;
i < BIT_VEC64_ELEM_SZ; idx++, i++)
if (BIT_VEC64_TEST_BIT(o->pool_mirror, idx)) {
diff --git a/trunk/drivers/net/ethernet/broadcom/tg3.c b/trunk/drivers/net/ethernet/broadcom/tg3.c
index 062ac333fde6..4e4bb3875868 100644
--- a/trunk/drivers/net/ethernet/broadcom/tg3.c
+++ b/trunk/drivers/net/ethernet/broadcom/tg3.c
@@ -2778,9 +2778,7 @@ static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 &&
- (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) ||
- (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 &&
- !tp->pci_fn))
+ (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
return;
if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/trunk/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index b126b98065a9..05ff076af06d 100644
--- a/trunk/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/trunk/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -2000,6 +2000,13 @@ static const struct ethtool_ops cxgb_ethtool_ops = {
/*
* debugfs support
*/
+
+static int mem_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t mem_read(struct file *file, char __user *buf, size_t count,
loff_t *ppos)
{
@@ -2043,7 +2050,7 @@ static ssize_t mem_read(struct file *file, char __user *buf, size_t count,
static const struct file_operations mem_debugfs_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = mem_open,
.read = mem_read,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/trunk/drivers/net/ethernet/freescale/fsl_pq_mdio.c
index f7f0bf5d037b..9eb815941df5 100644
--- a/trunk/drivers/net/ethernet/freescale/fsl_pq_mdio.c
+++ b/trunk/drivers/net/ethernet/freescale/fsl_pq_mdio.c
@@ -356,13 +356,13 @@ static int fsl_pq_mdio_probe(struct platform_device *ofdev)
if (prop)
tbiaddr = *prop;
+ }
- if (tbiaddr == -1) {
- err = -EBUSY;
- goto err_free_irqs;
- } else {
- out_be32(tbipa, tbiaddr);
- }
+ if (tbiaddr == -1) {
+ err = -EBUSY;
+ goto err_free_irqs;
+ } else {
+ out_be32(tbipa, tbiaddr);
}
err = of_mdiobus_register(new_bus, np);
diff --git a/trunk/drivers/net/ethernet/freescale/ucc_geth.c b/trunk/drivers/net/ethernet/freescale/ucc_geth.c
index 17a46e76123f..4e3cd2f8debb 100644
--- a/trunk/drivers/net/ethernet/freescale/ucc_geth.c
+++ b/trunk/drivers/net/ethernet/freescale/ucc_geth.c
@@ -3945,8 +3945,6 @@ static int ucc_geth_probe(struct platform_device* ofdev)
}
if (max_speed == SPEED_1000) {
- unsigned int snums = qe_get_num_of_snums();
-
/* configure muram FIFOs for gigabit operation */
ug_info->uf_info.urfs = UCC_GETH_URFS_GIGA_INIT;
ug_info->uf_info.urfet = UCC_GETH_URFET_GIGA_INIT;
@@ -3956,11 +3954,11 @@ static int ucc_geth_probe(struct platform_device* ofdev)
ug_info->uf_info.utftt = UCC_GETH_UTFTT_GIGA_INIT;
ug_info->numThreadsTx = UCC_GETH_NUM_OF_THREADS_4;
- /* If QE's snum number is 46/76 which means we need to support
+ /* If QE's snum number is 46 which means we need to support
* 4 UECs at 1000Base-T simultaneously, we need to allocate
* more Threads to Rx.
*/
- if ((snums == 76) || (snums == 46))
+ if (qe_get_num_of_snums() == 46)
ug_info->numThreadsRx = UCC_GETH_NUM_OF_THREADS_6;
else
ug_info->numThreadsRx = UCC_GETH_NUM_OF_THREADS_4;
diff --git a/trunk/drivers/net/ethernet/intel/e1000/e1000_main.c b/trunk/drivers/net/ethernet/intel/e1000/e1000_main.c
index 4348b6fd44fa..0e9aec8f6917 100644
--- a/trunk/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/trunk/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -164,8 +164,6 @@ static int e1000_82547_fifo_workaround(struct e1000_adapter *adapter,
static bool e1000_vlan_used(struct e1000_adapter *adapter);
static void e1000_vlan_mode(struct net_device *netdev,
netdev_features_t features);
-static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter,
- bool filter_on);
static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid);
static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid);
static void e1000_restore_vlan(struct e1000_adapter *adapter);
@@ -217,8 +215,7 @@ MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");
MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_VERSION);
-#define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)
-static int debug = -1;
+static int debug = NETIF_MSG_DRV | NETIF_MSG_PROBE;
module_param(debug, int, 0);
MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
@@ -982,7 +979,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
adapter = netdev_priv(netdev);
adapter->netdev = netdev;
adapter->pdev = pdev;
- adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
+ adapter->msg_enable = (1 << debug) - 1;
adapter->bars = bars;
adapter->need_ioport = need_ioport;
@@ -1217,7 +1214,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
if (err)
goto err_register;
- e1000_vlan_filter_on_off(adapter, false);
+ e1000_vlan_mode(netdev, netdev->features);
/* print bus type/speed/width info */
e_info(probe, "(PCI%s:%dMHz:%d-bit) %pM\n",
@@ -4773,22 +4770,6 @@ static bool e1000_vlan_used(struct e1000_adapter *adapter)
return false;
}
-static void __e1000_vlan_mode(struct e1000_adapter *adapter,
- netdev_features_t features)
-{
- struct e1000_hw *hw = &adapter->hw;
- u32 ctrl;
-
- ctrl = er32(CTRL);
- if (features & NETIF_F_HW_VLAN_RX) {
- /* enable VLAN tag insert/strip */
- ctrl |= E1000_CTRL_VME;
- } else {
- /* disable VLAN tag insert/strip */
- ctrl &= ~E1000_CTRL_VME;
- }
- ew32(CTRL, ctrl);
-}
static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter,
bool filter_on)
{
@@ -4798,7 +4779,6 @@ static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter,
if (!test_bit(__E1000_DOWN, &adapter->flags))
e1000_irq_disable(adapter);
- __e1000_vlan_mode(adapter, adapter->netdev->features);
if (filter_on) {
/* enable VLAN receive filtering */
rctl = er32(RCTL);
@@ -4819,14 +4799,24 @@ static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter,
}
static void e1000_vlan_mode(struct net_device *netdev,
- netdev_features_t features)
+ netdev_features_t features)
{
struct e1000_adapter *adapter = netdev_priv(netdev);
+ struct e1000_hw *hw = &adapter->hw;
+ u32 ctrl;
if (!test_bit(__E1000_DOWN, &adapter->flags))
e1000_irq_disable(adapter);
- __e1000_vlan_mode(adapter, features);
+ ctrl = er32(CTRL);
+ if (features & NETIF_F_HW_VLAN_RX) {
+ /* enable VLAN tag insert/strip */
+ ctrl |= E1000_CTRL_VME;
+ } else {
+ /* disable VLAN tag insert/strip */
+ ctrl &= ~E1000_CTRL_VME;
+ }
+ ew32(CTRL, ctrl);
if (!test_bit(__E1000_DOWN, &adapter->flags))
e1000_irq_enable(adapter);
diff --git a/trunk/drivers/net/ethernet/intel/e1000e/netdev.c b/trunk/drivers/net/ethernet/intel/e1000e/netdev.c
index 2c38a65ade87..7152eb11b7b9 100644
--- a/trunk/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/trunk/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -60,11 +60,6 @@
char e1000e_driver_name[] = "e1000e";
const char e1000e_driver_version[] = DRV_VERSION;
-#define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)
-static int debug = -1;
-module_param(debug, int, 0);
-MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
-
static void e1000e_disable_aspm(struct pci_dev *pdev, u16 state);
static const struct e1000_info *e1000_info_tbl[] = {
@@ -6177,7 +6172,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
adapter->hw.adapter = adapter;
adapter->hw.mac.type = ei->mac;
adapter->max_hw_frame_size = ei->max_hw_frame_size;
- adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
+ adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1;
mmio_start = pci_resource_start(pdev, 0);
mmio_len = pci_resource_len(pdev, 0);
diff --git a/trunk/drivers/net/ethernet/intel/igb/igb_main.c b/trunk/drivers/net/ethernet/intel/igb/igb_main.c
index 5ec31598ee47..c4902411d749 100644
--- a/trunk/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/trunk/drivers/net/ethernet/intel/igb/igb_main.c
@@ -238,11 +238,6 @@ MODULE_DESCRIPTION("Intel(R) Gigabit Ethernet Network Driver");
MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_VERSION);
-#define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)
-static int debug = -1;
-module_param(debug, int, 0);
-MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
-
struct igb_reg_info {
u32 ofs;
char *name;
@@ -1898,7 +1893,7 @@ static int __devinit igb_probe(struct pci_dev *pdev,
adapter->pdev = pdev;
hw = &adapter->hw;
hw->back = adapter;
- adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
+ adapter->msg_enable = NETIF_MSG_DRV | NETIF_MSG_PROBE;
mmio_start = pci_resource_start(pdev, 0);
mmio_len = pci_resource_len(pdev, 0);
diff --git a/trunk/drivers/net/ethernet/intel/igbvf/netdev.c b/trunk/drivers/net/ethernet/intel/igbvf/netdev.c
index d61ca2a732f0..217c143686d2 100644
--- a/trunk/drivers/net/ethernet/intel/igbvf/netdev.c
+++ b/trunk/drivers/net/ethernet/intel/igbvf/netdev.c
@@ -55,11 +55,6 @@ static const char igbvf_driver_string[] =
static const char igbvf_copyright[] =
"Copyright (c) 2009 - 2012 Intel Corporation.";
-#define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)
-static int debug = -1;
-module_param(debug, int, 0);
-MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
-
static int igbvf_poll(struct napi_struct *napi, int budget);
static void igbvf_reset(struct igbvf_adapter *);
static void igbvf_set_interrupt_capability(struct igbvf_adapter *);
@@ -2654,7 +2649,7 @@ static int __devinit igbvf_probe(struct pci_dev *pdev,
adapter->flags = ei->flags;
adapter->hw.back = adapter;
adapter->hw.mac.type = ei->mac;
- adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
+ adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1;
/* PCI config space info */
diff --git a/trunk/drivers/net/ethernet/intel/ixgb/ixgb_main.c b/trunk/drivers/net/ethernet/intel/ixgb/ixgb_main.c
index 5fce363d810a..82aaa792cbf3 100644
--- a/trunk/drivers/net/ethernet/intel/ixgb/ixgb_main.c
+++ b/trunk/drivers/net/ethernet/intel/ixgb/ixgb_main.c
@@ -134,8 +134,8 @@ MODULE_DESCRIPTION("Intel(R) PRO/10GbE Network Driver");
MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_VERSION);
-#define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)
-static int debug = -1;
+#define DEFAULT_DEBUG_LEVEL_SHIFT 3
+static int debug = DEFAULT_DEBUG_LEVEL_SHIFT;
module_param(debug, int, 0);
MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
@@ -442,7 +442,7 @@ ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
adapter->netdev = netdev;
adapter->pdev = pdev;
adapter->hw.back = adapter;
- adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
+ adapter->msg_enable = netif_msg_init(debug, DEFAULT_DEBUG_LEVEL_SHIFT);
adapter->hw.hw_addr = pci_ioremap_bar(pdev, BAR_0);
if (!adapter->hw.hw_addr) {
diff --git a/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index 74e192107f9a..80e26ff30ebf 100644
--- a/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -544,7 +544,7 @@ struct ixgbe_fdir_filter {
u16 action;
};
-enum ixgbe_state_t {
+enum ixbge_state_t {
__IXGBE_TESTING,
__IXGBE_RESETTING,
__IXGBE_DOWN,
diff --git a/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 3e26b1f9ac75..398fc223cab9 100644
--- a/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -63,8 +63,8 @@ static char ixgbe_default_device_descr[] =
"Intel(R) 10 Gigabit Network Connection";
#endif
#define MAJ 3
-#define MIN 8
-#define BUILD 21
+#define MIN 6
+#define BUILD 7
#define DRV_VERSION __stringify(MAJ) "." __stringify(MIN) "." \
__stringify(BUILD) "-k"
const char ixgbe_driver_version[] = DRV_VERSION;
@@ -141,16 +141,13 @@ module_param(allow_unsupported_sfp, uint, 0);
MODULE_PARM_DESC(allow_unsupported_sfp,
"Allow unsupported and untested SFP+ modules on 82599-based adapters");
-#define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)
-static int debug = -1;
-module_param(debug, int, 0);
-MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
-
MODULE_AUTHOR("Intel Corporation, ");
MODULE_DESCRIPTION("Intel(R) 10 Gigabit PCI Express Network Driver");
MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_VERSION);
+#define DEFAULT_DEBUG_LEVEL_SHIFT 3
+
static void ixgbe_service_event_schedule(struct ixgbe_adapter *adapter)
{
if (!test_bit(__IXGBE_DOWN, &adapter->state) &&
@@ -6837,7 +6834,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
adapter->pdev = pdev;
hw = &adapter->hw;
hw->back = adapter;
- adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
+ adapter->msg_enable = (1 << DEFAULT_DEBUG_LEVEL_SHIFT) - 1;
hw->hw_addr = ioremap(pci_resource_start(pdev, 0),
pci_resource_len(pdev, 0));
diff --git a/trunk/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/trunk/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index 307611ae831d..581c65976bb4 100644
--- a/trunk/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/trunk/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -91,10 +91,7 @@ MODULE_DESCRIPTION("Intel(R) 82599 Virtual Function Driver");
MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_VERSION);
-#define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)
-static int debug = -1;
-module_param(debug, int, 0);
-MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
+#define DEFAULT_DEBUG_LEVEL_SHIFT 3
/* forward decls */
static void ixgbevf_set_itr_msix(struct ixgbevf_q_vector *q_vector);
@@ -3370,7 +3367,7 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,
adapter->pdev = pdev;
hw = &adapter->hw;
hw->back = adapter;
- adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
+ adapter->msg_enable = (1 << DEFAULT_DEBUG_LEVEL_SHIFT) - 1;
/*
* call save state here in standalone driver because it relies on
diff --git a/trunk/drivers/net/ethernet/marvell/sky2.c b/trunk/drivers/net/ethernet/marvell/sky2.c
index b806d9b4defb..423a1a2a702e 100644
--- a/trunk/drivers/net/ethernet/marvell/sky2.c
+++ b/trunk/drivers/net/ethernet/marvell/sky2.c
@@ -1767,14 +1767,13 @@ static int sky2_open(struct net_device *dev)
sky2_hw_up(sky2);
- /* Enable interrupts from phy/mac for port */
- imask = sky2_read32(hw, B0_IMSK);
-
if (hw->chip_id == CHIP_ID_YUKON_OPT ||
hw->chip_id == CHIP_ID_YUKON_PRM ||
hw->chip_id == CHIP_ID_YUKON_OP_2)
imask |= Y2_IS_PHY_QLNK; /* enable PHY Quick Link */
+ /* Enable interrupts from phy/mac for port */
+ imask = sky2_read32(hw, B0_IMSK);
imask |= portirq_msk[port];
sky2_write32(hw, B0_IMSK, imask);
sky2_read32(hw, B0_IMSK);
diff --git a/trunk/drivers/net/ethernet/nxp/lpc_eth.c b/trunk/drivers/net/ethernet/nxp/lpc_eth.c
index 6dfc26d85e47..69444247c20b 100644
--- a/trunk/drivers/net/ethernet/nxp/lpc_eth.c
+++ b/trunk/drivers/net/ethernet/nxp/lpc_eth.c
@@ -1441,7 +1441,7 @@ static int lpc_eth_drv_probe(struct platform_device *pdev)
}
#endif
if (!is_valid_ether_addr(ndev->dev_addr))
- eth_hw_addr_random(ndev);
+ dev_hw_addr_random(ndev, ndev->dev_addr);
/* Reset the ethernet controller */
__lpc_eth_reset(pldat);
diff --git a/trunk/drivers/net/ethernet/renesas/Kconfig b/trunk/drivers/net/ethernet/renesas/Kconfig
index 3fb2355af37e..9755b49bbefb 100644
--- a/trunk/drivers/net/ethernet/renesas/Kconfig
+++ b/trunk/drivers/net/ethernet/renesas/Kconfig
@@ -7,8 +7,7 @@ config SH_ETH
depends on SUPERH && \
(CPU_SUBTYPE_SH7710 || CPU_SUBTYPE_SH7712 || \
CPU_SUBTYPE_SH7763 || CPU_SUBTYPE_SH7619 || \
- CPU_SUBTYPE_SH7724 || CPU_SUBTYPE_SH7734 || \
- CPU_SUBTYPE_SH7757)
+ CPU_SUBTYPE_SH7724 || CPU_SUBTYPE_SH7757)
select CRC32
select NET_CORE
select MII
@@ -17,4 +16,4 @@ config SH_ETH
---help---
Renesas SuperH Ethernet device driver.
This driver supporting CPUs are:
- - SH7619, SH7710, SH7712, SH7724, SH7734, SH7763 and SH7757.
+ - SH7710, SH7712, SH7763, SH7619, SH7724, and SH7757.
diff --git a/trunk/drivers/net/ethernet/renesas/sh_eth.c b/trunk/drivers/net/ethernet/renesas/sh_eth.c
index d63e09b29a96..8615961c1287 100644
--- a/trunk/drivers/net/ethernet/renesas/sh_eth.c
+++ b/trunk/drivers/net/ethernet/renesas/sh_eth.c
@@ -1,8 +1,8 @@
/*
* SuperH Ethernet device driver
*
- * Copyright (C) 2006-2012 Nobuhiro Iwamatsu
- * Copyright (C) 2008-2012 Renesas Solutions Corp.
+ * Copyright (C) 2006-2008 Nobuhiro Iwamatsu
+ * Copyright (C) 2008-2009 Renesas Solutions Corp.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
@@ -38,7 +38,6 @@
#include
#include
#include
-#include
#include
#include "sh_eth.h"
@@ -280,9 +279,8 @@ static struct sh_eth_cpu_data *sh_eth_get_cpu_data(struct sh_eth_private *mdp)
return &sh_eth_my_cpu_data;
}
-#elif defined(CONFIG_CPU_SUBTYPE_SH7734) || defined(CONFIG_CPU_SUBTYPE_SH7763)
+#elif defined(CONFIG_CPU_SUBTYPE_SH7763)
#define SH_ETH_HAS_TSU 1
-static void sh_eth_reset_hw_crc(struct net_device *ndev);
static void sh_eth_chip_reset(struct net_device *ndev)
{
struct sh_eth_private *mdp = netdev_priv(ndev);
@@ -316,9 +314,6 @@ static void sh_eth_reset(struct net_device *ndev)
sh_eth_write(ndev, 0x0, RDFAR);
sh_eth_write(ndev, 0x0, RDFXR);
sh_eth_write(ndev, 0x0, RDFFR);
-
- /* Reset HW CRC register */
- sh_eth_reset_hw_crc(ndev);
}
static void sh_eth_set_duplex(struct net_device *ndev)
@@ -375,17 +370,8 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
.no_trimd = 1,
.no_ade = 1,
.tsu = 1,
-#if defined(CONFIG_CPU_SUBTYPE_SH7734)
- .hw_crc = 1,
-#endif
};
-static void sh_eth_reset_hw_crc(struct net_device *ndev)
-{
- if (sh_eth_my_cpu_data.hw_crc)
- sh_eth_write(ndev, 0x0, CSMR);
-}
-
#elif defined(CONFIG_CPU_SUBTYPE_SH7619)
#define SH_ETH_RESET_DEFAULT 1
static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
@@ -804,7 +790,7 @@ static int sh_eth_dev_init(struct net_device *ndev)
/* all sh_eth int mask */
sh_eth_write(ndev, 0, EESIPR);
-#if defined(__LITTLE_ENDIAN)
+#if defined(__LITTLE_ENDIAN__)
if (mdp->cd->hw_swap)
sh_eth_write(ndev, EDMR_EL, EDMR);
else
diff --git a/trunk/drivers/net/ethernet/renesas/sh_eth.h b/trunk/drivers/net/ethernet/renesas/sh_eth.h
index 0fa14afce23d..57dc26261116 100644
--- a/trunk/drivers/net/ethernet/renesas/sh_eth.h
+++ b/trunk/drivers/net/ethernet/renesas/sh_eth.h
@@ -1,8 +1,8 @@
/*
* SuperH Ethernet device driver
*
- * Copyright (C) 2006-2012 Nobuhiro Iwamatsu
- * Copyright (C) 2008-2012 Renesas Solutions Corp.
+ * Copyright (C) 2006-2008 Nobuhiro Iwamatsu
+ * Copyright (C) 2008-2011 Renesas Solutions Corp.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
@@ -98,8 +98,6 @@ enum {
CEECR,
MAFCR,
RTRATE,
- CSMR,
- RMII_MII,
/* TSU Absolute address */
ARSTR,
@@ -174,7 +172,6 @@ static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = {
[RMCR] = 0x0458,
[RPADIR] = 0x0460,
[FCFTR] = 0x0468,
- [CSMR] = 0x04E4,
[ECMR] = 0x0500,
[ECSR] = 0x0510,
@@ -203,7 +200,6 @@ static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = {
[CERCR] = 0x0768,
[CEECR] = 0x0770,
[MAFCR] = 0x0778,
- [RMII_MII] = 0x0790,
[ARSTR] = 0x0000,
[TSU_CTRST] = 0x0004,
@@ -381,7 +377,7 @@ static const u16 sh_eth_offset_fast_sh3_sh2[SH_ETH_MAX_REGISTER_OFFSET] = {
/*
* Register's bits
*/
-#if defined(CONFIG_CPU_SUBTYPE_SH7734) || defined(CONFIG_CPU_SUBTYPE_SH7763)
+#ifdef CONFIG_CPU_SUBTYPE_SH7763
/* EDSR */
enum EDSR_BIT {
EDSR_ENT = 0x01, EDSR_ENR = 0x02,
@@ -693,7 +689,7 @@ enum TSU_FWSLC_BIT {
*/
struct sh_eth_txdesc {
u32 status; /* TD0 */
-#if defined(__LITTLE_ENDIAN)
+#if defined(CONFIG_CPU_LITTLE_ENDIAN)
u16 pad0; /* TD1 */
u16 buffer_length; /* TD1 */
#else
@@ -710,7 +706,7 @@ struct sh_eth_txdesc {
*/
struct sh_eth_rxdesc {
u32 status; /* RD0 */
-#if defined(__LITTLE_ENDIAN)
+#if defined(CONFIG_CPU_LITTLE_ENDIAN)
u16 frame_length; /* RD1 */
u16 buffer_length; /* RD1 */
#else
@@ -755,7 +751,6 @@ struct sh_eth_cpu_data {
unsigned rpadir:1; /* E-DMAC have RPADIR */
unsigned no_trimd:1; /* E-DMAC DO NOT have TRIMD */
unsigned no_ade:1; /* E-DMAC DO NOT have ADE bit in EESR */
- unsigned hw_crc:1; /* E-DMAC have CSMR */
};
struct sh_eth_private {
diff --git a/trunk/drivers/net/ethernet/via/via-rhine.c b/trunk/drivers/net/ethernet/via/via-rhine.c
index fcfa01f7ceb6..39b8cf3dafcd 100644
--- a/trunk/drivers/net/ethernet/via/via-rhine.c
+++ b/trunk/drivers/net/ethernet/via/via-rhine.c
@@ -503,32 +503,30 @@ static int rhine_vlan_rx_add_vid(struct net_device *dev, unsigned short vid);
static int rhine_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid);
static void rhine_restart_tx(struct net_device *dev);
-static void rhine_wait_bit(struct rhine_private *rp, u8 reg, u8 mask, bool low)
+static void rhine_wait_bit(struct rhine_private *rp, u8 reg, u8 mask, bool high)
{
void __iomem *ioaddr = rp->base;
int i;
for (i = 0; i < 1024; i++) {
- bool has_mask_bits = !!(ioread8(ioaddr + reg) & mask);
-
- if (low ^ has_mask_bits)
+ if (high ^ !!(ioread8(ioaddr + reg) & mask))
break;
udelay(10);
}
if (i > 64) {
netif_dbg(rp, hw, rp->dev, "%s bit wait (%02x/%02x) cycle "
- "count: %04d\n", low ? "low" : "high", reg, mask, i);
+ "count: %04d\n", high ? "high" : "low", reg, mask, i);
}
}
static void rhine_wait_bit_high(struct rhine_private *rp, u8 reg, u8 mask)
{
- rhine_wait_bit(rp, reg, mask, false);
+ rhine_wait_bit(rp, reg, mask, true);
}
static void rhine_wait_bit_low(struct rhine_private *rp, u8 reg, u8 mask)
{
- rhine_wait_bit(rp, reg, mask, true);
+ rhine_wait_bit(rp, reg, mask, false);
}
static u32 rhine_get_events(struct rhine_private *rp)
diff --git a/trunk/drivers/net/irda/sa1100_ir.c b/trunk/drivers/net/irda/sa1100_ir.c
index e25067552b20..a0d1913a58d3 100644
--- a/trunk/drivers/net/irda/sa1100_ir.c
+++ b/trunk/drivers/net/irda/sa1100_ir.c
@@ -147,7 +147,7 @@ static void sa1100_irda_dma_start(struct sa1100_buf *buf,
struct dma_async_tx_descriptor *desc;
struct dma_chan *chan = buf->chan;
- desc = dmaengine_prep_slave_sg(chan, &buf->sg, 1, dir,
+ desc = chan->device->device_prep_slave_sg(chan, &buf->sg, 1, dir,
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
if (desc) {
desc->callback = cb;
diff --git a/trunk/drivers/net/rionet.c b/trunk/drivers/net/rionet.c
index 91d25888a1b9..a57f05726b57 100644
--- a/trunk/drivers/net/rionet.c
+++ b/trunk/drivers/net/rionet.c
@@ -375,8 +375,8 @@ static void rionet_remove(struct rio_dev *rdev)
struct net_device *ndev = rio_get_drvdata(rdev);
struct rionet_peer *peer, *tmp;
- free_pages((unsigned long)rionet_active, get_order(sizeof(void *) *
- RIO_MAX_ROUTE_ENTRIES(rdev->net->hport->sys_size)));
+ free_pages((unsigned long)rionet_active, rdev->net->hport->sys_size ?
+ __fls(sizeof(void *)) + 4 : 0);
unregister_netdev(ndev);
free_netdev(ndev);
@@ -432,16 +432,15 @@ static int rionet_setup_netdev(struct rio_mport *mport, struct net_device *ndev)
int rc = 0;
struct rionet_private *rnet;
u16 device_id;
- const size_t rionet_active_bytes = sizeof(void *) *
- RIO_MAX_ROUTE_ENTRIES(mport->sys_size);
rionet_active = (struct rio_dev **)__get_free_pages(GFP_KERNEL,
- get_order(rionet_active_bytes));
+ mport->sys_size ? __fls(sizeof(void *)) + 4 : 0);
if (!rionet_active) {
rc = -ENOMEM;
goto out;
}
- memset((void *)rionet_active, 0, rionet_active_bytes);
+ memset((void *)rionet_active, 0, sizeof(void *) *
+ RIO_MAX_ROUTE_ENTRIES(mport->sys_size));
/* Set up private area */
rnet = netdev_priv(ndev);
diff --git a/trunk/drivers/net/usb/cdc-phonet.c b/trunk/drivers/net/usb/cdc-phonet.c
index 3e41b00c6806..3886b30ed373 100644
--- a/trunk/drivers/net/usb/cdc-phonet.c
+++ b/trunk/drivers/net/usb/cdc-phonet.c
@@ -165,13 +165,13 @@ static void rx_complete(struct urb *req)
memcpy(skb_put(skb, 1), page_address(page), 1);
skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
page, 1, req->actual_length,
- PAGE_SIZE);
+ req->actual_length);
page = NULL;
}
} else {
skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
page, 0, req->actual_length,
- PAGE_SIZE);
+ req->actual_length);
page = NULL;
}
if (req->actual_length < PAGE_SIZE)
diff --git a/trunk/drivers/net/usb/cdc_eem.c b/trunk/drivers/net/usb/cdc_eem.c
index 685a4e22c768..439690be519f 100644
--- a/trunk/drivers/net/usb/cdc_eem.c
+++ b/trunk/drivers/net/usb/cdc_eem.c
@@ -93,7 +93,6 @@ static int eem_bind(struct usbnet *dev, struct usb_interface *intf)
/* no jumbogram (16K) support for now */
dev->net->hard_header_len += EEM_HEAD + ETH_FCS_LEN;
- dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
return 0;
}
diff --git a/trunk/drivers/net/usb/rtl8150.c b/trunk/drivers/net/usb/rtl8150.c
index d363b31053da..6dda2fe5b15b 100644
--- a/trunk/drivers/net/usb/rtl8150.c
+++ b/trunk/drivers/net/usb/rtl8150.c
@@ -59,6 +59,32 @@
#define RTL8150_REQ_SET_REGS 0x05
+/* Transmit status register errors */
+#define TSR_ECOL (1<<5)
+#define TSR_LCOL (1<<4)
+#define TSR_LOSS_CRS (1<<3)
+#define TSR_JBR (1<<2)
+#define TSR_ERRORS (TSR_ECOL | TSR_LCOL | TSR_LOSS_CRS | TSR_JBR)
+/* Receive status register errors */
+#define RSR_CRC (1<<2)
+#define RSR_FAE (1<<1)
+#define RSR_ERRORS (RSR_CRC | RSR_FAE)
+
+/* Media status register definitions */
+#define MSR_DUPLEX (1<<4)
+#define MSR_SPEED (1<<3)
+#define MSR_LINK (1<<2)
+
+/* Interrupt pipe data */
+#define INT_TSR 0x00
+#define INT_RSR 0x01
+#define INT_MSR 0x02
+#define INT_WAKSR 0x03
+#define INT_TXOK_CNT 0x04
+#define INT_RXLOST_CNT 0x05
+#define INT_CRERR_CNT 0x06
+#define INT_COL_CNT 0x07
+
/* Transmit status register errors */
#define TSR_ECOL (1<<5)
#define TSR_LCOL (1<<4)
diff --git a/trunk/drivers/net/usb/zaurus.c b/trunk/drivers/net/usb/zaurus.c
index 34db195fb8b0..c3197ce0e2ad 100644
--- a/trunk/drivers/net/usb/zaurus.c
+++ b/trunk/drivers/net/usb/zaurus.c
@@ -337,11 +337,6 @@ static const struct usb_device_id products [] = {
.driver_info = ZAURUS_PXA_INFO,
},
{
- /* Motorola Rokr E6 */
- USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x6027, USB_CLASS_COMM,
- USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
- .driver_info = (unsigned long) &bogus_mdlm_info,
-}, {
/* Motorola MOTOMAGX phones */
USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x6425, USB_CLASS_COMM,
USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
diff --git a/trunk/drivers/net/virtio_net.c b/trunk/drivers/net/virtio_net.c
index 4de2760c5937..019da012669f 100644
--- a/trunk/drivers/net/virtio_net.c
+++ b/trunk/drivers/net/virtio_net.c
@@ -625,13 +625,12 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
/* This can happen with OOM and indirect buffers. */
if (unlikely(capacity < 0)) {
- if (likely(capacity == -ENOMEM)) {
- if (net_ratelimit()) {
+ if (net_ratelimit()) {
+ if (likely(capacity == -ENOMEM)) {
dev_warn(&dev->dev,
"TX queue failure: out of memory\n");
} else {
- dev->stats.tx_fifo_errors++;
- if (net_ratelimit())
+ dev->stats.tx_fifo_errors++;
dev_warn(&dev->dev,
"Unexpected TX queue failure: %d\n",
capacity);
diff --git a/trunk/drivers/net/wimax/i2400m/debugfs.c b/trunk/drivers/net/wimax/i2400m/debugfs.c
index 4b66ab1d0e5c..129ba36bd04d 100644
--- a/trunk/drivers/net/wimax/i2400m/debugfs.c
+++ b/trunk/drivers/net/wimax/i2400m/debugfs.c
@@ -53,6 +53,17 @@ struct dentry *debugfs_create_netdev_queue_stopped(
&fops_netdev_queue_stopped);
}
+
+/*
+ * inode->i_private has the @data argument to debugfs_create_file()
+ */
+static
+int i2400m_stats_open(struct inode *inode, struct file *filp)
+{
+ filp->private_data = inode->i_private;
+ return 0;
+}
+
/*
* We don't allow partial reads of this file, as then the reader would
* get weirdly confused data as it is updated.
@@ -106,7 +117,7 @@ ssize_t i2400m_rx_stats_write(struct file *filp, const char __user *buffer,
static
const struct file_operations i2400m_rx_stats_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = i2400m_stats_open,
.read = i2400m_rx_stats_read,
.write = i2400m_rx_stats_write,
.llseek = default_llseek,
@@ -159,7 +170,7 @@ ssize_t i2400m_tx_stats_write(struct file *filp, const char __user *buffer,
static
const struct file_operations i2400m_tx_stats_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = i2400m_stats_open,
.read = i2400m_tx_stats_read,
.write = i2400m_tx_stats_write,
.llseek = default_llseek,
diff --git a/trunk/drivers/net/wimax/i2400m/netdev.c b/trunk/drivers/net/wimax/i2400m/netdev.c
index 1d76ae855f07..63e4b709efa9 100644
--- a/trunk/drivers/net/wimax/i2400m/netdev.c
+++ b/trunk/drivers/net/wimax/i2400m/netdev.c
@@ -597,8 +597,7 @@ static void i2400m_get_drvinfo(struct net_device *net_dev,
struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
strncpy(info->driver, KBUILD_MODNAME, sizeof(info->driver) - 1);
- strncpy(info->fw_version,
- i2400m->fw_name ? : "", sizeof(info->fw_version) - 1);
+ strncpy(info->fw_version, i2400m->fw_name, sizeof(info->fw_version) - 1);
if (net_dev->dev.parent)
strncpy(info->bus_info, dev_name(net_dev->dev.parent),
sizeof(info->bus_info) - 1);
diff --git a/trunk/drivers/net/wimax/i2400m/usb.c b/trunk/drivers/net/wimax/i2400m/usb.c
index 29b1e033a10b..2c1b8b687646 100644
--- a/trunk/drivers/net/wimax/i2400m/usb.c
+++ b/trunk/drivers/net/wimax/i2400m/usb.c
@@ -339,23 +339,6 @@ int i2400mu_bus_reset(struct i2400m *i2400m, enum i2400m_reset_type rt)
return result;
}
-static void i2400mu_get_drvinfo(struct net_device *net_dev,
- struct ethtool_drvinfo *info)
-{
- struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
- struct i2400mu *i2400mu = container_of(i2400m, struct i2400mu, i2400m);
- struct usb_device *udev = i2400mu->usb_dev;
-
- strncpy(info->driver, KBUILD_MODNAME, sizeof(info->driver) - 1);
- strncpy(info->fw_version,
- i2400m->fw_name ? : "", sizeof(info->fw_version) - 1);
- usb_make_path(udev, info->bus_info, sizeof(info->bus_info));
-}
-
-static const struct ethtool_ops i2400mu_ethtool_ops = {
- .get_drvinfo = i2400mu_get_drvinfo,
- .get_link = ethtool_op_get_link,
-};
static
void i2400mu_netdev_setup(struct net_device *net_dev)
@@ -364,7 +347,6 @@ void i2400mu_netdev_setup(struct net_device *net_dev)
struct i2400mu *i2400mu = container_of(i2400m, struct i2400mu, i2400m);
i2400mu_init(i2400mu);
i2400m_netdev_setup(net_dev);
- net_dev->ethtool_ops = &i2400mu_ethtool_ops;
}
diff --git a/trunk/drivers/net/wireless/ath/ath5k/debug.c b/trunk/drivers/net/wireless/ath/ath5k/debug.c
index e5e8f45d86ac..8c5ce8b0c734 100644
--- a/trunk/drivers/net/wireless/ath/ath5k/debug.c
+++ b/trunk/drivers/net/wireless/ath/ath5k/debug.c
@@ -71,6 +71,13 @@ static unsigned int ath5k_debug;
module_param_named(debug, ath5k_debug, uint, 0);
+static int ath5k_debugfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
+
/* debugfs: registers */
struct reg {
@@ -258,7 +265,7 @@ static ssize_t write_file_beacon(struct file *file,
static const struct file_operations fops_beacon = {
.read = read_file_beacon,
.write = write_file_beacon,
- .open = simple_open,
+ .open = ath5k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -278,7 +285,7 @@ static ssize_t write_file_reset(struct file *file,
static const struct file_operations fops_reset = {
.write = write_file_reset,
- .open = simple_open,
+ .open = ath5k_debugfs_open,
.owner = THIS_MODULE,
.llseek = noop_llseek,
};
@@ -358,7 +365,7 @@ static ssize_t write_file_debug(struct file *file,
static const struct file_operations fops_debug = {
.read = read_file_debug,
.write = write_file_debug,
- .open = simple_open,
+ .open = ath5k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -470,7 +477,7 @@ static ssize_t write_file_antenna(struct file *file,
static const struct file_operations fops_antenna = {
.read = read_file_antenna,
.write = write_file_antenna,
- .open = simple_open,
+ .open = ath5k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -525,7 +532,7 @@ static ssize_t read_file_misc(struct file *file, char __user *user_buf,
static const struct file_operations fops_misc = {
.read = read_file_misc,
- .open = simple_open,
+ .open = ath5k_debugfs_open,
.owner = THIS_MODULE,
};
@@ -640,7 +647,7 @@ static ssize_t write_file_frameerrors(struct file *file,
static const struct file_operations fops_frameerrors = {
.read = read_file_frameerrors,
.write = write_file_frameerrors,
- .open = simple_open,
+ .open = ath5k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -803,7 +810,7 @@ static ssize_t write_file_ani(struct file *file,
static const struct file_operations fops_ani = {
.read = read_file_ani,
.write = write_file_ani,
- .open = simple_open,
+ .open = ath5k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -874,7 +881,7 @@ static ssize_t write_file_queue(struct file *file,
static const struct file_operations fops_queue = {
.read = read_file_queue,
.write = write_file_queue,
- .open = simple_open,
+ .open = ath5k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/ath/ath6kl/debug.c b/trunk/drivers/net/wireless/ath/ath6kl/debug.c
index d01403a263ff..552adb3f80d0 100644
--- a/trunk/drivers/net/wireless/ath/ath6kl/debug.c
+++ b/trunk/drivers/net/wireless/ath/ath6kl/debug.c
@@ -217,6 +217,12 @@ void dump_cred_dist_stats(struct htc_target *target)
target->credit_info->cur_free_credits);
}
+static int ath6kl_debugfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
void ath6kl_debug_war(struct ath6kl *ar, enum ath6kl_war war)
{
switch (war) {
@@ -257,7 +263,7 @@ static ssize_t read_file_war_stats(struct file *file, char __user *user_buf,
static const struct file_operations fops_war_stats = {
.read = read_file_war_stats,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -482,7 +488,7 @@ static ssize_t ath6kl_fwlog_mask_write(struct file *file,
}
static const struct file_operations fops_fwlog_mask = {
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.read = ath6kl_fwlog_mask_read,
.write = ath6kl_fwlog_mask_write,
.owner = THIS_MODULE,
@@ -628,7 +634,7 @@ static ssize_t read_file_tgt_stats(struct file *file, char __user *user_buf,
static const struct file_operations fops_tgt_stats = {
.read = read_file_tgt_stats,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -693,7 +699,7 @@ static ssize_t read_file_credit_dist_stats(struct file *file,
static const struct file_operations fops_credit_dist_stats = {
.read = read_file_credit_dist_stats,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -796,7 +802,7 @@ static ssize_t ath6kl_endpoint_stats_write(struct file *file,
}
static const struct file_operations fops_endpoint_stats = {
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.read = ath6kl_endpoint_stats_read,
.write = ath6kl_endpoint_stats_write,
.owner = THIS_MODULE,
@@ -869,7 +875,7 @@ static ssize_t ath6kl_regread_write(struct file *file,
static const struct file_operations fops_diag_reg_read = {
.read = ath6kl_regread_read,
.write = ath6kl_regread_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -993,7 +999,7 @@ static ssize_t ath6kl_lrssi_roam_read(struct file *file,
static const struct file_operations fops_lrssi_roam_threshold = {
.read = ath6kl_lrssi_roam_read,
.write = ath6kl_lrssi_roam_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1055,7 +1061,7 @@ static ssize_t ath6kl_regwrite_write(struct file *file,
static const struct file_operations fops_diag_reg_write = {
.read = ath6kl_regwrite_read,
.write = ath6kl_regwrite_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1160,7 +1166,7 @@ static ssize_t ath6kl_roam_table_read(struct file *file, char __user *user_buf,
static const struct file_operations fops_roam_table = {
.read = ath6kl_roam_table_read,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1198,7 +1204,7 @@ static ssize_t ath6kl_force_roam_write(struct file *file,
static const struct file_operations fops_force_roam = {
.write = ath6kl_force_roam_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1238,7 +1244,7 @@ static ssize_t ath6kl_roam_mode_write(struct file *file,
static const struct file_operations fops_roam_mode = {
.write = ath6kl_roam_mode_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1280,7 +1286,7 @@ static ssize_t ath6kl_keepalive_write(struct file *file,
}
static const struct file_operations fops_keepalive = {
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.read = ath6kl_keepalive_read,
.write = ath6kl_keepalive_write,
.owner = THIS_MODULE,
@@ -1325,7 +1331,7 @@ static ssize_t ath6kl_disconnect_timeout_write(struct file *file,
}
static const struct file_operations fops_disconnect_timeout = {
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.read = ath6kl_disconnect_timeout_read,
.write = ath6kl_disconnect_timeout_write,
.owner = THIS_MODULE,
@@ -1506,7 +1512,7 @@ static ssize_t ath6kl_create_qos_write(struct file *file,
static const struct file_operations fops_create_qos = {
.write = ath6kl_create_qos_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1554,7 +1560,7 @@ static ssize_t ath6kl_delete_qos_write(struct file *file,
static const struct file_operations fops_delete_qos = {
.write = ath6kl_delete_qos_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1587,7 +1593,7 @@ static ssize_t ath6kl_bgscan_int_write(struct file *file,
static const struct file_operations fops_bgscan_int = {
.write = ath6kl_bgscan_int_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1645,7 +1651,7 @@ static ssize_t ath6kl_listen_int_read(struct file *file,
static const struct file_operations fops_listen_int = {
.read = ath6kl_listen_int_read,
.write = ath6kl_listen_int_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1705,7 +1711,7 @@ static ssize_t ath6kl_power_params_write(struct file *file,
static const struct file_operations fops_power_params = {
.write = ath6kl_power_params_write,
- .open = simple_open,
+ .open = ath6kl_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/ath/ath9k/calib.c b/trunk/drivers/net/wireless/ath/ath9k/calib.c
index e5cceb077574..2f4b48e6fb03 100644
--- a/trunk/drivers/net/wireless/ath/ath9k/calib.c
+++ b/trunk/drivers/net/wireless/ath/ath9k/calib.c
@@ -20,6 +20,7 @@
/* Common calibration code */
+#define ATH9K_NF_TOO_HIGH -60
static int16_t ath9k_hw_get_nf_hist_mid(int16_t *nfCalBuffer)
{
@@ -345,10 +346,10 @@ static void ath9k_hw_nf_sanitize(struct ath_hw *ah, s16 *nf)
"NF calibrated [%s] [chain %d] is %d\n",
(i >= 3 ? "ext" : "ctl"), i % 3, nf[i]);
- if (nf[i] > limit->max) {
+ if (nf[i] > ATH9K_NF_TOO_HIGH) {
ath_dbg(common, CALIBRATE,
"NF[%d] (%d) > MAX (%d), correcting to MAX\n",
- i, nf[i], limit->max);
+ i, nf[i], ATH9K_NF_TOO_HIGH);
nf[i] = limit->max;
} else if (nf[i] < limit->min) {
ath_dbg(common, CALIBRATE,
diff --git a/trunk/drivers/net/wireless/ath/ath9k/debug.c b/trunk/drivers/net/wireless/ath/ath9k/debug.c
index ff47b32ecaf4..35d1c8e91d1c 100644
--- a/trunk/drivers/net/wireless/ath/ath9k/debug.c
+++ b/trunk/drivers/net/wireless/ath/ath9k/debug.c
@@ -26,6 +26,11 @@
#define REG_READ_D(_ah, _reg) \
ath9k_hw_common(_ah)->ops->read((_ah), (_reg))
+static int ath9k_debugfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
static ssize_t ath9k_debugfs_read_buf(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
@@ -78,7 +83,7 @@ static ssize_t write_file_debug(struct file *file, const char __user *user_buf,
static const struct file_operations fops_debug = {
.read = read_file_debug,
.write = write_file_debug,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -124,7 +129,7 @@ static ssize_t write_file_tx_chainmask(struct file *file, const char __user *use
static const struct file_operations fops_tx_chainmask = {
.read = read_file_tx_chainmask,
.write = write_file_tx_chainmask,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -167,7 +172,7 @@ static ssize_t write_file_rx_chainmask(struct file *file, const char __user *use
static const struct file_operations fops_rx_chainmask = {
.read = read_file_rx_chainmask,
.write = write_file_rx_chainmask,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -218,7 +223,7 @@ static ssize_t write_file_disable_ani(struct file *file,
static const struct file_operations fops_disable_ani = {
.read = read_file_disable_ani,
.write = write_file_disable_ani,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -319,7 +324,7 @@ static ssize_t read_file_dma(struct file *file, char __user *user_buf,
static const struct file_operations fops_dma = {
.read = read_file_dma,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -441,7 +446,7 @@ static ssize_t read_file_interrupt(struct file *file, char __user *user_buf,
static const struct file_operations fops_interrupt = {
.read = read_file_interrupt,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -847,28 +852,28 @@ void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf,
static const struct file_operations fops_xmit = {
.read = read_file_xmit,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
static const struct file_operations fops_stations = {
.read = read_file_stations,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
static const struct file_operations fops_misc = {
.read = read_file_misc,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
static const struct file_operations fops_reset = {
.read = read_file_reset,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1011,7 +1016,7 @@ void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs)
static const struct file_operations fops_recv = {
.read = read_file_recv,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1050,7 +1055,7 @@ static ssize_t write_file_regidx(struct file *file, const char __user *user_buf,
static const struct file_operations fops_regidx = {
.read = read_file_regidx,
.write = write_file_regidx,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1097,7 +1102,7 @@ static ssize_t write_file_regval(struct file *file, const char __user *user_buf,
static const struct file_operations fops_regval = {
.read = read_file_regval,
.write = write_file_regval,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1186,7 +1191,7 @@ static ssize_t read_file_dump_nfcal(struct file *file, char __user *user_buf,
static const struct file_operations fops_dump_nfcal = {
.read = read_file_dump_nfcal,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1214,7 +1219,7 @@ static ssize_t read_file_base_eeprom(struct file *file, char __user *user_buf,
static const struct file_operations fops_base_eeprom = {
.read = read_file_base_eeprom,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -1242,7 +1247,7 @@ static ssize_t read_file_modal_eeprom(struct file *file, char __user *user_buf,
static const struct file_operations fops_modal_eeprom = {
.read = read_file_modal_eeprom,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/ath/ath9k/dfs_debug.c b/trunk/drivers/net/wireless/ath/ath9k/dfs_debug.c
index 4364c103ed33..106d031d834a 100644
--- a/trunk/drivers/net/wireless/ath/ath9k/dfs_debug.c
+++ b/trunk/drivers/net/wireless/ath/ath9k/dfs_debug.c
@@ -60,9 +60,16 @@ static ssize_t read_file_dfs(struct file *file, char __user *user_buf,
return retval;
}
+static int ath9k_dfs_debugfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+
+ return 0;
+}
+
static const struct file_operations fops_dfs_stats = {
.read = read_file_dfs,
- .open = simple_open,
+ .open = ath9k_dfs_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/ath/ath9k/htc_drv_debug.c b/trunk/drivers/net/wireless/ath/ath9k/htc_drv_debug.c
index 3035deb7a0cd..d3ff33c71aa5 100644
--- a/trunk/drivers/net/wireless/ath/ath9k/htc_drv_debug.c
+++ b/trunk/drivers/net/wireless/ath/ath9k/htc_drv_debug.c
@@ -16,6 +16,12 @@
#include "htc.h"
+static int ath9k_debugfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t read_file_tgt_int_stats(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
@@ -69,7 +75,7 @@ static ssize_t read_file_tgt_int_stats(struct file *file, char __user *user_buf,
static const struct file_operations fops_tgt_int_stats = {
.read = read_file_tgt_int_stats,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -139,7 +145,7 @@ static ssize_t read_file_tgt_tx_stats(struct file *file, char __user *user_buf,
static const struct file_operations fops_tgt_tx_stats = {
.read = read_file_tgt_tx_stats,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -185,7 +191,7 @@ static ssize_t read_file_tgt_rx_stats(struct file *file, char __user *user_buf,
static const struct file_operations fops_tgt_rx_stats = {
.read = read_file_tgt_rx_stats,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -237,7 +243,7 @@ static ssize_t read_file_xmit(struct file *file, char __user *user_buf,
static const struct file_operations fops_xmit = {
.read = read_file_xmit,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -358,7 +364,7 @@ static ssize_t read_file_recv(struct file *file, char __user *user_buf,
static const struct file_operations fops_recv = {
.read = read_file_recv,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -393,7 +399,7 @@ static ssize_t read_file_slot(struct file *file, char __user *user_buf,
static const struct file_operations fops_slot = {
.read = read_file_slot,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -440,7 +446,7 @@ static ssize_t read_file_queue(struct file *file, char __user *user_buf,
static const struct file_operations fops_queue = {
.read = read_file_queue,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -481,7 +487,7 @@ static ssize_t write_file_debug(struct file *file, const char __user *user_buf,
static const struct file_operations fops_debug = {
.read = read_file_debug,
.write = write_file_debug,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -630,7 +636,7 @@ static ssize_t read_file_base_eeprom(struct file *file, char __user *user_buf,
static const struct file_operations fops_base_eeprom = {
.read = read_file_base_eeprom,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
@@ -911,7 +917,7 @@ static ssize_t read_file_modal_eeprom(struct file *file, char __user *user_buf,
static const struct file_operations fops_modal_eeprom = {
.read = read_file_modal_eeprom,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/ath/ath9k/init.c b/trunk/drivers/net/wireless/ath/ath9k/init.c
index cb006458fc4b..60159f4ee532 100644
--- a/trunk/drivers/net/wireless/ath/ath9k/init.c
+++ b/trunk/drivers/net/wireless/ath/ath9k/init.c
@@ -680,7 +680,7 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
hw->queues = 4;
hw->max_rates = 4;
hw->channel_change_time = 5000;
- hw->max_listen_interval = 1;
+ hw->max_listen_interval = 10;
hw->max_rate_tries = 10;
hw->sta_data_size = sizeof(struct ath_node);
hw->vif_data_size = sizeof(struct ath_vif);
diff --git a/trunk/drivers/net/wireless/ath/ath9k/main.c b/trunk/drivers/net/wireless/ath/ath9k/main.c
index 215eb2536b1e..38794850f005 100644
--- a/trunk/drivers/net/wireless/ath/ath9k/main.c
+++ b/trunk/drivers/net/wireless/ath/ath9k/main.c
@@ -640,7 +640,7 @@ static void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta,
an->sta = sta;
an->vif = vif;
- if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
+ if (sta->ht_cap.ht_supported) {
ath_tx_node_init(sc, an);
an->maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
sta->ht_cap.ampdu_factor);
@@ -659,7 +659,7 @@ static void ath_node_detach(struct ath_softc *sc, struct ieee80211_sta *sta)
an->sta = NULL;
#endif
- if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT)
+ if (sta->ht_cap.ht_supported)
ath_tx_node_cleanup(sc, an);
}
diff --git a/trunk/drivers/net/wireless/ath/ath9k/rc.c b/trunk/drivers/net/wireless/ath/ath9k/rc.c
index 08bb45532701..4f848493fece 100644
--- a/trunk/drivers/net/wireless/ath/ath9k/rc.c
+++ b/trunk/drivers/net/wireless/ath/ath9k/rc.c
@@ -1480,6 +1480,12 @@ static void ath_rate_update(void *priv, struct ieee80211_supported_band *sband,
#ifdef CONFIG_ATH9K_DEBUGFS
+static int ath9k_debugfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t read_file_rcstat(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
@@ -1547,7 +1553,7 @@ static ssize_t read_file_rcstat(struct file *file, char __user *user_buf,
static const struct file_operations fops_rcstat = {
.read = read_file_rcstat,
- .open = simple_open,
+ .open = ath9k_debugfs_open,
.owner = THIS_MODULE
};
diff --git a/trunk/drivers/net/wireless/ath/ath9k/recv.c b/trunk/drivers/net/wireless/ath/ath9k/recv.c
index 1c4583c7ff7c..f4ae3ba994a8 100644
--- a/trunk/drivers/net/wireless/ath/ath9k/recv.c
+++ b/trunk/drivers/net/wireless/ath/ath9k/recv.c
@@ -1913,13 +1913,13 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
if (sc->rx.frag) {
int space = skb->len - skb_tailroom(hdr_skb);
+ sc->rx.frag = NULL;
+
if (pskb_expand_head(hdr_skb, 0, space, GFP_ATOMIC) < 0) {
dev_kfree_skb(skb);
goto requeue_drop_frag;
}
- sc->rx.frag = NULL;
-
skb_copy_from_linear_data(skb, skb_put(hdr_skb, skb->len),
skb->len);
dev_kfree_skb_any(skb);
diff --git a/trunk/drivers/net/wireless/ath/carl9170/debug.c b/trunk/drivers/net/wireless/ath/carl9170/debug.c
index 93fe6003a493..3c164226687f 100644
--- a/trunk/drivers/net/wireless/ath/carl9170/debug.c
+++ b/trunk/drivers/net/wireless/ath/carl9170/debug.c
@@ -48,6 +48,11 @@
#define ADD(buf, off, max, fmt, args...) \
off += snprintf(&buf[off], max - off, fmt, ##args);
+static int carl9170_debugfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
struct carl9170_debugfs_fops {
unsigned int read_bufsize;
@@ -173,7 +178,7 @@ static const struct carl9170_debugfs_fops carl_debugfs_##name ##_ops = {\
.attr = _attr, \
.req_dev_state = _dstate, \
.fops = { \
- .open = simple_open, \
+ .open = carl9170_debugfs_open, \
.read = carl9170_debugfs_read, \
.write = carl9170_debugfs_write, \
.owner = THIS_MODULE \
diff --git a/trunk/drivers/net/wireless/b43/debugfs.c b/trunk/drivers/net/wireless/b43/debugfs.c
index e807bd930647..e751fdee89b2 100644
--- a/trunk/drivers/net/wireless/b43/debugfs.c
+++ b/trunk/drivers/net/wireless/b43/debugfs.c
@@ -500,6 +500,12 @@ static ssize_t loctls_read_file(struct b43_wldev *dev,
#undef fappend
+static int b43_debugfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t b43_debugfs_read(struct file *file, char __user *userbuf,
size_t count, loff_t *ppos)
{
@@ -618,7 +624,7 @@ static ssize_t b43_debugfs_write(struct file *file,
.read = _read, \
.write = _write, \
.fops = { \
- .open = simple_open, \
+ .open = b43_debugfs_open, \
.read = b43_debugfs_read, \
.write = b43_debugfs_write, \
.llseek = generic_file_llseek, \
diff --git a/trunk/drivers/net/wireless/b43legacy/debugfs.c b/trunk/drivers/net/wireless/b43legacy/debugfs.c
index 1965edb765a2..5e28ad0d6d17 100644
--- a/trunk/drivers/net/wireless/b43legacy/debugfs.c
+++ b/trunk/drivers/net/wireless/b43legacy/debugfs.c
@@ -197,6 +197,12 @@ static int restart_write_file(struct b43legacy_wldev *dev, const char *buf, size
#undef fappend
+static int b43legacy_debugfs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t b43legacy_debugfs_read(struct file *file, char __user *userbuf,
size_t count, loff_t *ppos)
{
@@ -325,7 +331,7 @@ static ssize_t b43legacy_debugfs_write(struct file *file,
.read = _read, \
.write = _write, \
.fops = { \
- .open = simple_open, \
+ .open = b43legacy_debugfs_open, \
.read = b43legacy_debugfs_read, \
.write = b43legacy_debugfs_write, \
.llseek = generic_file_llseek, \
diff --git a/trunk/drivers/net/wireless/ipw2x00/ipw2200.c b/trunk/drivers/net/wireless/ipw2x00/ipw2200.c
index 2b022571a859..4fcdac63a300 100644
--- a/trunk/drivers/net/wireless/ipw2x00/ipw2200.c
+++ b/trunk/drivers/net/wireless/ipw2x00/ipw2200.c
@@ -11507,9 +11507,9 @@ static int ipw_wdev_init(struct net_device *dev)
rc = -ENOMEM;
goto out;
}
- /* translate geo->a to a_band.channels */
+ /* translate geo->bg to a_band.channels */
for (i = 0; i < geo->a_channels; i++) {
- a_band->channels[i].band = IEEE80211_BAND_5GHZ;
+ a_band->channels[i].band = IEEE80211_BAND_2GHZ;
a_band->channels[i].center_freq = geo->a[i].freq;
a_band->channels[i].hw_value = geo->a[i].channel;
a_band->channels[i].max_power = geo->a[i].max_power;
diff --git a/trunk/drivers/net/wireless/iwlegacy/3945-mac.c b/trunk/drivers/net/wireless/iwlegacy/3945-mac.c
index faec40467208..0c1209390169 100644
--- a/trunk/drivers/net/wireless/iwlegacy/3945-mac.c
+++ b/trunk/drivers/net/wireless/iwlegacy/3945-mac.c
@@ -2673,6 +2673,8 @@ il3945_bg_restart(struct work_struct *data)
if (test_and_clear_bit(S_FW_ERROR, &il->status)) {
mutex_lock(&il->mutex);
+ /* FIXME: vif can be dereferenced */
+ il->vif = NULL;
il->is_open = 0;
mutex_unlock(&il->mutex);
il3945_down(il);
diff --git a/trunk/drivers/net/wireless/iwlegacy/3945-rs.c b/trunk/drivers/net/wireless/iwlegacy/3945-rs.c
index 4b10157d8686..70bee1a4d876 100644
--- a/trunk/drivers/net/wireless/iwlegacy/3945-rs.c
+++ b/trunk/drivers/net/wireless/iwlegacy/3945-rs.c
@@ -821,6 +821,12 @@ il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta, void *il_sta,
}
#ifdef CONFIG_MAC80211_DEBUGFS
+static int
+il3945_open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
static ssize_t
il3945_sta_dbgfs_stats_table_read(struct file *file, char __user *user_buf,
@@ -856,7 +862,7 @@ il3945_sta_dbgfs_stats_table_read(struct file *file, char __user *user_buf,
static const struct file_operations rs_sta_dbgfs_stats_table_ops = {
.read = il3945_sta_dbgfs_stats_table_read,
- .open = simple_open,
+ .open = il3945_open_file_generic,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/iwlegacy/4965-mac.c b/trunk/drivers/net/wireless/iwlegacy/4965-mac.c
index c46275a92565..17f1c6853182 100644
--- a/trunk/drivers/net/wireless/iwlegacy/4965-mac.c
+++ b/trunk/drivers/net/wireless/iwlegacy/4965-mac.c
@@ -5652,6 +5652,8 @@ il4965_bg_restart(struct work_struct *data)
if (test_and_clear_bit(S_FW_ERROR, &il->status)) {
mutex_lock(&il->mutex);
+ /* FIXME: do we dereference vif without mutex locked ? */
+ il->vif = NULL;
il->is_open = 0;
__il4965_down(il);
diff --git a/trunk/drivers/net/wireless/iwlegacy/4965-rs.c b/trunk/drivers/net/wireless/iwlegacy/4965-rs.c
index 11ab1247fae1..d7e2856e41d3 100644
--- a/trunk/drivers/net/wireless/iwlegacy/4965-rs.c
+++ b/trunk/drivers/net/wireless/iwlegacy/4965-rs.c
@@ -2518,6 +2518,12 @@ il4965_rs_free_sta(void *il_r, struct ieee80211_sta *sta, void *il_sta)
}
#ifdef CONFIG_MAC80211_DEBUGFS
+static int
+il4965_open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
static void
il4965_rs_dbgfs_set_mcs(struct il_lq_sta *lq_sta, u32 * rate_n_flags, int idx)
@@ -2689,7 +2695,7 @@ il4965_rs_sta_dbgfs_scale_table_read(struct file *file, char __user *user_buf,
static const struct file_operations rs_sta_dbgfs_scale_table_ops = {
.write = il4965_rs_sta_dbgfs_scale_table_write,
.read = il4965_rs_sta_dbgfs_scale_table_read,
- .open = simple_open,
+ .open = il4965_open_file_generic,
.llseek = default_llseek,
};
@@ -2734,7 +2740,7 @@ il4965_rs_sta_dbgfs_stats_table_read(struct file *file, char __user *user_buf,
static const struct file_operations rs_sta_dbgfs_stats_table_ops = {
.read = il4965_rs_sta_dbgfs_stats_table_read,
- .open = simple_open,
+ .open = il4965_open_file_generic,
.llseek = default_llseek,
};
@@ -2762,7 +2768,7 @@ il4965_rs_sta_dbgfs_rate_scale_data_read(struct file *file,
static const struct file_operations rs_sta_dbgfs_rate_scale_data_ops = {
.read = il4965_rs_sta_dbgfs_rate_scale_data_read,
- .open = simple_open,
+ .open = il4965_open_file_generic,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/iwlegacy/common.c b/trunk/drivers/net/wireless/iwlegacy/common.c
index eaf249452e51..e5ac04739bcc 100644
--- a/trunk/drivers/net/wireless/iwlegacy/common.c
+++ b/trunk/drivers/net/wireless/iwlegacy/common.c
@@ -4508,7 +4508,6 @@ il_mac_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
{
struct il_priv *il = hw->priv;
int err;
- bool reset;
mutex_lock(&il->mutex);
D_MAC80211("enter: type %d, addr %pM\n", vif->type, vif->addr);
@@ -4519,12 +4518,7 @@ il_mac_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
goto out;
}
- /*
- * We do not support multiple virtual interfaces, but on hardware reset
- * we have to add the same interface again.
- */
- reset = (il->vif == vif);
- if (il->vif && !reset) {
+ if (il->vif) {
err = -EOPNOTSUPP;
goto out;
}
@@ -4534,11 +4528,8 @@ il_mac_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
err = il_set_mode(il);
if (err) {
- IL_WARN("Fail to set mode %d\n", vif->type);
- if (!reset) {
- il->vif = NULL;
- il->iw_mode = NL80211_IFTYPE_STATION;
- }
+ il->vif = NULL;
+ il->iw_mode = NL80211_IFTYPE_STATION;
}
out:
@@ -5288,9 +5279,9 @@ il_mac_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
D_MAC80211("BSSID %pM\n", bss_conf->bssid);
/*
- * If there is currently a HW scan going on in the background,
- * then we need to cancel it, otherwise sometimes we are not
- * able to authenticate (FIXME: why ?)
+ * If there is currently a HW scan going on in the
+ * background then we need to cancel it else the RXON
+ * below/in post_associate will fail.
*/
if (il_scan_cancel_timeout(il, 100)) {
D_MAC80211("leave - scan abort failed\n");
@@ -5299,10 +5290,14 @@ il_mac_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
}
/* mac80211 only sets assoc when in STATION mode */
- memcpy(il->staging.bssid_addr, bss_conf->bssid, ETH_ALEN);
+ if (vif->type == NL80211_IFTYPE_ADHOC || bss_conf->assoc) {
+ memcpy(il->staging.bssid_addr, bss_conf->bssid,
+ ETH_ALEN);
- /* FIXME: currently needed in a few places */
- memcpy(il->bssid, bss_conf->bssid, ETH_ALEN);
+ /* currently needed in a few places */
+ memcpy(il->bssid, bss_conf->bssid, ETH_ALEN);
+ } else
+ il->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
}
/*
diff --git a/trunk/drivers/net/wireless/iwlegacy/debug.c b/trunk/drivers/net/wireless/iwlegacy/debug.c
index eff26501d60a..229849150aac 100644
--- a/trunk/drivers/net/wireless/iwlegacy/debug.c
+++ b/trunk/drivers/net/wireless/iwlegacy/debug.c
@@ -160,12 +160,18 @@ static ssize_t il_dbgfs_##name##_write(struct file *file, \
const char __user *user_buf, \
size_t count, loff_t *ppos);
+static int
+il_dbgfs_open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
#define DEBUGFS_READ_FILE_OPS(name) \
DEBUGFS_READ_FUNC(name); \
static const struct file_operations il_dbgfs_##name##_ops = { \
.read = il_dbgfs_##name##_read, \
- .open = simple_open, \
+ .open = il_dbgfs_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -173,7 +179,7 @@ static const struct file_operations il_dbgfs_##name##_ops = { \
DEBUGFS_WRITE_FUNC(name); \
static const struct file_operations il_dbgfs_##name##_ops = { \
.write = il_dbgfs_##name##_write, \
- .open = simple_open, \
+ .open = il_dbgfs_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -183,7 +189,7 @@ static const struct file_operations il_dbgfs_##name##_ops = { \
static const struct file_operations il_dbgfs_##name##_ops = { \
.write = il_dbgfs_##name##_write, \
.read = il_dbgfs_##name##_read, \
- .open = simple_open, \
+ .open = il_dbgfs_open_file_generic, \
.llseek = generic_file_llseek, \
};
diff --git a/trunk/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/trunk/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
index 7e590b349dd7..53f8c51cfcdb 100644
--- a/trunk/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+++ b/trunk/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
@@ -3083,6 +3083,11 @@ static void rs_free_sta(void *priv_r, struct ieee80211_sta *sta,
}
#ifdef CONFIG_MAC80211_DEBUGFS
+static int open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta,
u32 *rate_n_flags, int index)
{
@@ -3221,7 +3226,7 @@ static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file,
static const struct file_operations rs_sta_dbgfs_scale_table_ops = {
.write = rs_sta_dbgfs_scale_table_write,
.read = rs_sta_dbgfs_scale_table_read,
- .open = simple_open,
+ .open = open_file_generic,
.llseek = default_llseek,
};
static ssize_t rs_sta_dbgfs_stats_table_read(struct file *file,
@@ -3264,7 +3269,7 @@ static ssize_t rs_sta_dbgfs_stats_table_read(struct file *file,
static const struct file_operations rs_sta_dbgfs_stats_table_ops = {
.read = rs_sta_dbgfs_stats_table_read,
- .open = simple_open,
+ .open = open_file_generic,
.llseek = default_llseek,
};
@@ -3290,7 +3295,7 @@ static ssize_t rs_sta_dbgfs_rate_scale_data_read(struct file *file,
static const struct file_operations rs_sta_dbgfs_rate_scale_data_ops = {
.read = rs_sta_dbgfs_rate_scale_data_read,
- .open = simple_open,
+ .open = open_file_generic,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/trunk/drivers/net/wireless/iwlwifi/iwl-debugfs.c
index 2bbaebd99ad4..b7b1c04f2fba 100644
--- a/trunk/drivers/net/wireless/iwlwifi/iwl-debugfs.c
+++ b/trunk/drivers/net/wireless/iwlwifi/iwl-debugfs.c
@@ -84,11 +84,17 @@ static ssize_t iwl_dbgfs_##name##_write(struct file *file, \
size_t count, loff_t *ppos);
+static int iwl_dbgfs_open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
#define DEBUGFS_READ_FILE_OPS(name) \
DEBUGFS_READ_FUNC(name); \
static const struct file_operations iwl_dbgfs_##name##_ops = { \
.read = iwl_dbgfs_##name##_read, \
- .open = simple_open, \
+ .open = iwl_dbgfs_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -96,7 +102,7 @@ static const struct file_operations iwl_dbgfs_##name##_ops = { \
DEBUGFS_WRITE_FUNC(name); \
static const struct file_operations iwl_dbgfs_##name##_ops = { \
.write = iwl_dbgfs_##name##_write, \
- .open = simple_open, \
+ .open = iwl_dbgfs_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -107,7 +113,7 @@ static const struct file_operations iwl_dbgfs_##name##_ops = { \
static const struct file_operations iwl_dbgfs_##name##_ops = { \
.write = iwl_dbgfs_##name##_write, \
.read = iwl_dbgfs_##name##_read, \
- .open = simple_open, \
+ .open = iwl_dbgfs_open_file_generic, \
.llseek = generic_file_llseek, \
};
diff --git a/trunk/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/trunk/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
index 4d7b30d3e648..b4f796c82e1e 100644
--- a/trunk/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+++ b/trunk/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
@@ -1898,11 +1898,17 @@ static ssize_t iwl_dbgfs_##name##_write(struct file *file, \
size_t count, loff_t *ppos);
+static int iwl_dbgfs_open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
#define DEBUGFS_READ_FILE_OPS(name) \
DEBUGFS_READ_FUNC(name); \
static const struct file_operations iwl_dbgfs_##name##_ops = { \
.read = iwl_dbgfs_##name##_read, \
- .open = simple_open, \
+ .open = iwl_dbgfs_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -1910,7 +1916,7 @@ static const struct file_operations iwl_dbgfs_##name##_ops = { \
DEBUGFS_WRITE_FUNC(name); \
static const struct file_operations iwl_dbgfs_##name##_ops = { \
.write = iwl_dbgfs_##name##_write, \
- .open = simple_open, \
+ .open = iwl_dbgfs_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -1920,7 +1926,7 @@ static const struct file_operations iwl_dbgfs_##name##_ops = { \
static const struct file_operations iwl_dbgfs_##name##_ops = { \
.write = iwl_dbgfs_##name##_write, \
.read = iwl_dbgfs_##name##_read, \
- .open = simple_open, \
+ .open = iwl_dbgfs_open_file_generic, \
.llseek = generic_file_llseek, \
};
diff --git a/trunk/drivers/net/wireless/iwmc3200wifi/debugfs.c b/trunk/drivers/net/wireless/iwmc3200wifi/debugfs.c
index b6199d124bb9..87eef5773a02 100644
--- a/trunk/drivers/net/wireless/iwmc3200wifi/debugfs.c
+++ b/trunk/drivers/net/wireless/iwmc3200wifi/debugfs.c
@@ -99,6 +99,12 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_iwm_dbg_modules,
iwm_debugfs_u32_read, iwm_debugfs_dbg_modules_write,
"%llu\n");
+static int iwm_generic_open(struct inode *inode, struct file *filp)
+{
+ filp->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t iwm_debugfs_txq_read(struct file *filp, char __user *buffer,
size_t count, loff_t *ppos)
@@ -395,28 +401,28 @@ static ssize_t iwm_debugfs_fw_err_read(struct file *filp,
static const struct file_operations iwm_debugfs_txq_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = iwm_generic_open,
.read = iwm_debugfs_txq_read,
.llseek = default_llseek,
};
static const struct file_operations iwm_debugfs_tx_credit_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = iwm_generic_open,
.read = iwm_debugfs_tx_credit_read,
.llseek = default_llseek,
};
static const struct file_operations iwm_debugfs_rx_ticket_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = iwm_generic_open,
.read = iwm_debugfs_rx_ticket_read,
.llseek = default_llseek,
};
static const struct file_operations iwm_debugfs_fw_err_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = iwm_generic_open,
.read = iwm_debugfs_fw_err_read,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/iwmc3200wifi/sdio.c b/trunk/drivers/net/wireless/iwmc3200wifi/sdio.c
index 0042f204b07f..764b40dd24ad 100644
--- a/trunk/drivers/net/wireless/iwmc3200wifi/sdio.c
+++ b/trunk/drivers/net/wireless/iwmc3200wifi/sdio.c
@@ -264,6 +264,13 @@ static int if_sdio_send_chunk(struct iwm_priv *iwm, u8 *buf, int count)
return ret;
}
+/* debugfs hooks */
+static int iwm_debugfs_sdio_open(struct inode *inode, struct file *filp)
+{
+ filp->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t iwm_debugfs_sdio_read(struct file *filp, char __user *buffer,
size_t count, loff_t *ppos)
{
@@ -356,7 +363,7 @@ static ssize_t iwm_debugfs_sdio_read(struct file *filp, char __user *buffer,
static const struct file_operations iwm_debugfs_sdio_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = iwm_debugfs_sdio_open,
.read = iwm_debugfs_sdio_read,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/net/wireless/libertas/debugfs.c b/trunk/drivers/net/wireless/libertas/debugfs.c
index a06cc283e23d..c192671610fc 100644
--- a/trunk/drivers/net/wireless/libertas/debugfs.c
+++ b/trunk/drivers/net/wireless/libertas/debugfs.c
@@ -21,6 +21,12 @@ static char *szStates[] = {
static void lbs_debug_init(struct lbs_private *priv);
#endif
+static int open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t write_file_dummy(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{
@@ -690,7 +696,7 @@ static ssize_t lbs_wrrf_write(struct file *file,
#define FOPS(fread, fwrite) { \
.owner = THIS_MODULE, \
- .open = simple_open, \
+ .open = open_file_generic, \
.read = (fread), \
.write = (fwrite), \
.llseek = generic_file_llseek, \
@@ -956,7 +962,7 @@ static ssize_t lbs_debugfs_write(struct file *f, const char __user *buf,
static const struct file_operations lbs_debug_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = open_file_generic,
.write = lbs_debugfs_write,
.read = lbs_debugfs_read,
.llseek = default_llseek,
diff --git a/trunk/drivers/net/wireless/mwifiex/debugfs.c b/trunk/drivers/net/wireless/mwifiex/debugfs.c
index 1a845074c52a..d26a78b6b3c4 100644
--- a/trunk/drivers/net/wireless/mwifiex/debugfs.c
+++ b/trunk/drivers/net/wireless/mwifiex/debugfs.c
@@ -139,6 +139,18 @@ static struct mwifiex_debug_data items[] = {
static int num_of_items = ARRAY_SIZE(items);
+/*
+ * Generic proc file open handler.
+ *
+ * This function is called every time a file is accessed for read or write.
+ */
+static int
+mwifiex_open_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
/*
* Proc info file read handler.
*
@@ -664,19 +676,19 @@ mwifiex_rdeeprom_read(struct file *file, char __user *ubuf,
static const struct file_operations mwifiex_dfs_##name##_fops = { \
.read = mwifiex_##name##_read, \
.write = mwifiex_##name##_write, \
- .open = simple_open, \
+ .open = mwifiex_open_generic, \
};
#define MWIFIEX_DFS_FILE_READ_OPS(name) \
static const struct file_operations mwifiex_dfs_##name##_fops = { \
.read = mwifiex_##name##_read, \
- .open = simple_open, \
+ .open = mwifiex_open_generic, \
};
#define MWIFIEX_DFS_FILE_WRITE_OPS(name) \
static const struct file_operations mwifiex_dfs_##name##_fops = { \
.write = mwifiex_##name##_write, \
- .open = simple_open, \
+ .open = mwifiex_open_generic, \
};
diff --git a/trunk/drivers/net/wireless/orinoco/main.c b/trunk/drivers/net/wireless/orinoco/main.c
index 88e3ad2d1db8..dd6c64ac406e 100644
--- a/trunk/drivers/net/wireless/orinoco/main.c
+++ b/trunk/drivers/net/wireless/orinoco/main.c
@@ -1336,10 +1336,6 @@ static void qbuf_scan(struct orinoco_private *priv, void *buf,
unsigned long flags;
sd = kmalloc(sizeof(*sd), GFP_ATOMIC);
- if (!sd) {
- printk(KERN_ERR "%s: failed to alloc memory\n", __func__);
- return;
- }
sd->buf = buf;
sd->len = len;
sd->type = type;
@@ -1357,10 +1353,6 @@ static void qabort_scan(struct orinoco_private *priv)
unsigned long flags;
sd = kmalloc(sizeof(*sd), GFP_ATOMIC);
- if (!sd) {
- printk(KERN_ERR "%s: failed to alloc memory\n", __func__);
- return;
- }
sd->len = -1; /* Abort */
spin_lock_irqsave(&priv->scan_lock, flags);
diff --git a/trunk/drivers/net/wireless/rt2x00/rt2800usb.c b/trunk/drivers/net/wireless/rt2x00/rt2800usb.c
index 001735f7a661..cd490abced91 100644
--- a/trunk/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/trunk/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -163,13 +163,7 @@ static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
/* Reschedule urb to read TX status again instantly */
return true;
- }
-
- /* Check if there is any entry that timedout waiting on TX status */
- if (rt2800usb_txstatus_timeout(rt2x00dev))
- queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
-
- if (rt2800usb_txstatus_pending(rt2x00dev)) {
+ } else if (rt2800usb_txstatus_pending(rt2x00dev)) {
/* Read register after 250 us */
hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 250000),
HRTIMER_MODE_REL);
@@ -184,7 +178,7 @@ static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
* here again if status reading is needed.
*/
if (rt2800usb_txstatus_pending(rt2x00dev) &&
- !test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags))
+ test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags))
return true;
else
return false;
diff --git a/trunk/drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c b/trunk/drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c
index 4c016241f340..1eec3a06d1f3 100644
--- a/trunk/drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c
+++ b/trunk/drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c
@@ -1893,7 +1893,7 @@ void rtl92c_phy_set_io(struct ieee80211_hw *hw)
break;
case IO_CMD_PAUSE_DM_BY_SCAN:
rtlphy->initgain_backup.xaagccore1 = dm_digtable.cur_igvalue;
- dm_digtable.cur_igvalue = 0x37;
+ dm_digtable.cur_igvalue = 0x17;
rtl92c_dm_write_dig(hw);
break;
default:
diff --git a/trunk/drivers/net/wireless/rtlwifi/rtl8192de/phy.c b/trunk/drivers/net/wireless/rtlwifi/rtl8192de/phy.c
index 28fc5fb8057b..34591eeb8376 100644
--- a/trunk/drivers/net/wireless/rtlwifi/rtl8192de/phy.c
+++ b/trunk/drivers/net/wireless/rtlwifi/rtl8192de/phy.c
@@ -3077,7 +3077,7 @@ static void rtl92d_phy_set_io(struct ieee80211_hw *hw)
break;
case IO_CMD_PAUSE_DM_BY_SCAN:
rtlphy->initgain_backup.xaagccore1 = de_digtable.cur_igvalue;
- de_digtable.cur_igvalue = 0x37;
+ de_digtable.cur_igvalue = 0x17;
rtl92d_dm_write_dig(hw);
break;
default:
diff --git a/trunk/drivers/net/wireless/wl1251/debugfs.c b/trunk/drivers/net/wireless/wl1251/debugfs.c
index 448da1f8c22f..6c274007d200 100644
--- a/trunk/drivers/net/wireless/wl1251/debugfs.c
+++ b/trunk/drivers/net/wireless/wl1251/debugfs.c
@@ -47,7 +47,7 @@ static ssize_t name## _read(struct file *file, char __user *userbuf, \
\
static const struct file_operations name## _ops = { \
.read = name## _read, \
- .open = simple_open, \
+ .open = wl1251_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -84,7 +84,7 @@ static ssize_t sub## _ ##name## _read(struct file *file, \
\
static const struct file_operations sub## _ ##name## _ops = { \
.read = sub## _ ##name## _read, \
- .open = simple_open, \
+ .open = wl1251_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -117,6 +117,12 @@ static void wl1251_debugfs_update_stats(struct wl1251 *wl)
mutex_unlock(&wl->mutex);
}
+static int wl1251_open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
DEBUGFS_FWSTATS_FILE(tx, internal_desc_overflow, 20, "%u");
DEBUGFS_FWSTATS_FILE(rx, out_of_mem, 20, "%u");
@@ -229,7 +235,7 @@ static ssize_t tx_queue_len_read(struct file *file, char __user *userbuf,
static const struct file_operations tx_queue_len_ops = {
.read = tx_queue_len_read,
- .open = simple_open,
+ .open = wl1251_open_file_generic,
.llseek = generic_file_llseek,
};
@@ -251,7 +257,7 @@ static ssize_t tx_queue_status_read(struct file *file, char __user *userbuf,
static const struct file_operations tx_queue_status_ops = {
.read = tx_queue_status_read,
- .open = simple_open,
+ .open = wl1251_open_file_generic,
.llseek = generic_file_llseek,
};
diff --git a/trunk/drivers/net/wireless/wl12xx/debugfs.c b/trunk/drivers/net/wireless/wl12xx/debugfs.c
index 564d49575c94..e1cf72765965 100644
--- a/trunk/drivers/net/wireless/wl12xx/debugfs.c
+++ b/trunk/drivers/net/wireless/wl12xx/debugfs.c
@@ -63,7 +63,7 @@ static ssize_t name## _read(struct file *file, char __user *userbuf, \
\
static const struct file_operations name## _ops = { \
.read = name## _read, \
- .open = simple_open, \
+ .open = wl1271_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -96,7 +96,7 @@ static ssize_t sub## _ ##name## _read(struct file *file, \
\
static const struct file_operations sub## _ ##name## _ops = { \
.read = sub## _ ##name## _read, \
- .open = simple_open, \
+ .open = wl1271_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -126,6 +126,12 @@ static void wl1271_debugfs_update_stats(struct wl1271 *wl)
mutex_unlock(&wl->mutex);
}
+static int wl1271_open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
DEBUGFS_FWSTATS_FILE(tx, internal_desc_overflow, "%u");
DEBUGFS_FWSTATS_FILE(rx, out_of_mem, "%u");
@@ -237,7 +243,7 @@ static ssize_t tx_queue_len_read(struct file *file, char __user *userbuf,
static const struct file_operations tx_queue_len_ops = {
.read = tx_queue_len_read,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -283,7 +289,7 @@ static ssize_t gpio_power_write(struct file *file,
static const struct file_operations gpio_power_ops = {
.read = gpio_power_read,
.write = gpio_power_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -302,7 +308,7 @@ static ssize_t start_recovery_write(struct file *file,
static const struct file_operations start_recovery_ops = {
.write = start_recovery_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -366,7 +372,7 @@ static ssize_t dynamic_ps_timeout_write(struct file *file,
static const struct file_operations dynamic_ps_timeout_ops = {
.read = dynamic_ps_timeout_read,
.write = dynamic_ps_timeout_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -435,7 +441,7 @@ static ssize_t forced_ps_write(struct file *file,
static const struct file_operations forced_ps_ops = {
.read = forced_ps_read,
.write = forced_ps_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -477,7 +483,7 @@ static ssize_t split_scan_timeout_write(struct file *file,
static const struct file_operations split_scan_timeout_ops = {
.read = split_scan_timeout_read,
.write = split_scan_timeout_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -560,7 +566,7 @@ static ssize_t driver_state_read(struct file *file, char __user *user_buf,
static const struct file_operations driver_state_ops = {
.read = driver_state_read,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -669,7 +675,7 @@ static ssize_t vifs_state_read(struct file *file, char __user *user_buf,
static const struct file_operations vifs_state_ops = {
.read = vifs_state_read,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -727,7 +733,7 @@ static ssize_t dtim_interval_write(struct file *file,
static const struct file_operations dtim_interval_ops = {
.read = dtim_interval_read,
.write = dtim_interval_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -785,7 +791,7 @@ static ssize_t suspend_dtim_interval_write(struct file *file,
static const struct file_operations suspend_dtim_interval_ops = {
.read = suspend_dtim_interval_read,
.write = suspend_dtim_interval_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -843,7 +849,7 @@ static ssize_t beacon_interval_write(struct file *file,
static const struct file_operations beacon_interval_ops = {
.read = beacon_interval_read,
.write = beacon_interval_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -898,7 +904,7 @@ static ssize_t rx_streaming_interval_read(struct file *file,
static const struct file_operations rx_streaming_interval_ops = {
.read = rx_streaming_interval_read,
.write = rx_streaming_interval_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -953,7 +959,7 @@ static ssize_t rx_streaming_always_read(struct file *file,
static const struct file_operations rx_streaming_always_ops = {
.read = rx_streaming_always_read,
.write = rx_streaming_always_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
@@ -997,7 +1003,7 @@ static ssize_t beacon_filtering_write(struct file *file,
static const struct file_operations beacon_filtering_ops = {
.write = beacon_filtering_write,
- .open = simple_open,
+ .open = wl1271_open_file_generic,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/oprofile/oprofilefs.c b/trunk/drivers/oprofile/oprofilefs.c
index 849357c1045c..ee8fd037bb53 100644
--- a/trunk/drivers/oprofile/oprofilefs.c
+++ b/trunk/drivers/oprofile/oprofilefs.c
@@ -117,17 +117,25 @@ static ssize_t ulong_write_file(struct file *file, char const __user *buf, size_
}
+static int default_open(struct inode *inode, struct file *filp)
+{
+ if (inode->i_private)
+ filp->private_data = inode->i_private;
+ return 0;
+}
+
+
static const struct file_operations ulong_fops = {
.read = ulong_read_file,
.write = ulong_write_file,
- .open = simple_open,
+ .open = default_open,
.llseek = default_llseek,
};
static const struct file_operations ulong_ro_fops = {
.read = ulong_read_file,
- .open = simple_open,
+ .open = default_open,
.llseek = default_llseek,
};
@@ -179,7 +187,7 @@ static ssize_t atomic_read_file(struct file *file, char __user *buf, size_t coun
static const struct file_operations atomic_ro_fops = {
.read = atomic_read_file,
- .open = simple_open,
+ .open = default_open,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/regulator/anatop-regulator.c b/trunk/drivers/regulator/anatop-regulator.c
index 53969af17558..17499a55113d 100644
--- a/trunk/drivers/regulator/anatop-regulator.c
+++ b/trunk/drivers/regulator/anatop-regulator.c
@@ -138,10 +138,9 @@ static int __devinit anatop_regulator_probe(struct platform_device *pdev)
rdesc->type = REGULATOR_VOLTAGE;
rdesc->owner = THIS_MODULE;
sreg->mfd = anatopmfd;
- ret = of_property_read_u32(np, "anatop-reg-offset",
- &sreg->control_reg);
+ ret = of_property_read_u32(np, "reg", &sreg->control_reg);
if (ret) {
- dev_err(dev, "no anatop-reg-offset property set\n");
+ dev_err(dev, "no reg property set\n");
goto anatop_probe_end;
}
ret = of_property_read_u32(np, "anatop-vol-bit-width",
diff --git a/trunk/drivers/regulator/core.c b/trunk/drivers/regulator/core.c
index e70dd382a009..c056abd7562a 100644
--- a/trunk/drivers/regulator/core.c
+++ b/trunk/drivers/regulator/core.c
@@ -2992,14 +2992,14 @@ void regulator_unregister(struct regulator_dev *rdev)
if (rdev == NULL)
return;
- if (rdev->supply)
- regulator_put(rdev->supply);
mutex_lock(®ulator_list_mutex);
debugfs_remove_recursive(rdev->debugfs);
flush_work_sync(&rdev->disable_work.work);
WARN_ON(rdev->open_count);
unset_regulator_supplies(rdev);
list_del(&rdev->list);
+ if (rdev->supply)
+ regulator_put(rdev->supply);
kfree(rdev->constraints);
device_unregister(&rdev->dev);
mutex_unlock(®ulator_list_mutex);
diff --git a/trunk/drivers/regulator/fixed-helper.c b/trunk/drivers/regulator/fixed-helper.c
index cacd33c9d042..30d0a15b8949 100644
--- a/trunk/drivers/regulator/fixed-helper.c
+++ b/trunk/drivers/regulator/fixed-helper.c
@@ -18,6 +18,7 @@ static void regulator_fixed_release(struct device *dev)
/**
* regulator_register_fixed - register a no-op fixed regulator
+ * @name: supply name
* @id: platform device id
* @supplies: consumers for this regulator
* @num_supplies: number of consumers
@@ -31,7 +32,7 @@ struct platform_device *regulator_register_fixed(int id,
if (!data)
return NULL;
- data->cfg.supply_name = "fixed-dummy";
+ data->cfg.supply_name = "dummy";
data->cfg.microvolts = 0;
data->cfg.gpio = -EINVAL;
data->cfg.enabled_at_boot = 1;
diff --git a/trunk/drivers/regulator/mc13892-regulator.c b/trunk/drivers/regulator/mc13892-regulator.c
index 845aa2263b8a..e8cfc99dd8f0 100644
--- a/trunk/drivers/regulator/mc13892-regulator.c
+++ b/trunk/drivers/regulator/mc13892-regulator.c
@@ -552,7 +552,7 @@ static int __devinit mc13892_regulator_probe(struct platform_device *pdev)
mc13xxx_lock(mc13892);
ret = mc13xxx_reg_read(mc13892, MC13892_REVISION, &val);
if (ret)
- goto err_unlock;
+ goto err_free;
/* enable switch auto mode */
if ((val & 0x0000FFFF) == 0x45d0) {
@@ -562,7 +562,7 @@ static int __devinit mc13892_regulator_probe(struct platform_device *pdev)
MC13892_SWITCHERS4_SW1MODE_AUTO |
MC13892_SWITCHERS4_SW2MODE_AUTO);
if (ret)
- goto err_unlock;
+ goto err_free;
ret = mc13xxx_reg_rmw(mc13892, MC13892_SWITCHERS5,
MC13892_SWITCHERS5_SW3MODE_M |
@@ -570,7 +570,7 @@ static int __devinit mc13892_regulator_probe(struct platform_device *pdev)
MC13892_SWITCHERS5_SW3MODE_AUTO |
MC13892_SWITCHERS5_SW4MODE_AUTO);
if (ret)
- goto err_unlock;
+ goto err_free;
}
mc13xxx_unlock(mc13892);
@@ -612,10 +612,10 @@ static int __devinit mc13892_regulator_probe(struct platform_device *pdev)
err:
while (--i >= 0)
regulator_unregister(priv->regulators[i]);
- return ret;
-err_unlock:
+err_free:
mc13xxx_unlock(mc13892);
+
return ret;
}
diff --git a/trunk/drivers/regulator/s5m8767.c b/trunk/drivers/regulator/s5m8767.c
index 4ca2db059004..58447db15de1 100644
--- a/trunk/drivers/regulator/s5m8767.c
+++ b/trunk/drivers/regulator/s5m8767.c
@@ -311,7 +311,8 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev,
struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev);
const struct s5m_voltage_desc *desc;
int reg_id = rdev_get_id(rdev);
- int sel, reg, mask, ret;
+ int reg, mask, ret;
+ int i;
u8 val;
switch (reg_id) {
@@ -332,20 +333,19 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev,
desc = reg_voltage_map[reg_id];
- sel = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV);
- if (sel < 0)
- return sel;
+ i = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV);
+ if (i < 0)
+ return i;
ret = s5m8767_get_voltage_register(rdev, ®);
if (ret)
return ret;
s5m_reg_read(s5m8767->iodev, reg, &val);
- val &= ~mask;
- val |= sel;
+ val = val & mask;
ret = s5m_reg_write(s5m8767->iodev, reg, val);
- *selector = sel;
+ *selector = i;
return ret;
}
diff --git a/trunk/drivers/regulator/tps6586x-regulator.c b/trunk/drivers/regulator/tps6586x-regulator.c
index cfc1f16f7771..29b615ce3aff 100644
--- a/trunk/drivers/regulator/tps6586x-regulator.c
+++ b/trunk/drivers/regulator/tps6586x-regulator.c
@@ -79,11 +79,6 @@ static int tps6586x_ldo_list_voltage(struct regulator_dev *rdev,
unsigned selector)
{
struct tps6586x_regulator *info = rdev_get_drvdata(rdev);
- int rid = rdev_get_id(rdev);
-
- /* LDO0 has minimal voltage 1.2V rather than 1.25V */
- if ((rid == TPS6586X_ID_LDO_0) && (selector == 0))
- return (info->voltages[0] - 50) * 1000;
return info->voltages[selector] * 1000;
}
diff --git a/trunk/drivers/regulator/wm831x-dcdc.c b/trunk/drivers/regulator/wm831x-dcdc.c
index ff810e787eac..4904a40b0d46 100644
--- a/trunk/drivers/regulator/wm831x-dcdc.c
+++ b/trunk/drivers/regulator/wm831x-dcdc.c
@@ -380,15 +380,13 @@ static int wm831x_buckv_set_current_limit(struct regulator_dev *rdev,
int i;
for (i = 0; i < ARRAY_SIZE(wm831x_dcdc_ilim); i++) {
- if ((min_uA <= wm831x_dcdc_ilim[i]) &&
- (wm831x_dcdc_ilim[i] <= max_uA))
+ if (max_uA <= wm831x_dcdc_ilim[i])
break;
}
if (i == ARRAY_SIZE(wm831x_dcdc_ilim))
return -EINVAL;
- return wm831x_set_bits(wm831x, reg, WM831X_DC1_HC_THR_MASK,
- i << WM831X_DC1_HC_THR_SHIFT);
+ return wm831x_set_bits(wm831x, reg, WM831X_DC1_HC_THR_MASK, i);
}
static int wm831x_buckv_get_current_limit(struct regulator_dev *rdev)
@@ -402,8 +400,7 @@ static int wm831x_buckv_get_current_limit(struct regulator_dev *rdev)
if (val < 0)
return val;
- val = (val & WM831X_DC1_HC_THR_MASK) >> WM831X_DC1_HC_THR_SHIFT;
- return wm831x_dcdc_ilim[val];
+ return wm831x_dcdc_ilim[val & WM831X_DC1_HC_THR_MASK];
}
static struct regulator_ops wm831x_buckv_ops = {
diff --git a/trunk/drivers/regulator/wm831x-isink.c b/trunk/drivers/regulator/wm831x-isink.c
index b414e09c5620..634aac3f2d5f 100644
--- a/trunk/drivers/regulator/wm831x-isink.c
+++ b/trunk/drivers/regulator/wm831x-isink.c
@@ -101,7 +101,7 @@ static int wm831x_isink_set_current(struct regulator_dev *rdev,
for (i = 0; i < ARRAY_SIZE(wm831x_isinkv_values); i++) {
int val = wm831x_isinkv_values[i];
- if (min_uA <= val && val <= max_uA) {
+ if (min_uA >= val && val <= max_uA) {
ret = wm831x_set_bits(wm831x, isink->reg,
WM831X_CS1_ISEL_MASK, i);
return ret;
diff --git a/trunk/drivers/regulator/wm831x-ldo.c b/trunk/drivers/regulator/wm831x-ldo.c
index 641e9f6499d1..f1e4ab0f9fda 100644
--- a/trunk/drivers/regulator/wm831x-ldo.c
+++ b/trunk/drivers/regulator/wm831x-ldo.c
@@ -506,19 +506,22 @@ static int wm831x_aldo_set_mode(struct regulator_dev *rdev,
{
struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
struct wm831x *wm831x = ldo->wm831x;
+ int ctrl_reg = ldo->base + WM831X_LDO_CONTROL;
int on_reg = ldo->base + WM831X_LDO_ON_CONTROL;
int ret;
switch (mode) {
case REGULATOR_MODE_NORMAL:
- ret = wm831x_set_bits(wm831x, on_reg, WM831X_LDO7_ON_MODE, 0);
+ ret = wm831x_set_bits(wm831x, on_reg,
+ WM831X_LDO7_ON_MODE, 0);
if (ret < 0)
return ret;
break;
case REGULATOR_MODE_IDLE:
- ret = wm831x_set_bits(wm831x, on_reg, WM831X_LDO7_ON_MODE,
+ ret = wm831x_set_bits(wm831x, ctrl_reg,
+ WM831X_LDO7_ON_MODE,
WM831X_LDO7_ON_MODE);
if (ret < 0)
return ret;
diff --git a/trunk/drivers/regulator/wm8350-regulator.c b/trunk/drivers/regulator/wm8350-regulator.c
index 05ecfb872319..ab1e183a74b5 100644
--- a/trunk/drivers/regulator/wm8350-regulator.c
+++ b/trunk/drivers/regulator/wm8350-regulator.c
@@ -99,7 +99,7 @@ static int get_isink_val(int min_uA, int max_uA, u16 *setting)
{
int i;
- for (i = 0; i < ARRAY_SIZE(isink_cur); i++) {
+ for (i = ARRAY_SIZE(isink_cur) - 1; i >= 0; i--) {
if (min_uA <= isink_cur[i] && max_uA >= isink_cur[i]) {
*setting = i;
return 0;
@@ -186,7 +186,7 @@ static int wm8350_isink_get_current(struct regulator_dev *rdev)
return 0;
}
- return isink_cur[val];
+ return DIV_ROUND_CLOSEST(isink_cur[val], 100);
}
/* turn on ISINK followed by DCDC */
@@ -495,25 +495,25 @@ static int wm8350_dcdc_set_suspend_enable(struct regulator_dev *rdev)
val = wm8350_reg_read(wm8350, WM8350_DCDC1_LOW_POWER)
& ~WM8350_DCDC_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC1_LOW_POWER,
- val | wm8350->pmic.dcdc1_hib_mode);
+ wm8350->pmic.dcdc1_hib_mode);
break;
case WM8350_DCDC_3:
val = wm8350_reg_read(wm8350, WM8350_DCDC3_LOW_POWER)
& ~WM8350_DCDC_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC3_LOW_POWER,
- val | wm8350->pmic.dcdc3_hib_mode);
+ wm8350->pmic.dcdc3_hib_mode);
break;
case WM8350_DCDC_4:
val = wm8350_reg_read(wm8350, WM8350_DCDC4_LOW_POWER)
& ~WM8350_DCDC_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC4_LOW_POWER,
- val | wm8350->pmic.dcdc4_hib_mode);
+ wm8350->pmic.dcdc4_hib_mode);
break;
case WM8350_DCDC_6:
val = wm8350_reg_read(wm8350, WM8350_DCDC6_LOW_POWER)
& ~WM8350_DCDC_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC6_LOW_POWER,
- val | wm8350->pmic.dcdc6_hib_mode);
+ wm8350->pmic.dcdc6_hib_mode);
break;
case WM8350_DCDC_2:
case WM8350_DCDC_5:
@@ -535,25 +535,25 @@ static int wm8350_dcdc_set_suspend_disable(struct regulator_dev *rdev)
val = wm8350_reg_read(wm8350, WM8350_DCDC1_LOW_POWER);
wm8350->pmic.dcdc1_hib_mode = val & WM8350_DCDC_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC1_LOW_POWER,
- val | WM8350_DCDC_HIB_MODE_DIS);
+ WM8350_DCDC_HIB_MODE_DIS);
break;
case WM8350_DCDC_3:
val = wm8350_reg_read(wm8350, WM8350_DCDC3_LOW_POWER);
wm8350->pmic.dcdc3_hib_mode = val & WM8350_DCDC_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC3_LOW_POWER,
- val | WM8350_DCDC_HIB_MODE_DIS);
+ WM8350_DCDC_HIB_MODE_DIS);
break;
case WM8350_DCDC_4:
val = wm8350_reg_read(wm8350, WM8350_DCDC4_LOW_POWER);
wm8350->pmic.dcdc4_hib_mode = val & WM8350_DCDC_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC4_LOW_POWER,
- val | WM8350_DCDC_HIB_MODE_DIS);
+ WM8350_DCDC_HIB_MODE_DIS);
break;
case WM8350_DCDC_6:
val = wm8350_reg_read(wm8350, WM8350_DCDC6_LOW_POWER);
wm8350->pmic.dcdc6_hib_mode = val & WM8350_DCDC_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC6_LOW_POWER,
- val | WM8350_DCDC_HIB_MODE_DIS);
+ WM8350_DCDC_HIB_MODE_DIS);
break;
case WM8350_DCDC_2:
case WM8350_DCDC_5:
@@ -575,13 +575,13 @@ static int wm8350_dcdc25_set_suspend_enable(struct regulator_dev *rdev)
val = wm8350_reg_read(wm8350, WM8350_DCDC2_CONTROL)
& ~WM8350_DC2_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC2_CONTROL, val |
- (WM8350_DC2_HIB_MODE_ACTIVE << WM8350_DC2_HIB_MODE_SHIFT));
+ WM8350_DC2_HIB_MODE_ACTIVE);
break;
case WM8350_DCDC_5:
val = wm8350_reg_read(wm8350, WM8350_DCDC5_CONTROL)
- & ~WM8350_DC5_HIB_MODE_MASK;
+ & ~WM8350_DC2_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC5_CONTROL, val |
- (WM8350_DC5_HIB_MODE_ACTIVE << WM8350_DC5_HIB_MODE_SHIFT));
+ WM8350_DC5_HIB_MODE_ACTIVE);
break;
default:
return -EINVAL;
@@ -600,13 +600,13 @@ static int wm8350_dcdc25_set_suspend_disable(struct regulator_dev *rdev)
val = wm8350_reg_read(wm8350, WM8350_DCDC2_CONTROL)
& ~WM8350_DC2_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC2_CONTROL, val |
- (WM8350_DC2_HIB_MODE_DISABLE << WM8350_DC2_HIB_MODE_SHIFT));
+ WM8350_DC2_HIB_MODE_DISABLE);
break;
case WM8350_DCDC_5:
val = wm8350_reg_read(wm8350, WM8350_DCDC5_CONTROL)
- & ~WM8350_DC5_HIB_MODE_MASK;
+ & ~WM8350_DC2_HIB_MODE_MASK;
wm8350_reg_write(wm8350, WM8350_DCDC5_CONTROL, val |
- (WM8350_DC5_HIB_MODE_DISABLE << WM8350_DC5_HIB_MODE_SHIFT));
+ WM8350_DC2_HIB_MODE_DISABLE);
break;
default:
return -EINVAL;
@@ -749,7 +749,7 @@ static int wm8350_ldo_set_suspend_disable(struct regulator_dev *rdev)
/* all LDOs have same mV bits */
val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_LDO1_HIB_MODE_MASK;
- wm8350_reg_write(wm8350, volt_reg, val | WM8350_LDO1_HIB_MODE_DIS);
+ wm8350_reg_write(wm8350, volt_reg, WM8350_LDO1_HIB_MODE_DIS);
return 0;
}
diff --git a/trunk/drivers/remoteproc/remoteproc_debugfs.c b/trunk/drivers/remoteproc/remoteproc_debugfs.c
index 85d31a69e117..70277a530133 100644
--- a/trunk/drivers/remoteproc/remoteproc_debugfs.c
+++ b/trunk/drivers/remoteproc/remoteproc_debugfs.c
@@ -50,9 +50,16 @@ static ssize_t rproc_trace_read(struct file *filp, char __user *userbuf,
return simple_read_from_buffer(userbuf, count, ppos, trace->va, len);
}
+static int rproc_open_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+
+ return 0;
+}
+
static const struct file_operations trace_rproc_ops = {
.read = rproc_trace_read,
- .open = simple_open,
+ .open = rproc_open_generic,
.llseek = generic_file_llseek,
};
@@ -87,7 +94,7 @@ static ssize_t rproc_state_read(struct file *filp, char __user *userbuf,
static const struct file_operations rproc_state_ops = {
.read = rproc_state_read,
- .open = simple_open,
+ .open = rproc_open_generic,
.llseek = generic_file_llseek,
};
@@ -107,7 +114,7 @@ static ssize_t rproc_name_read(struct file *filp, char __user *userbuf,
static const struct file_operations rproc_name_ops = {
.read = rproc_name_read,
- .open = simple_open,
+ .open = rproc_open_generic,
.llseek = generic_file_llseek,
};
diff --git a/trunk/drivers/rtc/rtc-88pm860x.c b/trunk/drivers/rtc/rtc-88pm860x.c
index feddefc42109..afee0e8ae714 100644
--- a/trunk/drivers/rtc/rtc-88pm860x.c
+++ b/trunk/drivers/rtc/rtc-88pm860x.c
@@ -72,9 +72,9 @@ static int pm860x_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
struct pm860x_rtc_info *info = dev_get_drvdata(dev);
if (enabled)
- pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM_EN, ALARM_EN);
+ pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM, ALARM);
else
- pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM_EN, 0);
+ pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM, 0);
return 0;
}
diff --git a/trunk/drivers/scsi/lpfc/lpfc_debugfs.c b/trunk/drivers/scsi/lpfc/lpfc_debugfs.c
index af04b0d6688d..5bdf2eecb178 100644
--- a/trunk/drivers/scsi/lpfc/lpfc_debugfs.c
+++ b/trunk/drivers/scsi/lpfc/lpfc_debugfs.c
@@ -997,6 +997,13 @@ lpfc_debugfs_dumpDataDif_write(struct file *file, const char __user *buf,
return nbytes;
}
+static int
+lpfc_debugfs_dif_err_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t
lpfc_debugfs_dif_err_read(struct file *file, char __user *buf,
size_t nbytes, loff_t *ppos)
@@ -3534,7 +3541,7 @@ static const struct file_operations lpfc_debugfs_op_dumpDif = {
#undef lpfc_debugfs_op_dif_err
static const struct file_operations lpfc_debugfs_op_dif_err = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = lpfc_debugfs_dif_err_open,
.llseek = lpfc_debugfs_lseek,
.read = lpfc_debugfs_dif_err_read,
.write = lpfc_debugfs_dif_err_write,
diff --git a/trunk/drivers/spi/spi-dw.c b/trunk/drivers/spi/spi-dw.c
index d1a495f64e2d..082458d73ce9 100644
--- a/trunk/drivers/spi/spi-dw.c
+++ b/trunk/drivers/spi/spi-dw.c
@@ -63,6 +63,12 @@ struct chip_data {
};
#ifdef CONFIG_DEBUG_FS
+static int spi_show_regs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
#define SPI_REGS_BUFSIZE 1024
static ssize_t spi_show_regs(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
@@ -122,7 +128,7 @@ static ssize_t spi_show_regs(struct file *file, char __user *user_buf,
static const struct file_operations mrst_spi_regs_ops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = spi_show_regs_open,
.read = spi_show_regs,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/tty/serial/mfd.c b/trunk/drivers/tty/serial/mfd.c
index c4b50af46c44..a9234ba8f8d5 100644
--- a/trunk/drivers/tty/serial/mfd.c
+++ b/trunk/drivers/tty/serial/mfd.c
@@ -127,6 +127,11 @@ static inline void serial_out(struct uart_hsu_port *up, int offset, int value)
#define HSU_REGS_BUFSIZE 1024
+static int hsu_show_regs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
static ssize_t port_show_regs(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
@@ -226,14 +231,14 @@ static ssize_t dma_show_regs(struct file *file, char __user *user_buf,
static const struct file_operations port_regs_ops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = hsu_show_regs_open,
.read = port_show_regs,
.llseek = default_llseek,
};
static const struct file_operations dma_regs_ops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = hsu_show_regs_open,
.read = dma_show_regs,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/tty/serial/pch_uart.c b/trunk/drivers/tty/serial/pch_uart.c
index 08b9962b8fda..e825460478be 100644
--- a/trunk/drivers/tty/serial/pch_uart.c
+++ b/trunk/drivers/tty/serial/pch_uart.c
@@ -304,7 +304,11 @@ static const int trigger_level_1[4] = { 1, 1, 1, 1 };
#ifdef CONFIG_DEBUG_FS
#define PCH_REGS_BUFSIZE 1024
-
+static int pch_show_regs_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
static ssize_t port_show_regs(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
@@ -358,7 +362,7 @@ static ssize_t port_show_regs(struct file *file, char __user *user_buf,
static const struct file_operations port_regs_ops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = pch_show_regs_open,
.read = port_show_regs,
.llseek = default_llseek,
};
diff --git a/trunk/drivers/tty/serial/sunzilog.c b/trunk/drivers/tty/serial/sunzilog.c
index babd9470982b..b3b70b0bf85b 100644
--- a/trunk/drivers/tty/serial/sunzilog.c
+++ b/trunk/drivers/tty/serial/sunzilog.c
@@ -1581,7 +1581,7 @@ static int __init sunzilog_init(void)
if (err)
goto out_unregister_uart;
- if (zilog_irq) {
+ if (!zilog_irq) {
struct uart_sunzilog_port *up = sunzilog_irq_chain;
err = request_irq(zilog_irq, sunzilog_interrupt, IRQF_SHARED,
"zs", sunzilog_irq_chain);
@@ -1622,7 +1622,7 @@ static void __exit sunzilog_exit(void)
{
platform_driver_unregister(&zs_driver);
- if (zilog_irq) {
+ if (!zilog_irq) {
struct uart_sunzilog_port *up = sunzilog_irq_chain;
/* Disable Interrupts */
diff --git a/trunk/drivers/tty/sysrq.c b/trunk/drivers/tty/sysrq.c
index 05728894a88c..136e86faa1e1 100644
--- a/trunk/drivers/tty/sysrq.c
+++ b/trunk/drivers/tty/sysrq.c
@@ -327,7 +327,7 @@ static void send_sig_all(int sig)
if (is_global_init(p))
continue;
- do_send_sig_info(sig, SEND_SIG_FORCED, p, true);
+ force_sig(sig, p);
}
read_unlock(&tasklist_lock);
}
diff --git a/trunk/drivers/usb/core/inode.c b/trunk/drivers/usb/core/inode.c
index d2b9af59cba9..cefa0c8b5b6a 100644
--- a/trunk/drivers/usb/core/inode.c
+++ b/trunk/drivers/usb/core/inode.c
@@ -428,10 +428,18 @@ static loff_t default_file_lseek (struct file *file, loff_t offset, int orig)
return retval;
}
+static int default_open (struct inode *inode, struct file *file)
+{
+ if (inode->i_private)
+ file->private_data = inode->i_private;
+
+ return 0;
+}
+
static const struct file_operations default_file_operations = {
.read = default_read_file,
.write = default_write_file,
- .open = simple_open,
+ .open = default_open,
.llseek = default_file_lseek,
};
diff --git a/trunk/drivers/usb/gadget/f_phonet.c b/trunk/drivers/usb/gadget/f_phonet.c
index 965a6293206a..85a5cebe96b3 100644
--- a/trunk/drivers/usb/gadget/f_phonet.c
+++ b/trunk/drivers/usb/gadget/f_phonet.c
@@ -345,7 +345,7 @@ static void pn_rx_complete(struct usb_ep *ep, struct usb_request *req)
}
skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page,
- skb->len <= 1, req->actual, PAGE_SIZE);
+ skb->len <= 1, req->actual, req->actual);
page = NULL;
if (req->actual < req->length) { /* Last fragment */
diff --git a/trunk/drivers/usb/host/ehci-dbg.c b/trunk/drivers/usb/host/ehci-dbg.c
index 680e1a31fb87..fd9109d7eb0e 100644
--- a/trunk/drivers/usb/host/ehci-dbg.c
+++ b/trunk/drivers/usb/host/ehci-dbg.c
@@ -352,6 +352,7 @@ static int debug_async_open(struct inode *, struct file *);
static int debug_periodic_open(struct inode *, struct file *);
static int debug_registers_open(struct inode *, struct file *);
static int debug_async_open(struct inode *, struct file *);
+static int debug_lpm_open(struct inode *, struct file *);
static ssize_t debug_lpm_read(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos);
static ssize_t debug_lpm_write(struct file *file, const char __user *buffer,
@@ -384,7 +385,7 @@ static const struct file_operations debug_registers_fops = {
};
static const struct file_operations debug_lpm_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = debug_lpm_open,
.read = debug_lpm_read,
.write = debug_lpm_write,
.release = debug_lpm_close,
@@ -969,6 +970,12 @@ static int debug_registers_open(struct inode *inode, struct file *file)
return file->private_data ? 0 : -ENOMEM;
}
+static int debug_lpm_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static int debug_lpm_close(struct inode *inode, struct file *file)
{
return 0;
diff --git a/trunk/drivers/uwb/uwb-debug.c b/trunk/drivers/uwb/uwb-debug.c
index 6ec45beb7af5..2eecec0c13c9 100644
--- a/trunk/drivers/uwb/uwb-debug.c
+++ b/trunk/drivers/uwb/uwb-debug.c
@@ -159,6 +159,13 @@ static int cmd_ie_rm(struct uwb_rc *rc, struct uwb_dbg_cmd_ie *ie_to_rm)
return uwb_rc_ie_rm(rc, ie_to_rm->data[0]);
}
+static int command_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+
+ return 0;
+}
+
static ssize_t command_write(struct file *file, const char __user *buf,
size_t len, loff_t *off)
{
@@ -199,7 +206,7 @@ static ssize_t command_write(struct file *file, const char __user *buf,
}
static const struct file_operations command_fops = {
- .open = simple_open,
+ .open = command_open,
.write = command_write,
.read = NULL,
.llseek = no_llseek,
diff --git a/trunk/drivers/video/backlight/Kconfig b/trunk/drivers/video/backlight/Kconfig
index af16884491ed..7ed9991fa747 100644
--- a/trunk/drivers/video/backlight/Kconfig
+++ b/trunk/drivers/video/backlight/Kconfig
@@ -245,12 +245,6 @@ config BACKLIGHT_DA903X
If you have a LCD backlight connected to the WLED output of DA9030
or DA9034 WLED output, say Y here to enable this driver.
-config BACKLIGHT_DA9052
- tristate "Dialog DA9052/DA9053 WLED"
- depends on PMIC_DA9052
- help
- Enable the Backlight Driver for DA9052-BC and DA9053-AA/Bx PMICs.
-
config BACKLIGHT_MAX8925
tristate "Backlight driver for MAX8925"
depends on MFD_MAX8925
diff --git a/trunk/drivers/video/backlight/Makefile b/trunk/drivers/video/backlight/Makefile
index 36855ae887d6..8071eb656147 100644
--- a/trunk/drivers/video/backlight/Makefile
+++ b/trunk/drivers/video/backlight/Makefile
@@ -29,7 +29,6 @@ obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o
obj-$(CONFIG_BACKLIGHT_DA903X) += da903x_bl.o
-obj-$(CONFIG_BACKLIGHT_DA9052) += da9052_bl.o
obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o
obj-$(CONFIG_BACKLIGHT_APPLE) += apple_bl.o
obj-$(CONFIG_BACKLIGHT_TOSA) += tosa_bl.o
diff --git a/trunk/drivers/video/backlight/da9052_bl.c b/trunk/drivers/video/backlight/da9052_bl.c
deleted file mode 100644
index b628d68f5162..000000000000
--- a/trunk/drivers/video/backlight/da9052_bl.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Backlight Driver for Dialog DA9052 PMICs
- *
- * Copyright(c) 2012 Dialog Semiconductor Ltd.
- *
- * Author: David Dajun Chen
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- */
-
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-
-#define DA9052_MAX_BRIGHTNESS 0xFF
-
-enum {
- DA9052_WLEDS_OFF,
- DA9052_WLEDS_ON,
-};
-
-enum {
- DA9052_TYPE_WLED1,
- DA9052_TYPE_WLED2,
- DA9052_TYPE_WLED3,
-};
-
-static unsigned char wled_bank[] = {
- DA9052_LED1_CONF_REG,
- DA9052_LED2_CONF_REG,
- DA9052_LED3_CONF_REG,
-};
-
-struct da9052_bl {
- struct da9052 *da9052;
- uint brightness;
- uint state;
- uint led_reg;
-};
-
-static int da9052_adjust_wled_brightness(struct da9052_bl *wleds)
-{
- unsigned char boost_en;
- unsigned char i_sink;
- int ret;
-
- boost_en = 0x3F;
- i_sink = 0xFF;
- if (wleds->state == DA9052_WLEDS_OFF) {
- boost_en = 0x00;
- i_sink = 0x00;
- }
-
- ret = da9052_reg_write(wleds->da9052, DA9052_BOOST_REG, boost_en);
- if (ret < 0)
- return ret;
-
- ret = da9052_reg_write(wleds->da9052, DA9052_LED_CONT_REG, i_sink);
- if (ret < 0)
- return ret;
-
- ret = da9052_reg_write(wleds->da9052, wled_bank[wleds->led_reg], 0x0);
- if (ret < 0)
- return ret;
-
- msleep(10);
-
- if (wleds->brightness) {
- ret = da9052_reg_write(wleds->da9052, wled_bank[wleds->led_reg],
- wleds->brightness);
- if (ret < 0)
- return ret;
- }
-
- return 0;
-}
-
-static int da9052_backlight_update_status(struct backlight_device *bl)
-{
- int brightness = bl->props.brightness;
- struct da9052_bl *wleds = bl_get_data(bl);
-
- wleds->brightness = brightness;
- wleds->state = DA9052_WLEDS_ON;
-
- return da9052_adjust_wled_brightness(wleds);
-}
-
-static int da9052_backlight_get_brightness(struct backlight_device *bl)
-{
- struct da9052_bl *wleds = bl_get_data(bl);
-
- return wleds->brightness;
-}
-
-static const struct backlight_ops da9052_backlight_ops = {
- .update_status = da9052_backlight_update_status,
- .get_brightness = da9052_backlight_get_brightness,
-};
-
-static int da9052_backlight_probe(struct platform_device *pdev)
-{
- struct backlight_device *bl;
- struct backlight_properties props;
- struct da9052_bl *wleds;
-
- wleds = devm_kzalloc(&pdev->dev, sizeof(struct da9052_bl), GFP_KERNEL);
- if (!wleds)
- return -ENOMEM;
-
- wleds->da9052 = dev_get_drvdata(pdev->dev.parent);
- wleds->brightness = 0;
- wleds->led_reg = platform_get_device_id(pdev)->driver_data;
- wleds->state = DA9052_WLEDS_OFF;
-
- props.type = BACKLIGHT_RAW;
- props.max_brightness = DA9052_MAX_BRIGHTNESS;
-
- bl = backlight_device_register(pdev->name, wleds->da9052->dev, wleds,
- &da9052_backlight_ops, &props);
- if (IS_ERR(bl)) {
- dev_err(&pdev->dev, "Failed to register backlight\n");
- devm_kfree(&pdev->dev, wleds);
- return PTR_ERR(bl);
- }
-
- bl->props.max_brightness = DA9052_MAX_BRIGHTNESS;
- bl->props.brightness = 0;
- platform_set_drvdata(pdev, bl);
-
- return da9052_adjust_wled_brightness(wleds);
-}
-
-static int da9052_backlight_remove(struct platform_device *pdev)
-{
- struct backlight_device *bl = platform_get_drvdata(pdev);
- struct da9052_bl *wleds = bl_get_data(bl);
-
- wleds->brightness = 0;
- wleds->state = DA9052_WLEDS_OFF;
- da9052_adjust_wled_brightness(wleds);
- backlight_device_unregister(bl);
- devm_kfree(&pdev->dev, wleds);
-
- return 0;
-}
-
-static struct platform_device_id da9052_wled_ids[] = {
- {
- .name = "da9052-wled1",
- .driver_data = DA9052_TYPE_WLED1,
- },
- {
- .name = "da9052-wled2",
- .driver_data = DA9052_TYPE_WLED2,
- },
- {
- .name = "da9052-wled3",
- .driver_data = DA9052_TYPE_WLED3,
- },
-};
-
-static struct platform_driver da9052_wled_driver = {
- .probe = da9052_backlight_probe,
- .remove = da9052_backlight_remove,
- .id_table = da9052_wled_ids,
- .driver = {
- .name = "da9052-wled",
- .owner = THIS_MODULE,
- },
-};
-
-module_platform_driver(da9052_wled_driver);
-
-MODULE_AUTHOR("David Dajun Chen ");
-MODULE_DESCRIPTION("Backlight driver for DA9052 PMIC");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:da9052-backlight");
diff --git a/trunk/drivers/xen/swiotlb-xen.c b/trunk/drivers/xen/swiotlb-xen.c
index 1afb4fba11b4..19e6a2041371 100644
--- a/trunk/drivers/xen/swiotlb-xen.c
+++ b/trunk/drivers/xen/swiotlb-xen.c
@@ -204,8 +204,7 @@ void __init xen_swiotlb_init(int verbose)
void *
xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
- dma_addr_t *dma_handle, gfp_t flags,
- struct dma_attrs *attrs)
+ dma_addr_t *dma_handle, gfp_t flags)
{
void *ret;
int order = get_order(size);
@@ -254,7 +253,7 @@ EXPORT_SYMBOL_GPL(xen_swiotlb_alloc_coherent);
void
xen_swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
- dma_addr_t dev_addr, struct dma_attrs *attrs)
+ dma_addr_t dev_addr)
{
int order = get_order(size);
phys_addr_t phys;
diff --git a/trunk/fs/cifs/cifssmb.c b/trunk/fs/cifs/cifssmb.c
index f52c5ab78f9d..8fecc99be344 100644
--- a/trunk/fs/cifs/cifssmb.c
+++ b/trunk/fs/cifs/cifssmb.c
@@ -3892,12 +3892,13 @@ CIFSSMBSetCIFSACL(const int xid, struct cifs_tcon *tcon, __u16 fid,
int rc = 0;
int bytes_returned = 0;
SET_SEC_DESC_REQ *pSMB = NULL;
- void *pSMBr;
+ NTRANSACT_RSP *pSMBr = NULL;
setCifsAclRetry:
- rc = smb_init(SMB_COM_NT_TRANSACT, 19, tcon, (void **) &pSMB, &pSMBr);
+ rc = smb_init(SMB_COM_NT_TRANSACT, 19, tcon, (void **) &pSMB,
+ (void **) &pSMBr);
if (rc)
- return rc;
+ return (rc);
pSMB->MaxSetupCount = 0;
pSMB->Reserved = 0;
@@ -3925,8 +3926,9 @@ CIFSSMBSetCIFSACL(const int xid, struct cifs_tcon *tcon, __u16 fid,
pSMB->AclFlags = cpu_to_le32(aclflag);
if (pntsd && acllen) {
- memcpy((char *)pSMBr + offsetof(struct smb_hdr, Protocol) +
- data_offset, pntsd, acllen);
+ memcpy((char *) &pSMBr->hdr.Protocol + data_offset,
+ (char *) pntsd,
+ acllen);
inc_rfc1001_len(pSMB, byte_count + data_count);
} else
inc_rfc1001_len(pSMB, byte_count);
@@ -5706,8 +5708,7 @@ CIFSSMBSetFileInfo(const int xid, struct cifs_tcon *tcon,
param_offset = offsetof(struct smb_com_transaction2_sfi_req, Fid) - 4;
offset = param_offset + params;
- data_offset = (char *)pSMB +
- offsetof(struct smb_hdr, Protocol) + offset;
+ data_offset = (char *) (&pSMB->hdr.Protocol) + offset;
count = sizeof(FILE_BASIC_INFO);
pSMB->MaxParameterCount = cpu_to_le16(2);
@@ -5976,7 +5977,7 @@ CIFSSMBUnixSetFileInfo(const int xid, struct cifs_tcon *tcon,
u16 fid, u32 pid_of_opener)
{
struct smb_com_transaction2_sfi_req *pSMB = NULL;
- char *data_offset;
+ FILE_UNIX_BASIC_INFO *data_offset;
int rc = 0;
u16 params, param_offset, offset, byte_count, count;
@@ -5998,9 +5999,8 @@ CIFSSMBUnixSetFileInfo(const int xid, struct cifs_tcon *tcon,
param_offset = offsetof(struct smb_com_transaction2_sfi_req, Fid) - 4;
offset = param_offset + params;
- data_offset = (char *)pSMB +
- offsetof(struct smb_hdr, Protocol) + offset;
-
+ data_offset = (FILE_UNIX_BASIC_INFO *)
+ ((char *)(&pSMB->hdr.Protocol) + offset);
count = sizeof(FILE_UNIX_BASIC_INFO);
pSMB->MaxParameterCount = cpu_to_le16(2);
@@ -6022,7 +6022,7 @@ CIFSSMBUnixSetFileInfo(const int xid, struct cifs_tcon *tcon,
inc_rfc1001_len(pSMB, byte_count);
pSMB->ByteCount = cpu_to_le16(byte_count);
- cifs_fill_unix_set_info((FILE_UNIX_BASIC_INFO *)data_offset, args);
+ cifs_fill_unix_set_info(data_offset, args);
rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0);
if (rc)
diff --git a/trunk/fs/cifs/connect.c b/trunk/fs/cifs/connect.c
index d81e933a796b..302a15c505a9 100644
--- a/trunk/fs/cifs/connect.c
+++ b/trunk/fs/cifs/connect.c
@@ -1565,7 +1565,8 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
/* Obtain the value string */
value = strchr(data, '=');
- value++;
+ if (value != NULL)
+ *value++ = '\0';
/* Set tmp_end to end of the string */
tmp_end = (char *) value + strlen(value);
@@ -1648,13 +1649,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
goto cifs_parse_mount_err;
}
- vol->UNC = kmalloc(temp_len+1, GFP_KERNEL);
- if (vol->UNC == NULL) {
- printk(KERN_WARNING "CIFS: no memory for UNC\n");
- goto cifs_parse_mount_err;
- }
- strcpy(vol->UNC, string);
-
if (strncmp(string, "//", 2) == 0) {
vol->UNC[0] = '\\';
vol->UNC[1] = '\\';
@@ -1664,6 +1658,13 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
goto cifs_parse_mount_err;
}
+ vol->UNC = kmalloc(temp_len+1, GFP_KERNEL);
+ if (vol->UNC == NULL) {
+ printk(KERN_WARNING "CIFS: no memory "
+ "for UNC\n");
+ goto cifs_parse_mount_err;
+ }
+ strcpy(vol->UNC, string);
break;
case Opt_domain:
string = match_strdup(args);
diff --git a/trunk/fs/cifs/file.c b/trunk/fs/cifs/file.c
index fae765dac934..460d87b7cda0 100644
--- a/trunk/fs/cifs/file.c
+++ b/trunk/fs/cifs/file.c
@@ -835,21 +835,13 @@ cifs_posix_lock_set(struct file *file, struct file_lock *flock)
if ((flock->fl_flags & FL_POSIX) == 0)
return rc;
-try_again:
mutex_lock(&cinode->lock_mutex);
if (!cinode->can_cache_brlcks) {
mutex_unlock(&cinode->lock_mutex);
return rc;
}
-
- rc = posix_lock_file(file, flock, NULL);
+ rc = posix_lock_file_wait(file, flock);
mutex_unlock(&cinode->lock_mutex);
- if (rc == FILE_LOCK_DEFERRED) {
- rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next);
- if (!rc)
- goto try_again;
- locks_delete_block(flock);
- }
return rc;
}
diff --git a/trunk/fs/cifs/netmisc.c b/trunk/fs/cifs/netmisc.c
index 581c225f7f50..dd23a321bdda 100644
--- a/trunk/fs/cifs/netmisc.c
+++ b/trunk/fs/cifs/netmisc.c
@@ -197,7 +197,8 @@ cifs_convert_address(struct sockaddr *dst, const char *src, int len)
memcpy(scope_id, pct + 1, slen);
scope_id[slen] = '\0';
- rc = kstrtouint(scope_id, 0, &s6->sin6_scope_id);
+ rc = strict_strtoul(scope_id, 0,
+ (unsigned long *)&s6->sin6_scope_id);
rc = (rc == 0) ? 1 : 0;
}
diff --git a/trunk/fs/debugfs/file.c b/trunk/fs/debugfs/file.c
index 5dfafdd1dbd3..21e93605161c 100644
--- a/trunk/fs/debugfs/file.c
+++ b/trunk/fs/debugfs/file.c
@@ -33,10 +33,18 @@ static ssize_t default_write_file(struct file *file, const char __user *buf,
return count;
}
+static int default_open(struct inode *inode, struct file *file)
+{
+ if (inode->i_private)
+ file->private_data = inode->i_private;
+
+ return 0;
+}
+
const struct file_operations debugfs_file_operations = {
.read = default_read_file,
.write = default_write_file,
- .open = simple_open,
+ .open = default_open,
.llseek = noop_llseek,
};
@@ -439,7 +447,7 @@ static ssize_t write_file_bool(struct file *file, const char __user *user_buf,
static const struct file_operations fops_bool = {
.read = read_file_bool,
.write = write_file_bool,
- .open = simple_open,
+ .open = default_open,
.llseek = default_llseek,
};
@@ -484,7 +492,7 @@ static ssize_t read_file_blob(struct file *file, char __user *user_buf,
static const struct file_operations fops_blob = {
.read = read_file_blob,
- .open = simple_open,
+ .open = default_open,
.llseek = default_llseek,
};
diff --git a/trunk/fs/dlm/debug_fs.c b/trunk/fs/dlm/debug_fs.c
index 1c9b08095f98..3dca2b39e83f 100644
--- a/trunk/fs/dlm/debug_fs.c
+++ b/trunk/fs/dlm/debug_fs.c
@@ -609,6 +609,13 @@ static const struct file_operations format3_fops = {
/*
* dump lkb's on the ls_waiters list
*/
+
+static int waiters_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t waiters_read(struct file *file, char __user *userbuf,
size_t count, loff_t *ppos)
{
@@ -637,7 +644,7 @@ static ssize_t waiters_read(struct file *file, char __user *userbuf,
static const struct file_operations waiters_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = waiters_open,
.read = waiters_read,
.llseek = default_llseek,
};
diff --git a/trunk/fs/exec.c b/trunk/fs/exec.c
index b1fd2025e59a..9a1d9f0a60ab 100644
--- a/trunk/fs/exec.c
+++ b/trunk/fs/exec.c
@@ -1371,7 +1371,7 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
unsigned int depth = bprm->recursion_depth;
int try,retval;
struct linux_binfmt *fmt;
- pid_t old_pid, old_vpid;
+ pid_t old_pid;
retval = security_bprm_check(bprm);
if (retval)
@@ -1382,9 +1382,8 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
return retval;
/* Need to fetch pid before load_binary changes it */
- old_pid = current->pid;
rcu_read_lock();
- old_vpid = task_pid_nr_ns(current, task_active_pid_ns(current->parent));
+ old_pid = task_pid_nr_ns(current, task_active_pid_ns(current->parent));
rcu_read_unlock();
retval = -ENOENT;
@@ -1407,7 +1406,7 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
if (retval >= 0) {
if (depth == 0) {
trace_sched_process_exec(current, old_pid, bprm);
- ptrace_event(PTRACE_EVENT_EXEC, old_vpid);
+ ptrace_event(PTRACE_EVENT_EXEC, old_pid);
}
put_binfmt(fmt);
allow_write_access(bprm->file);
diff --git a/trunk/fs/hugetlbfs/inode.c b/trunk/fs/hugetlbfs/inode.c
index 28cf06e4ec84..ea251749d9d5 100644
--- a/trunk/fs/hugetlbfs/inode.c
+++ b/trunk/fs/hugetlbfs/inode.c
@@ -1031,6 +1031,7 @@ static int __init init_hugetlbfs_fs(void)
}
error = PTR_ERR(vfsmount);
+ unregister_filesystem(&hugetlbfs_fs_type);
out:
kmem_cache_destroy(hugetlbfs_inode_cachep);
diff --git a/trunk/fs/libfs.c b/trunk/fs/libfs.c
index 358094f0433d..4a0d1f06da57 100644
--- a/trunk/fs/libfs.c
+++ b/trunk/fs/libfs.c
@@ -264,13 +264,6 @@ struct dentry *mount_pseudo(struct file_system_type *fs_type, char *name,
return ERR_PTR(-ENOMEM);
}
-int simple_open(struct inode *inode, struct file *file)
-{
- if (inode->i_private)
- file->private_data = inode->i_private;
- return 0;
-}
-
int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
{
struct inode *inode = old_dentry->d_inode;
@@ -991,7 +984,6 @@ EXPORT_SYMBOL(simple_dir_operations);
EXPORT_SYMBOL(simple_empty);
EXPORT_SYMBOL(simple_fill_super);
EXPORT_SYMBOL(simple_getattr);
-EXPORT_SYMBOL(simple_open);
EXPORT_SYMBOL(simple_link);
EXPORT_SYMBOL(simple_lookup);
EXPORT_SYMBOL(simple_pin_fs);
diff --git a/trunk/fs/locks.c b/trunk/fs/locks.c
index 0d68f1f81799..637694bf3a03 100644
--- a/trunk/fs/locks.c
+++ b/trunk/fs/locks.c
@@ -510,13 +510,12 @@ static void __locks_delete_block(struct file_lock *waiter)
/*
*/
-void locks_delete_block(struct file_lock *waiter)
+static void locks_delete_block(struct file_lock *waiter)
{
lock_flocks();
__locks_delete_block(waiter);
unlock_flocks();
}
-EXPORT_SYMBOL(locks_delete_block);
/* Insert waiter into blocker's block list.
* We use a circular list so that processes can be easily woken up in
diff --git a/trunk/fs/proc/root.c b/trunk/fs/proc/root.c
index eed44bfc85db..46a15d8a29ca 100644
--- a/trunk/fs/proc/root.c
+++ b/trunk/fs/proc/root.c
@@ -115,13 +115,12 @@ static struct dentry *proc_mount(struct file_system_type *fs_type,
if (IS_ERR(sb))
return ERR_CAST(sb);
- if (!proc_parse_options(options, ns)) {
- deactivate_locked_super(sb);
- return ERR_PTR(-EINVAL);
- }
-
if (!sb->s_root) {
sb->s_flags = flags;
+ if (!proc_parse_options(options, ns)) {
+ deactivate_locked_super(sb);
+ return ERR_PTR(-EINVAL);
+ }
err = proc_fill_super(sb);
if (err) {
deactivate_locked_super(sb);
diff --git a/trunk/fs/pstore/inode.c b/trunk/fs/pstore/inode.c
index 19507889bb7f..50952c9bd06c 100644
--- a/trunk/fs/pstore/inode.c
+++ b/trunk/fs/pstore/inode.c
@@ -52,6 +52,12 @@ struct pstore_private {
char data[];
};
+static int pstore_file_open(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
static ssize_t pstore_file_read(struct file *file, char __user *userbuf,
size_t count, loff_t *ppos)
{
@@ -61,7 +67,7 @@ static ssize_t pstore_file_read(struct file *file, char __user *userbuf,
}
static const struct file_operations pstore_file_operations = {
- .open = simple_open,
+ .open = pstore_file_open,
.read = pstore_file_read,
.llseek = default_llseek,
};
diff --git a/trunk/fs/xattr.c b/trunk/fs/xattr.c
index 3c8c1cc333c7..d6dfd247bb2f 100644
--- a/trunk/fs/xattr.c
+++ b/trunk/fs/xattr.c
@@ -19,10 +19,9 @@
#include
#include
#include
-#include
-
#include
+
/*
* Check permissions for extended attribute access. This is a bit complicated
* because different namespaces have very different rules.
@@ -321,7 +320,6 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
{
int error;
void *kvalue = NULL;
- void *vvalue = NULL; /* If non-NULL, we used vmalloc() */
char kname[XATTR_NAME_MAX + 1];
if (flags & ~(XATTR_CREATE|XATTR_REPLACE))
@@ -336,25 +334,13 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
if (size) {
if (size > XATTR_SIZE_MAX)
return -E2BIG;
- kvalue = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
- if (!kvalue) {
- vvalue = vmalloc(size);
- if (!vvalue)
- return -ENOMEM;
- kvalue = vvalue;
- }
- if (copy_from_user(kvalue, value, size)) {
- error = -EFAULT;
- goto out;
- }
+ kvalue = memdup_user(value, size);
+ if (IS_ERR(kvalue))
+ return PTR_ERR(kvalue);
}
error = vfs_setxattr(d, kname, kvalue, size, flags);
-out:
- if (vvalue)
- vfree(vvalue);
- else
- kfree(kvalue);
+ kfree(kvalue);
return error;
}
@@ -506,18 +492,13 @@ listxattr(struct dentry *d, char __user *list, size_t size)
{
ssize_t error;
char *klist = NULL;
- char *vlist = NULL; /* If non-NULL, we used vmalloc() */
if (size) {
if (size > XATTR_LIST_MAX)
size = XATTR_LIST_MAX;
- klist = kmalloc(size, __GFP_NOWARN | GFP_KERNEL);
- if (!klist) {
- vlist = vmalloc(size);
- if (!vlist)
- return -ENOMEM;
- klist = vlist;
- }
+ klist = kmalloc(size, GFP_KERNEL);
+ if (!klist)
+ return -ENOMEM;
}
error = vfs_listxattr(d, klist, size);
@@ -529,10 +510,7 @@ listxattr(struct dentry *d, char __user *list, size_t size)
than XATTR_LIST_MAX bytes. Not possible. */
error = -E2BIG;
}
- if (vlist)
- vfree(vlist);
- else
- kfree(klist);
+ kfree(klist);
return error;
}
diff --git a/trunk/include/asm-generic/cmpxchg.h b/trunk/include/asm-generic/cmpxchg.h
index 14883026015d..8a361834dc25 100644
--- a/trunk/include/asm-generic/cmpxchg.h
+++ b/trunk/include/asm-generic/cmpxchg.h
@@ -10,7 +10,6 @@
#error "Cannot use generic cmpxchg on SMP"
#endif
-#include
#include
#ifndef xchg
diff --git a/trunk/include/crypto/internal/aead.h b/trunk/include/crypto/internal/aead.h
index 2eba340230a7..d838c945575a 100644
--- a/trunk/include/crypto/internal/aead.h
+++ b/trunk/include/crypto/internal/aead.h
@@ -31,8 +31,6 @@ static inline void crypto_set_aead_spawn(
crypto_set_spawn(&spawn->base, inst);
}
-struct crypto_alg *crypto_lookup_aead(const char *name, u32 type, u32 mask);
-
int crypto_grab_aead(struct crypto_aead_spawn *spawn, const char *name,
u32 type, u32 mask);
diff --git a/trunk/include/crypto/internal/skcipher.h b/trunk/include/crypto/internal/skcipher.h
index 06e8b32d541c..3a748a6bf772 100644
--- a/trunk/include/crypto/internal/skcipher.h
+++ b/trunk/include/crypto/internal/skcipher.h
@@ -34,8 +34,6 @@ static inline void crypto_set_skcipher_spawn(
int crypto_grab_skcipher(struct crypto_skcipher_spawn *spawn, const char *name,
u32 type, u32 mask);
-struct crypto_alg *crypto_lookup_skcipher(const char *name, u32 type, u32 mask);
-
static inline void crypto_drop_skcipher(struct crypto_skcipher_spawn *spawn)
{
crypto_drop_spawn(&spawn->base);
diff --git a/trunk/include/drm/drm.h b/trunk/include/drm/drm.h
index 64ff02d5b730..34a7b89fd006 100644
--- a/trunk/include/drm/drm.h
+++ b/trunk/include/drm/drm.h
@@ -617,17 +617,6 @@ struct drm_get_cap {
__u64 value;
};
-#define DRM_CLOEXEC O_CLOEXEC
-struct drm_prime_handle {
- __u32 handle;
-
- /** Flags.. only applicable for handle->fd */
- __u32 flags;
-
- /** Returned dmabuf file descriptor */
- __s32 fd;
-};
-
#include "drm_mode.h"
#define DRM_IOCTL_BASE 'd'
@@ -684,8 +673,7 @@ struct drm_prime_handle {
#define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock)
#define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock)
-#define DRM_IOCTL_PRIME_HANDLE_TO_FD DRM_IOWR(0x2d, struct drm_prime_handle)
-#define DRM_IOCTL_PRIME_FD_TO_HANDLE DRM_IOWR(0x2e, struct drm_prime_handle)
+#define DRM_IOCTL_GEM_PRIME_OPEN DRM_IOWR(0x2e, struct drm_gem_open)
#define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30)
#define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31)
diff --git a/trunk/include/drm/drmP.h b/trunk/include/drm/drmP.h
index dd731043fecd..574bd1c81ebd 100644
--- a/trunk/include/drm/drmP.h
+++ b/trunk/include/drm/drmP.h
@@ -91,7 +91,6 @@ struct drm_device;
#define DRM_UT_CORE 0x01
#define DRM_UT_DRIVER 0x02
#define DRM_UT_KMS 0x04
-#define DRM_UT_PRIME 0x08
/*
* Three debug levels are defined.
* drm_core, drm_driver, drm_kms
@@ -151,7 +150,6 @@ int drm_err(const char *func, const char *format, ...);
#define DRIVER_IRQ_VBL2 0x800
#define DRIVER_GEM 0x1000
#define DRIVER_MODESET 0x2000
-#define DRIVER_PRIME 0x4000
#define DRIVER_BUS_PCI 0x1
#define DRIVER_BUS_PLATFORM 0x2
@@ -217,11 +215,6 @@ int drm_err(const char *func, const char *format, ...);
drm_ut_debug_printk(DRM_UT_KMS, DRM_NAME, \
__func__, fmt, ##args); \
} while (0)
-#define DRM_DEBUG_PRIME(fmt, args...) \
- do { \
- drm_ut_debug_printk(DRM_UT_PRIME, DRM_NAME, \
- __func__, fmt, ##args); \
- } while (0)
#define DRM_LOG(fmt, args...) \
do { \
drm_ut_debug_printk(DRM_UT_CORE, NULL, \
@@ -245,7 +238,6 @@ int drm_err(const char *func, const char *format, ...);
#else
#define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0)
#define DRM_DEBUG_KMS(fmt, args...) do { } while (0)
-#define DRM_DEBUG_PRIME(fmt, args...) do { } while (0)
#define DRM_DEBUG(fmt, arg...) do { } while (0)
#define DRM_LOG(fmt, arg...) do { } while (0)
#define DRM_LOG_KMS(fmt, args...) do { } while (0)
@@ -418,12 +410,6 @@ struct drm_pending_event {
void (*destroy)(struct drm_pending_event *event);
};
-/* initial implementaton using a linked list - todo hashtab */
-struct drm_prime_file_private {
- struct list_head head;
- struct mutex lock;
-};
-
/** File private data */
struct drm_file {
int authenticated;
@@ -451,8 +437,6 @@ struct drm_file {
wait_queue_head_t event_wait;
struct list_head event_list;
int event_space;
-
- struct drm_prime_file_private prime;
};
/** Wait queue */
@@ -668,12 +652,6 @@ struct drm_gem_object {
uint32_t pending_write_domain;
void *driver_private;
-
- /* dma buf exported from this GEM object */
- struct dma_buf *export_dma_buf;
-
- /* dma buf attachment backing this object */
- struct dma_buf_attachment *import_attach;
};
#include "drm_crtc.h"
@@ -912,20 +890,6 @@ struct drm_driver {
int (*gem_open_object) (struct drm_gem_object *, struct drm_file *);
void (*gem_close_object) (struct drm_gem_object *, struct drm_file *);
- /* prime: */
- /* export handle -> fd (see drm_gem_prime_handle_to_fd() helper) */
- int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv,
- uint32_t handle, uint32_t flags, int *prime_fd);
- /* import fd -> handle (see drm_gem_prime_fd_to_handle() helper) */
- int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv,
- int prime_fd, uint32_t *handle);
- /* export GEM -> dmabuf */
- struct dma_buf * (*gem_prime_export)(struct drm_device *dev,
- struct drm_gem_object *obj, int flags);
- /* import dmabuf -> GEM */
- struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
- struct dma_buf *dma_buf);
-
/* vga arb irq handler */
void (*vgaarb_irq)(struct drm_device *dev, bool state);
@@ -1545,32 +1509,6 @@ extern int drm_vblank_info(struct seq_file *m, void *data);
extern int drm_clients_info(struct seq_file *m, void* data);
extern int drm_gem_name_info(struct seq_file *m, void *data);
-
-extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
- struct drm_file *file_priv, uint32_t handle, uint32_t flags,
- int *prime_fd);
-extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
- struct drm_file *file_priv, int prime_fd, uint32_t *handle);
-
-extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv);
-extern int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv);
-
-extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages);
-extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg);
-
-
-void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv);
-void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv);
-int drm_prime_add_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle);
-int drm_prime_lookup_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t *handle);
-void drm_prime_remove_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf);
-
-int drm_prime_add_dma_buf(struct drm_device *dev, struct drm_gem_object *obj);
-int drm_prime_lookup_obj(struct drm_device *dev, struct dma_buf *buf,
- struct drm_gem_object **obj);
-
#if DRM_DEBUG_CODE
extern int drm_vma_info(struct seq_file *m, void *data);
#endif
diff --git a/trunk/include/drm/intel-gtt.h b/trunk/include/drm/intel-gtt.h
index 923afb5dcf0c..0a0001b9dc78 100644
--- a/trunk/include/drm/intel-gtt.h
+++ b/trunk/include/drm/intel-gtt.h
@@ -44,8 +44,4 @@ void intel_gtt_insert_pages(unsigned int first_entry, unsigned int num_entries,
/* flag for GFDT type */
#define AGP_USER_CACHED_MEMORY_GFDT (1 << 3)
-#ifdef CONFIG_INTEL_IOMMU
-extern int intel_iommu_gfx_mapped;
-#endif
-
#endif
diff --git a/trunk/include/linux/Kbuild b/trunk/include/linux/Kbuild
index 3c9b616c834a..d05df2810354 100644
--- a/trunk/include/linux/Kbuild
+++ b/trunk/include/linux/Kbuild
@@ -3,7 +3,6 @@ header-y += can/
header-y += caif/
header-y += dvb/
header-y += hdlc/
-header-y += hsi/
header-y += isdn/
header-y += mmc/
header-y += nfsd/
diff --git a/trunk/include/linux/cpumask.h b/trunk/include/linux/cpumask.h
index a2c819d3c96e..1ffdb9856bb9 100644
--- a/trunk/include/linux/cpumask.h
+++ b/trunk/include/linux/cpumask.h
@@ -764,6 +764,12 @@ static inline const struct cpumask *get_cpu_mask(unsigned int cpu)
*
*/
#ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS
+/* These strip const, as traditionally they weren't const. */
+#define cpu_possible_map (*(cpumask_t *)cpu_possible_mask)
+#define cpu_online_map (*(cpumask_t *)cpu_online_mask)
+#define cpu_present_map (*(cpumask_t *)cpu_present_mask)
+#define cpu_active_map (*(cpumask_t *)cpu_active_mask)
+
#define cpumask_of_cpu(cpu) (*get_cpu_mask(cpu))
#define CPU_MASK_LAST_WORD BITMAP_LAST_WORD_MASK(NR_CPUS)
diff --git a/trunk/include/linux/cryptouser.h b/trunk/include/linux/cryptouser.h
index 4abf2ea6a887..532fb58f16bf 100644
--- a/trunk/include/linux/cryptouser.h
+++ b/trunk/include/linux/cryptouser.h
@@ -100,6 +100,3 @@ struct crypto_report_rng {
char type[CRYPTO_MAX_NAME];
unsigned int seedsize;
};
-
-#define CRYPTO_REPORT_MAXSIZE (sizeof(struct crypto_user_alg) + \
- sizeof(struct crypto_report_blkcipher))
diff --git a/trunk/include/linux/dma-attrs.h b/trunk/include/linux/dma-attrs.h
index 547ab568d3ae..71ad34eca6e3 100644
--- a/trunk/include/linux/dma-attrs.h
+++ b/trunk/include/linux/dma-attrs.h
@@ -13,8 +13,6 @@
enum dma_attr {
DMA_ATTR_WRITE_BARRIER,
DMA_ATTR_WEAK_ORDERING,
- DMA_ATTR_WRITE_COMBINE,
- DMA_ATTR_NON_CONSISTENT,
DMA_ATTR_MAX,
};
diff --git a/trunk/include/linux/dma-mapping.h b/trunk/include/linux/dma-mapping.h
index dfc099e56a66..5a736af3cc7a 100644
--- a/trunk/include/linux/dma-mapping.h
+++ b/trunk/include/linux/dma-mapping.h
@@ -9,15 +9,10 @@
#include
struct dma_map_ops {
- void* (*alloc)(struct device *dev, size_t size,
- dma_addr_t *dma_handle, gfp_t gfp,
- struct dma_attrs *attrs);
- void (*free)(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs);
- int (*mmap)(struct device *, struct vm_area_struct *,
- void *, dma_addr_t, size_t, struct dma_attrs *attrs);
-
+ void* (*alloc_coherent)(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t gfp);
+ void (*free_coherent)(struct device *dev, size_t size,
+ void *vaddr, dma_addr_t dma_handle);
dma_addr_t (*map_page)(struct device *dev, struct page *page,
unsigned long offset, size_t size,
enum dma_data_direction dir,
diff --git a/trunk/include/linux/firewire.h b/trunk/include/linux/firewire.h
index cdc9b719e9c7..4db7b68f0582 100644
--- a/trunk/include/linux/firewire.h
+++ b/trunk/include/linux/firewire.h
@@ -2,7 +2,6 @@
#define _LINUX_FIREWIRE_H
#include
-#include
#include
#include
#include
@@ -65,6 +64,8 @@
#define CSR_MODEL 0x17
#define CSR_DIRECTORY_ID 0x20
+struct device;
+
struct fw_csr_iterator {
const u32 *p;
const u32 *end;
diff --git a/trunk/include/linux/fs.h b/trunk/include/linux/fs.h
index 8de675523e46..135693e79f2b 100644
--- a/trunk/include/linux/fs.h
+++ b/trunk/include/linux/fs.h
@@ -1215,7 +1215,6 @@ extern int vfs_setlease(struct file *, long, struct file_lock **);
extern int lease_modify(struct file_lock **, int);
extern int lock_may_read(struct inode *, loff_t start, unsigned long count);
extern int lock_may_write(struct inode *, loff_t start, unsigned long count);
-extern void locks_delete_block(struct file_lock *waiter);
extern void lock_flocks(void);
extern void unlock_flocks(void);
#else /* !CONFIG_FILE_LOCKING */
@@ -1360,10 +1359,6 @@ static inline int lock_may_write(struct inode *inode, loff_t start,
return 1;
}
-static inline void locks_delete_block(struct file_lock *waiter)
-{
-}
-
static inline void lock_flocks(void)
{
}
@@ -2511,7 +2506,6 @@ extern int dcache_readdir(struct file *, void *, filldir_t);
extern int simple_setattr(struct dentry *, struct iattr *);
extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *);
extern int simple_statfs(struct dentry *, struct kstatfs *);
-extern int simple_open(struct inode *inode, struct file *file);
extern int simple_link(struct dentry *, struct inode *, struct dentry *);
extern int simple_unlink(struct inode *, struct dentry *);
extern int simple_rmdir(struct inode *, struct dentry *);
diff --git a/trunk/include/linux/hsi/Kbuild b/trunk/include/linux/hsi/Kbuild
deleted file mode 100644
index 271a770b4784..000000000000
--- a/trunk/include/linux/hsi/Kbuild
+++ /dev/null
@@ -1 +0,0 @@
-header-y += hsi_char.h
diff --git a/trunk/include/linux/hsi/hsi.h b/trunk/include/linux/hsi/hsi.h
deleted file mode 100644
index 4b178067f405..000000000000
--- a/trunk/include/linux/hsi/hsi.h
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * HSI core header file.
- *
- * Copyright (C) 2010 Nokia Corporation. All rights reserved.
- *
- * Contact: Carlos Chinea
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-#ifndef __LINUX_HSI_H__
-#define __LINUX_HSI_H__
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-/* HSI message ttype */
-#define HSI_MSG_READ 0
-#define HSI_MSG_WRITE 1
-
-/* HSI configuration values */
-enum {
- HSI_MODE_STREAM = 1,
- HSI_MODE_FRAME,
-};
-
-enum {
- HSI_FLOW_SYNC, /* Synchronized flow */
- HSI_FLOW_PIPE, /* Pipelined flow */
-};
-
-enum {
- HSI_ARB_RR, /* Round-robin arbitration */
- HSI_ARB_PRIO, /* Channel priority arbitration */
-};
-
-#define HSI_MAX_CHANNELS 16
-
-/* HSI message status codes */
-enum {
- HSI_STATUS_COMPLETED, /* Message transfer is completed */
- HSI_STATUS_PENDING, /* Message pending to be read/write (POLL) */
- HSI_STATUS_PROCEEDING, /* Message transfer is ongoing */
- HSI_STATUS_QUEUED, /* Message waiting to be served */
- HSI_STATUS_ERROR, /* Error when message transfer was ongoing */
-};
-
-/* HSI port event codes */
-enum {
- HSI_EVENT_START_RX,
- HSI_EVENT_STOP_RX,
-};
-
-/**
- * struct hsi_config - Configuration for RX/TX HSI modules
- * @mode: Bit transmission mode (STREAM or FRAME)
- * @channels: Number of channels to use [1..16]
- * @speed: Max bit transmission speed (Kbit/s)
- * @flow: RX flow type (SYNCHRONIZED or PIPELINE)
- * @arb_mode: Arbitration mode for TX frame (Round robin, priority)
- */
-struct hsi_config {
- unsigned int mode;
- unsigned int channels;
- unsigned int speed;
- union {
- unsigned int flow; /* RX only */
- unsigned int arb_mode; /* TX only */
- };
-};
-
-/**
- * struct hsi_board_info - HSI client board info
- * @name: Name for the HSI device
- * @hsi_id: HSI controller id where the client sits
- * @port: Port number in the controller where the client sits
- * @tx_cfg: HSI TX configuration
- * @rx_cfg: HSI RX configuration
- * @platform_data: Platform related data
- * @archdata: Architecture-dependent device data
- */
-struct hsi_board_info {
- const char *name;
- unsigned int hsi_id;
- unsigned int port;
- struct hsi_config tx_cfg;
- struct hsi_config rx_cfg;
- void *platform_data;
- struct dev_archdata *archdata;
-};
-
-#ifdef CONFIG_HSI_BOARDINFO
-extern int hsi_register_board_info(struct hsi_board_info const *info,
- unsigned int len);
-#else
-static inline int hsi_register_board_info(struct hsi_board_info const *info,
- unsigned int len)
-{
- return 0;
-}
-#endif /* CONFIG_HSI_BOARDINFO */
-
-/**
- * struct hsi_client - HSI client attached to an HSI port
- * @device: Driver model representation of the device
- * @tx_cfg: HSI TX configuration
- * @rx_cfg: HSI RX configuration
- * @hsi_start_rx: Called after incoming wake line goes high
- * @hsi_stop_rx: Called after incoming wake line goes low
- */
-struct hsi_client {
- struct device device;
- struct hsi_config tx_cfg;
- struct hsi_config rx_cfg;
- void (*hsi_start_rx)(struct hsi_client *cl);
- void (*hsi_stop_rx)(struct hsi_client *cl);
- /* private: */
- unsigned int pclaimed:1;
- struct list_head link;
-};
-
-#define to_hsi_client(dev) container_of(dev, struct hsi_client, device)
-
-static inline void hsi_client_set_drvdata(struct hsi_client *cl, void *data)
-{
- dev_set_drvdata(&cl->device, data);
-}
-
-static inline void *hsi_client_drvdata(struct hsi_client *cl)
-{
- return dev_get_drvdata(&cl->device);
-}
-
-/**
- * struct hsi_client_driver - Driver associated to an HSI client
- * @driver: Driver model representation of the driver
- */
-struct hsi_client_driver {
- struct device_driver driver;
-};
-
-#define to_hsi_client_driver(drv) container_of(drv, struct hsi_client_driver,\
- driver)
-
-int hsi_register_client_driver(struct hsi_client_driver *drv);
-
-static inline void hsi_unregister_client_driver(struct hsi_client_driver *drv)
-{
- driver_unregister(&drv->driver);
-}
-
-/**
- * struct hsi_msg - HSI message descriptor
- * @link: Free to use by the current descriptor owner
- * @cl: HSI device client that issues the transfer
- * @sgt: Head of the scatterlist array
- * @context: Client context data associated to the transfer
- * @complete: Transfer completion callback
- * @destructor: Destructor to free resources when flushing
- * @status: Status of the transfer when completed
- * @actual_len: Actual length of data transfered on completion
- * @channel: Channel were to TX/RX the message
- * @ttype: Transfer type (TX if set, RX otherwise)
- * @break_frame: if true HSI will send/receive a break frame. Data buffers are
- * ignored in the request.
- */
-struct hsi_msg {
- struct list_head link;
- struct hsi_client *cl;
- struct sg_table sgt;
- void *context;
-
- void (*complete)(struct hsi_msg *msg);
- void (*destructor)(struct hsi_msg *msg);
-
- int status;
- unsigned int actual_len;
- unsigned int channel;
- unsigned int ttype:1;
- unsigned int break_frame:1;
-};
-
-struct hsi_msg *hsi_alloc_msg(unsigned int n_frag, gfp_t flags);
-void hsi_free_msg(struct hsi_msg *msg);
-
-/**
- * struct hsi_port - HSI port device
- * @device: Driver model representation of the device
- * @tx_cfg: Current TX path configuration
- * @rx_cfg: Current RX path configuration
- * @num: Port number
- * @shared: Set when port can be shared by different clients
- * @claimed: Reference count of clients which claimed the port
- * @lock: Serialize port claim
- * @async: Asynchronous transfer callback
- * @setup: Callback to set the HSI client configuration
- * @flush: Callback to clean the HW state and destroy all pending transfers
- * @start_tx: Callback to inform that a client wants to TX data
- * @stop_tx: Callback to inform that a client no longer wishes to TX data
- * @release: Callback to inform that a client no longer uses the port
- * @clients: List of hsi_clients using the port.
- * @clock: Lock to serialize access to the clients list.
- */
-struct hsi_port {
- struct device device;
- struct hsi_config tx_cfg;
- struct hsi_config rx_cfg;
- unsigned int num;
- unsigned int shared:1;
- int claimed;
- struct mutex lock;
- int (*async)(struct hsi_msg *msg);
- int (*setup)(struct hsi_client *cl);
- int (*flush)(struct hsi_client *cl);
- int (*start_tx)(struct hsi_client *cl);
- int (*stop_tx)(struct hsi_client *cl);
- int (*release)(struct hsi_client *cl);
- struct list_head clients;
- spinlock_t clock;
-};
-
-#define to_hsi_port(dev) container_of(dev, struct hsi_port, device)
-#define hsi_get_port(cl) to_hsi_port((cl)->device.parent)
-
-void hsi_event(struct hsi_port *port, unsigned int event);
-int hsi_claim_port(struct hsi_client *cl, unsigned int share);
-void hsi_release_port(struct hsi_client *cl);
-
-static inline int hsi_port_claimed(struct hsi_client *cl)
-{
- return cl->pclaimed;
-}
-
-static inline void hsi_port_set_drvdata(struct hsi_port *port, void *data)
-{
- dev_set_drvdata(&port->device, data);
-}
-
-static inline void *hsi_port_drvdata(struct hsi_port *port)
-{
- return dev_get_drvdata(&port->device);
-}
-
-/**
- * struct hsi_controller - HSI controller device
- * @device: Driver model representation of the device
- * @owner: Pointer to the module owning the controller
- * @id: HSI controller ID
- * @num_ports: Number of ports in the HSI controller
- * @port: Array of HSI ports
- */
-struct hsi_controller {
- struct device device;
- struct module *owner;
- unsigned int id;
- unsigned int num_ports;
- struct hsi_port *port;
-};
-
-#define to_hsi_controller(dev) container_of(dev, struct hsi_controller, device)
-
-struct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags);
-void hsi_free_controller(struct hsi_controller *hsi);
-int hsi_register_controller(struct hsi_controller *hsi);
-void hsi_unregister_controller(struct hsi_controller *hsi);
-
-static inline void hsi_controller_set_drvdata(struct hsi_controller *hsi,
- void *data)
-{
- dev_set_drvdata(&hsi->device, data);
-}
-
-static inline void *hsi_controller_drvdata(struct hsi_controller *hsi)
-{
- return dev_get_drvdata(&hsi->device);
-}
-
-static inline struct hsi_port *hsi_find_port_num(struct hsi_controller *hsi,
- unsigned int num)
-{
- return (num < hsi->num_ports) ? &hsi->port[num] : NULL;
-}
-
-/*
- * API for HSI clients
- */
-int hsi_async(struct hsi_client *cl, struct hsi_msg *msg);
-
-/**
- * hsi_id - Get HSI controller ID associated to a client
- * @cl: Pointer to a HSI client
- *
- * Return the controller id where the client is attached to
- */
-static inline unsigned int hsi_id(struct hsi_client *cl)
-{
- return to_hsi_controller(cl->device.parent->parent)->id;
-}
-
-/**
- * hsi_port_id - Gets the port number a client is attached to
- * @cl: Pointer to HSI client
- *
- * Return the port number associated to the client
- */
-static inline unsigned int hsi_port_id(struct hsi_client *cl)
-{
- return to_hsi_port(cl->device.parent)->num;
-}
-
-/**
- * hsi_setup - Configure the client's port
- * @cl: Pointer to the HSI client
- *
- * When sharing ports, clients should either relay on a single
- * client setup or have the same setup for all of them.
- *
- * Return -errno on failure, 0 on success
- */
-static inline int hsi_setup(struct hsi_client *cl)
-{
- if (!hsi_port_claimed(cl))
- return -EACCES;
- return hsi_get_port(cl)->setup(cl);
-}
-
-/**
- * hsi_flush - Flush all pending transactions on the client's port
- * @cl: Pointer to the HSI client
- *
- * This function will destroy all pending hsi_msg in the port and reset
- * the HW port so it is ready to receive and transmit from a clean state.
- *
- * Return -errno on failure, 0 on success
- */
-static inline int hsi_flush(struct hsi_client *cl)
-{
- if (!hsi_port_claimed(cl))
- return -EACCES;
- return hsi_get_port(cl)->flush(cl);
-}
-
-/**
- * hsi_async_read - Submit a read transfer
- * @cl: Pointer to the HSI client
- * @msg: HSI message descriptor of the transfer
- *
- * Return -errno on failure, 0 on success
- */
-static inline int hsi_async_read(struct hsi_client *cl, struct hsi_msg *msg)
-{
- msg->ttype = HSI_MSG_READ;
- return hsi_async(cl, msg);
-}
-
-/**
- * hsi_async_write - Submit a write transfer
- * @cl: Pointer to the HSI client
- * @msg: HSI message descriptor of the transfer
- *
- * Return -errno on failure, 0 on success
- */
-static inline int hsi_async_write(struct hsi_client *cl, struct hsi_msg *msg)
-{
- msg->ttype = HSI_MSG_WRITE;
- return hsi_async(cl, msg);
-}
-
-/**
- * hsi_start_tx - Signal the port that the client wants to start a TX
- * @cl: Pointer to the HSI client
- *
- * Return -errno on failure, 0 on success
- */
-static inline int hsi_start_tx(struct hsi_client *cl)
-{
- if (!hsi_port_claimed(cl))
- return -EACCES;
- return hsi_get_port(cl)->start_tx(cl);
-}
-
-/**
- * hsi_stop_tx - Signal the port that the client no longer wants to transmit
- * @cl: Pointer to the HSI client
- *
- * Return -errno on failure, 0 on success
- */
-static inline int hsi_stop_tx(struct hsi_client *cl)
-{
- if (!hsi_port_claimed(cl))
- return -EACCES;
- return hsi_get_port(cl)->stop_tx(cl);
-}
-#endif /* __LINUX_HSI_H__ */
diff --git a/trunk/include/linux/hsi/hsi_char.h b/trunk/include/linux/hsi/hsi_char.h
deleted file mode 100644
index 76160b4f455d..000000000000
--- a/trunk/include/linux/hsi/hsi_char.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Part of the HSI character device driver.
- *
- * Copyright (C) 2010 Nokia Corporation. All rights reserved.
- *
- * Contact: Andras Domokos
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-
-#ifndef __HSI_CHAR_H
-#define __HSI_CHAR_H
-
-#define HSI_CHAR_MAGIC 'k'
-#define HSC_IOW(num, dtype) _IOW(HSI_CHAR_MAGIC, num, dtype)
-#define HSC_IOR(num, dtype) _IOR(HSI_CHAR_MAGIC, num, dtype)
-#define HSC_IOWR(num, dtype) _IOWR(HSI_CHAR_MAGIC, num, dtype)
-#define HSC_IO(num) _IO(HSI_CHAR_MAGIC, num)
-
-#define HSC_RESET HSC_IO(16)
-#define HSC_SET_PM HSC_IO(17)
-#define HSC_SEND_BREAK HSC_IO(18)
-#define HSC_SET_RX HSC_IOW(19, struct hsc_rx_config)
-#define HSC_GET_RX HSC_IOW(20, struct hsc_rx_config)
-#define HSC_SET_TX HSC_IOW(21, struct hsc_tx_config)
-#define HSC_GET_TX HSC_IOW(22, struct hsc_tx_config)
-
-#define HSC_PM_DISABLE 0
-#define HSC_PM_ENABLE 1
-
-#define HSC_MODE_STREAM 1
-#define HSC_MODE_FRAME 2
-#define HSC_FLOW_SYNC 0
-#define HSC_ARB_RR 0
-#define HSC_ARB_PRIO 1
-
-struct hsc_rx_config {
- uint32_t mode;
- uint32_t flow;
- uint32_t channels;
-};
-
-struct hsc_tx_config {
- uint32_t mode;
- uint32_t channels;
- uint32_t speed;
- uint32_t arb_mode;
-};
-
-#endif /* __HSI_CHAR_H */
diff --git a/trunk/include/linux/if_eql.h b/trunk/include/linux/if_eql.h
index 18a5d02a8644..79c4f268410d 100644
--- a/trunk/include/linux/if_eql.h
+++ b/trunk/include/linux/if_eql.h
@@ -22,7 +22,7 @@
#define EQL_DEFAULT_SLAVE_PRIORITY 28800
#define EQL_DEFAULT_MAX_SLAVES 4
#define EQL_DEFAULT_MTU 576
-#define EQL_DEFAULT_RESCHED_IVAL HZ
+#define EQL_DEFAULT_RESCHED_IVAL 100
#define EQL_ENSLAVE (SIOCDEVPRIVATE)
#define EQL_EMANCIPATE (SIOCDEVPRIVATE + 1)
diff --git a/trunk/include/linux/kgdb.h b/trunk/include/linux/kgdb.h
index c4d2fc194ede..fa391835508d 100644
--- a/trunk/include/linux/kgdb.h
+++ b/trunk/include/linux/kgdb.h
@@ -63,8 +63,7 @@ enum kgdb_bptype {
BP_HARDWARE_BREAKPOINT,
BP_WRITE_WATCHPOINT,
BP_READ_WATCHPOINT,
- BP_ACCESS_WATCHPOINT,
- BP_POKE_BREAKPOINT,
+ BP_ACCESS_WATCHPOINT
};
enum kgdb_bpstate {
@@ -208,8 +207,8 @@ extern void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc);
/* Optional functions. */
extern int kgdb_validate_break_address(unsigned long addr);
-extern int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt);
-extern int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt);
+extern int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr);
+extern int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle);
/**
* kgdb_arch_late - Perform any architecture specific initalization.
diff --git a/trunk/include/linux/kmod.h b/trunk/include/linux/kmod.h
index dd99c329e161..9efeae679106 100644
--- a/trunk/include/linux/kmod.h
+++ b/trunk/include/linux/kmod.h
@@ -110,29 +110,12 @@ call_usermodehelper(char *path, char **argv, char **envp, int wait)
extern struct ctl_table usermodehelper_table[];
-enum umh_disable_depth {
- UMH_ENABLED = 0,
- UMH_FREEZING,
- UMH_DISABLED,
-};
-
extern void usermodehelper_init(void);
-extern int __usermodehelper_disable(enum umh_disable_depth depth);
-extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth);
-
-static inline int usermodehelper_disable(void)
-{
- return __usermodehelper_disable(UMH_DISABLED);
-}
-
-static inline void usermodehelper_enable(void)
-{
- __usermodehelper_set_disable_depth(UMH_ENABLED);
-}
-
-extern int usermodehelper_read_trylock(void);
-extern long usermodehelper_read_lock_wait(long timeout);
-extern void usermodehelper_read_unlock(void);
+extern int usermodehelper_disable(void);
+extern void usermodehelper_enable(void);
+extern bool usermodehelper_is_disabled(void);
+extern void read_lock_usermodehelper(void);
+extern void read_unlock_usermodehelper(void);
#endif /* __LINUX_KMOD_H__ */
diff --git a/trunk/include/linux/lsm_audit.h b/trunk/include/linux/lsm_audit.h
index fad48aab893b..eab507f2b1cb 100644
--- a/trunk/include/linux/lsm_audit.h
+++ b/trunk/include/linux/lsm_audit.h
@@ -22,23 +22,6 @@
#include
#include
-struct lsm_network_audit {
- int netif;
- struct sock *sk;
- u16 family;
- __be16 dport;
- __be16 sport;
- union {
- struct {
- __be32 daddr;
- __be32 saddr;
- } v4;
- struct {
- struct in6_addr daddr;
- struct in6_addr saddr;
- } v6;
- } fam;
-};
/* Auxiliary data to use in generating the audit record. */
struct common_audit_data {
@@ -58,7 +41,23 @@ struct common_audit_data {
struct path path;
struct dentry *dentry;
struct inode *inode;
- struct lsm_network_audit *net;
+ struct {
+ int netif;
+ struct sock *sk;
+ u16 family;
+ __be16 dport;
+ __be16 sport;
+ union {
+ struct {
+ __be32 daddr;
+ __be32 saddr;
+ } v4;
+ struct {
+ struct in6_addr daddr;
+ struct in6_addr saddr;
+ } v6;
+ } fam;
+ } net;
int cap;
int ipc_id;
struct task_struct *tsk;
@@ -73,15 +72,64 @@ struct common_audit_data {
/* this union contains LSM specific data */
union {
#ifdef CONFIG_SECURITY_SMACK
- struct smack_audit_data *smack_audit_data;
+ /* SMACK data */
+ struct smack_audit_data {
+ const char *function;
+ char *subject;
+ char *object;
+ char *request;
+ int result;
+ } smack_audit_data;
#endif
#ifdef CONFIG_SECURITY_SELINUX
- struct selinux_audit_data *selinux_audit_data;
+ /* SELinux data */
+ struct {
+ u32 ssid;
+ u32 tsid;
+ u16 tclass;
+ u32 requested;
+ u32 audited;
+ u32 denied;
+ /*
+ * auditdeny is a bit tricky and unintuitive. See the
+ * comments in avc.c for it's meaning and usage.
+ */
+ u32 auditdeny;
+ struct av_decision *avd;
+ int result;
+ } selinux_audit_data;
#endif
#ifdef CONFIG_SECURITY_APPARMOR
- struct apparmor_audit_data *apparmor_audit_data;
+ struct {
+ int error;
+ int op;
+ int type;
+ void *profile;
+ const char *name;
+ const char *info;
+ union {
+ void *target;
+ struct {
+ long pos;
+ void *target;
+ } iface;
+ struct {
+ int rlim;
+ unsigned long max;
+ } rlim;
+ struct {
+ const char *target;
+ u32 request;
+ u32 denied;
+ uid_t ouid;
+ } fs;
+ };
+ } apparmor_audit_data;
#endif
- }; /* per LSM data pointer union */
+ };
+ /* these callback will be implemented by a specific LSM */
+ void (*lsm_pre_audit)(struct audit_buffer *, void *);
+ void (*lsm_post_audit)(struct audit_buffer *, void *);
};
#define v4info fam.v4
@@ -98,8 +146,6 @@ int ipv6_skb_to_auditdata(struct sk_buff *skb,
{ memset((_d), 0, sizeof(struct common_audit_data)); \
(_d)->type = LSM_AUDIT_DATA_##_t; }
-void common_lsm_audit(struct common_audit_data *a,
- void (*pre_audit)(struct audit_buffer *, void *),
- void (*post_audit)(struct audit_buffer *, void *));
+void common_lsm_audit(struct common_audit_data *a);
#endif
diff --git a/trunk/include/linux/platform_data/atmel.h b/trunk/include/linux/platform_data/atmel.h
index b0f2c56a8ea2..d056263545b1 100644
--- a/trunk/include/linux/platform_data/atmel.h
+++ b/trunk/include/linux/platform_data/atmel.h
@@ -4,8 +4,8 @@
* GPL v2 Only
*/
-#ifndef __ATMEL_H__
-#define __ATMEL_H__
+#ifndef __ATMEL_NAND_H__
+#define __ATMEL_NAND_H__
#include
@@ -24,4 +24,4 @@ struct atmel_nand_data {
unsigned int num_parts;
};
-#endif /* __ATMEL_H__ */
+#endif /* __ATMEL_NAND_H__ */
diff --git a/trunk/include/linux/pm_qos.h b/trunk/include/linux/pm_qos.h
index 233149cb19f4..2e9191a712f3 100644
--- a/trunk/include/linux/pm_qos.h
+++ b/trunk/include/linux/pm_qos.h
@@ -8,7 +8,6 @@
#include
#include
#include
-#include
enum {
PM_QOS_RESERVED = 0,
@@ -30,7 +29,6 @@ enum {
struct pm_qos_request {
struct plist_node node;
int pm_qos_class;
- struct delayed_work work; /* for pm_qos_update_request_timeout */
};
struct dev_pm_qos_request {
@@ -75,8 +73,6 @@ void pm_qos_add_request(struct pm_qos_request *req, int pm_qos_class,
s32 value);
void pm_qos_update_request(struct pm_qos_request *req,
s32 new_value);
-void pm_qos_update_request_timeout(struct pm_qos_request *req,
- s32 new_value, unsigned long timeout_us);
void pm_qos_remove_request(struct pm_qos_request *req);
int pm_qos_request(int pm_qos_class);
diff --git a/trunk/include/linux/regulator/machine.h b/trunk/include/linux/regulator/machine.h
index b02108446be7..7abb16093312 100644
--- a/trunk/include/linux/regulator/machine.h
+++ b/trunk/include/linux/regulator/machine.h
@@ -71,7 +71,7 @@ struct regulator_state {
* @uV_offset: Offset applied to voltages from consumer to compensate for
* voltage drops.
*
- * @min_uA: Smallest current consumers may set.
+ * @min_uA: Smallest consumers consumers may set.
* @max_uA: Largest current consumers may set.
*
* @valid_modes_mask: Mask of modes which may be configured by consumers.
@@ -134,8 +134,10 @@ struct regulation_constraints {
/**
* struct regulator_consumer_supply - supply -> device mapping
*
- * This maps a supply name to a device. Use of dev_name allows support for
- * buses which make struct device available late such as I2C.
+ * This maps a supply name to a device. Only one of dev or dev_name
+ * can be specified. Use of dev_name allows support for buses which
+ * make struct device available late such as I2C and is the preferred
+ * form.
*
* @dev_name: Result of dev_name() for the consumer.
* @supply: Name for the supply.
diff --git a/trunk/include/linux/swap.h b/trunk/include/linux/swap.h
index b1fd5c7925fe..8dc0ea7caf02 100644
--- a/trunk/include/linux/swap.h
+++ b/trunk/include/linux/swap.h
@@ -305,13 +305,6 @@ static inline int mem_cgroup_swappiness(struct mem_cgroup *mem)
return vm_swappiness;
}
#endif
-#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
-extern void mem_cgroup_uncharge_swap(swp_entry_t ent);
-#else
-static inline void mem_cgroup_uncharge_swap(swp_entry_t ent)
-{
-}
-#endif
#ifdef CONFIG_SWAP
/* linux/mm/page_io.c */
extern int swap_readpage(struct page *);
@@ -382,6 +375,13 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)
{
}
#endif
+#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
+extern void mem_cgroup_uncharge_swap(swp_entry_t ent);
+#else
+static inline void mem_cgroup_uncharge_swap(swp_entry_t ent)
+{
+}
+#endif
#else /* CONFIG_SWAP */
diff --git a/trunk/include/net/cfg80211.h b/trunk/include/net/cfg80211.h
index 83d800c31e3c..248fb05feb63 100644
--- a/trunk/include/net/cfg80211.h
+++ b/trunk/include/net/cfg80211.h
@@ -620,10 +620,8 @@ struct sta_bss_parameters {
* @llid: mesh local link id
* @plid: mesh peer link id
* @plink_state: mesh peer link state
- * @signal: the signal strength, type depends on the wiphy's signal_type
- NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
- * @signal_avg: avg signal strength, type depends on the wiphy's signal_type
- NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
+ * @signal: signal strength of last received packet in dBm
+ * @signal_avg: signal strength average in dBm
* @txrate: current unicast bitrate from this station
* @rxrate: current unicast bitrate to this station
* @rx_packets: packets received from this station
diff --git a/trunk/include/trace/events/sched.h b/trunk/include/trace/events/sched.h
index ea7a2035456d..fbc7b1ad929b 100644
--- a/trunk/include/trace/events/sched.h
+++ b/trunk/include/trace/events/sched.h
@@ -295,7 +295,7 @@ TRACE_EVENT(sched_process_exec,
TP_fast_assign(
__assign_str(filename, bprm->filename);
__entry->pid = p->pid;
- __entry->old_pid = old_pid;
+ __entry->old_pid = p->pid;
),
TP_printk("filename=%s pid=%d old_pid=%d", __get_str(filename),
diff --git a/trunk/include/xen/swiotlb-xen.h b/trunk/include/xen/swiotlb-xen.h
index 4f4d449f00f6..2ea2fdc79c16 100644
--- a/trunk/include/xen/swiotlb-xen.h
+++ b/trunk/include/xen/swiotlb-xen.h
@@ -7,13 +7,11 @@ extern void xen_swiotlb_init(int verbose);
extern void
*xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
- dma_addr_t *dma_handle, gfp_t flags,
- struct dma_attrs *attrs);
+ dma_addr_t *dma_handle, gfp_t flags);
extern void
xen_swiotlb_free_coherent(struct device *hwdev, size_t size,
- void *vaddr, dma_addr_t dma_handle,
- struct dma_attrs *attrs);
+ void *vaddr, dma_addr_t dma_handle);
extern dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page *page,
unsigned long offset, size_t size,
diff --git a/trunk/init/Kconfig b/trunk/init/Kconfig
index 6cfd71d06463..72f33faca44f 100644
--- a/trunk/init/Kconfig
+++ b/trunk/init/Kconfig
@@ -1414,8 +1414,8 @@ endif # MODULES
config INIT_ALL_POSSIBLE
bool
help
- Back when each arch used to define their own cpu_online_mask and
- cpu_possible_mask, some of them chose to initialize cpu_possible_mask
+ Back when each arch used to define their own cpu_online_map and
+ cpu_possible_map, some of them chose to initialize cpu_possible_map
with all 1s, and others with all 0s. When they were centralised,
it was better to provide this option than to break all the archs
and have several arch maintainers pursuing me down dark alleys.
diff --git a/trunk/kernel/cpuset.c b/trunk/kernel/cpuset.c
index 14f7070b4ba2..b96ad75b7e64 100644
--- a/trunk/kernel/cpuset.c
+++ b/trunk/kernel/cpuset.c
@@ -270,11 +270,11 @@ static struct file_system_type cpuset_fs_type = {
* are online. If none are online, walk up the cpuset hierarchy
* until we find one that does have some online cpus. If we get
* all the way to the top and still haven't found any online cpus,
- * return cpu_online_mask. Or if passed a NULL cs from an exit'ing
- * task, return cpu_online_mask.
+ * return cpu_online_map. Or if passed a NULL cs from an exit'ing
+ * task, return cpu_online_map.
*
* One way or another, we guarantee to return some non-empty subset
- * of cpu_online_mask.
+ * of cpu_online_map.
*
* Call with callback_mutex held.
*/
@@ -867,7 +867,7 @@ static int update_cpumask(struct cpuset *cs, struct cpuset *trialcs,
int retval;
int is_load_balanced;
- /* top_cpuset.cpus_allowed tracks cpu_online_mask; it's read-only */
+ /* top_cpuset.cpus_allowed tracks cpu_online_map; it's read-only */
if (cs == &top_cpuset)
return -EACCES;
@@ -2149,7 +2149,7 @@ void __init cpuset_init_smp(void)
*
* Description: Returns the cpumask_var_t cpus_allowed of the cpuset
* attached to the specified @tsk. Guaranteed to return some non-empty
- * subset of cpu_online_mask, even if this means going outside the
+ * subset of cpu_online_map, even if this means going outside the
* tasks cpuset.
**/
diff --git a/trunk/kernel/debug/debug_core.c b/trunk/kernel/debug/debug_core.c
index 0557f24c6bca..1dc53bae56e1 100644
--- a/trunk/kernel/debug/debug_core.c
+++ b/trunk/kernel/debug/debug_core.c
@@ -160,39 +160,37 @@ early_param("nokgdbroundup", opt_nokgdbroundup);
* Weak aliases for breakpoint management,
* can be overriden by architectures when needed:
*/
-int __weak kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
+int __weak kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr)
{
int err;
- err = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr,
- BREAK_INSTR_SIZE);
+ err = probe_kernel_read(saved_instr, (char *)addr, BREAK_INSTR_SIZE);
if (err)
return err;
- err = probe_kernel_write((char *)bpt->bpt_addr,
- arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE);
- return err;
+
+ return probe_kernel_write((char *)addr, arch_kgdb_ops.gdb_bpt_instr,
+ BREAK_INSTR_SIZE);
}
-int __weak kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt)
+int __weak kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle)
{
- return probe_kernel_write((char *)bpt->bpt_addr,
- (char *)bpt->saved_instr, BREAK_INSTR_SIZE);
+ return probe_kernel_write((char *)addr,
+ (char *)bundle, BREAK_INSTR_SIZE);
}
int __weak kgdb_validate_break_address(unsigned long addr)
{
- struct kgdb_bkpt tmp;
+ char tmp_variable[BREAK_INSTR_SIZE];
int err;
- /* Validate setting the breakpoint and then removing it. If the
+ /* Validate setting the breakpoint and then removing it. In the
* remove fails, the kernel needs to emit a bad message because we
* are deep trouble not being able to put things back the way we
* found them.
*/
- tmp.bpt_addr = addr;
- err = kgdb_arch_set_breakpoint(&tmp);
+ err = kgdb_arch_set_breakpoint(addr, tmp_variable);
if (err)
return err;
- err = kgdb_arch_remove_breakpoint(&tmp);
+ err = kgdb_arch_remove_breakpoint(addr, tmp_variable);
if (err)
printk(KERN_ERR "KGDB: Critical breakpoint error, kernel "
"memory destroyed at: %lx", addr);
@@ -236,6 +234,7 @@ static void kgdb_flush_swbreak_addr(unsigned long addr)
*/
int dbg_activate_sw_breakpoints(void)
{
+ unsigned long addr;
int error;
int ret = 0;
int i;
@@ -244,15 +243,16 @@ int dbg_activate_sw_breakpoints(void)
if (kgdb_break[i].state != BP_SET)
continue;
- error = kgdb_arch_set_breakpoint(&kgdb_break[i]);
+ addr = kgdb_break[i].bpt_addr;
+ error = kgdb_arch_set_breakpoint(addr,
+ kgdb_break[i].saved_instr);
if (error) {
ret = error;
- printk(KERN_INFO "KGDB: BP install failed: %lx",
- kgdb_break[i].bpt_addr);
+ printk(KERN_INFO "KGDB: BP install failed: %lx", addr);
continue;
}
- kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr);
+ kgdb_flush_swbreak_addr(addr);
kgdb_break[i].state = BP_ACTIVE;
}
return ret;
@@ -301,6 +301,7 @@ int dbg_set_sw_break(unsigned long addr)
int dbg_deactivate_sw_breakpoints(void)
{
+ unsigned long addr;
int error;
int ret = 0;
int i;
@@ -308,14 +309,15 @@ int dbg_deactivate_sw_breakpoints(void)
for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
if (kgdb_break[i].state != BP_ACTIVE)
continue;
- error = kgdb_arch_remove_breakpoint(&kgdb_break[i]);
+ addr = kgdb_break[i].bpt_addr;
+ error = kgdb_arch_remove_breakpoint(addr,
+ kgdb_break[i].saved_instr);
if (error) {
- printk(KERN_INFO "KGDB: BP remove failed: %lx\n",
- kgdb_break[i].bpt_addr);
+ printk(KERN_INFO "KGDB: BP remove failed: %lx\n", addr);
ret = error;
}
- kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr);
+ kgdb_flush_swbreak_addr(addr);
kgdb_break[i].state = BP_SET;
}
return ret;
@@ -349,6 +351,7 @@ int kgdb_isremovedbreak(unsigned long addr)
int dbg_remove_all_break(void)
{
+ unsigned long addr;
int error;
int i;
@@ -356,10 +359,12 @@ int dbg_remove_all_break(void)
for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
if (kgdb_break[i].state != BP_ACTIVE)
goto setundefined;
- error = kgdb_arch_remove_breakpoint(&kgdb_break[i]);
+ addr = kgdb_break[i].bpt_addr;
+ error = kgdb_arch_remove_breakpoint(addr,
+ kgdb_break[i].saved_instr);
if (error)
printk(KERN_ERR "KGDB: breakpoint remove failed: %lx\n",
- kgdb_break[i].bpt_addr);
+ addr);
setundefined:
kgdb_break[i].state = BP_UNDEFINED;
}
diff --git a/trunk/kernel/debug/kdb/kdb_io.c b/trunk/kernel/debug/kdb/kdb_io.c
index bb9520f0f6ff..9b5f17da1c56 100644
--- a/trunk/kernel/debug/kdb/kdb_io.c
+++ b/trunk/kernel/debug/kdb/kdb_io.c
@@ -743,7 +743,7 @@ int vkdb_printf(const char *fmt, va_list ap)
kdb_input_flush();
c = console_drivers;
- if (dbg_io_ops && !dbg_io_ops->is_console) {
+ if (!dbg_io_ops->is_console) {
len = strlen(moreprompt);
cp = moreprompt;
while (len--) {
diff --git a/trunk/kernel/irq_work.c b/trunk/kernel/irq_work.c
index 0c56d44b9fd5..c3c46c72046e 100644
--- a/trunk/kernel/irq_work.c
+++ b/trunk/kernel/irq_work.c
@@ -5,7 +5,6 @@
* context. The enqueueing is NMI-safe.
*/
-#include
#include
#include
#include
diff --git a/trunk/kernel/kmod.c b/trunk/kernel/kmod.c
index 05698a7415fe..957a7aab8ebc 100644
--- a/trunk/kernel/kmod.c
+++ b/trunk/kernel/kmod.c
@@ -322,7 +322,7 @@ static void __call_usermodehelper(struct work_struct *work)
* land has been frozen during a system-wide hibernation or suspend operation).
* Should always be manipulated under umhelper_sem acquired for write.
*/
-static enum umh_disable_depth usermodehelper_disabled = UMH_DISABLED;
+static int usermodehelper_disabled = 1;
/* Number of helpers running */
static atomic_t running_helpers = ATOMIC_INIT(0);
@@ -333,111 +333,33 @@ static atomic_t running_helpers = ATOMIC_INIT(0);
*/
static DECLARE_WAIT_QUEUE_HEAD(running_helpers_waitq);
-/*
- * Used by usermodehelper_read_lock_wait() to wait for usermodehelper_disabled
- * to become 'false'.
- */
-static DECLARE_WAIT_QUEUE_HEAD(usermodehelper_disabled_waitq);
-
/*
* Time to wait for running_helpers to become zero before the setting of
* usermodehelper_disabled in usermodehelper_disable() fails
*/
#define RUNNING_HELPERS_TIMEOUT (5 * HZ)
-int usermodehelper_read_trylock(void)
+void read_lock_usermodehelper(void)
{
- DEFINE_WAIT(wait);
- int ret = 0;
-
down_read(&umhelper_sem);
- for (;;) {
- prepare_to_wait(&usermodehelper_disabled_waitq, &wait,
- TASK_INTERRUPTIBLE);
- if (!usermodehelper_disabled)
- break;
-
- if (usermodehelper_disabled == UMH_DISABLED)
- ret = -EAGAIN;
-
- up_read(&umhelper_sem);
-
- if (ret)
- break;
-
- schedule();
- try_to_freeze();
-
- down_read(&umhelper_sem);
- }
- finish_wait(&usermodehelper_disabled_waitq, &wait);
- return ret;
-}
-EXPORT_SYMBOL_GPL(usermodehelper_read_trylock);
-
-long usermodehelper_read_lock_wait(long timeout)
-{
- DEFINE_WAIT(wait);
-
- if (timeout < 0)
- return -EINVAL;
-
- down_read(&umhelper_sem);
- for (;;) {
- prepare_to_wait(&usermodehelper_disabled_waitq, &wait,
- TASK_UNINTERRUPTIBLE);
- if (!usermodehelper_disabled)
- break;
-
- up_read(&umhelper_sem);
-
- timeout = schedule_timeout(timeout);
- if (!timeout)
- break;
-
- down_read(&umhelper_sem);
- }
- finish_wait(&usermodehelper_disabled_waitq, &wait);
- return timeout;
}
-EXPORT_SYMBOL_GPL(usermodehelper_read_lock_wait);
+EXPORT_SYMBOL_GPL(read_lock_usermodehelper);
-void usermodehelper_read_unlock(void)
+void read_unlock_usermodehelper(void)
{
up_read(&umhelper_sem);
}
-EXPORT_SYMBOL_GPL(usermodehelper_read_unlock);
+EXPORT_SYMBOL_GPL(read_unlock_usermodehelper);
/**
- * __usermodehelper_set_disable_depth - Modify usermodehelper_disabled.
- * depth: New value to assign to usermodehelper_disabled.
- *
- * Change the value of usermodehelper_disabled (under umhelper_sem locked for
- * writing) and wakeup tasks waiting for it to change.
+ * usermodehelper_disable - prevent new helpers from being started
*/
-void __usermodehelper_set_disable_depth(enum umh_disable_depth depth)
-{
- down_write(&umhelper_sem);
- usermodehelper_disabled = depth;
- wake_up(&usermodehelper_disabled_waitq);
- up_write(&umhelper_sem);
-}
-
-/**
- * __usermodehelper_disable - Prevent new helpers from being started.
- * @depth: New value to assign to usermodehelper_disabled.
- *
- * Set usermodehelper_disabled to @depth and wait for running helpers to exit.
- */
-int __usermodehelper_disable(enum umh_disable_depth depth)
+int usermodehelper_disable(void)
{
long retval;
- if (!depth)
- return -EINVAL;
-
down_write(&umhelper_sem);
- usermodehelper_disabled = depth;
+ usermodehelper_disabled = 1;
up_write(&umhelper_sem);
/*
@@ -452,10 +374,31 @@ int __usermodehelper_disable(enum umh_disable_depth depth)
if (retval)
return 0;
- __usermodehelper_set_disable_depth(UMH_ENABLED);
+ down_write(&umhelper_sem);
+ usermodehelper_disabled = 0;
+ up_write(&umhelper_sem);
return -EAGAIN;
}
+/**
+ * usermodehelper_enable - allow new helpers to be started again
+ */
+void usermodehelper_enable(void)
+{
+ down_write(&umhelper_sem);
+ usermodehelper_disabled = 0;
+ up_write(&umhelper_sem);
+}
+
+/**
+ * usermodehelper_is_disabled - check if new helpers are allowed to be started
+ */
+bool usermodehelper_is_disabled(void)
+{
+ return usermodehelper_disabled;
+}
+EXPORT_SYMBOL_GPL(usermodehelper_is_disabled);
+
static void helper_lock(void)
{
atomic_inc(&running_helpers);
diff --git a/trunk/kernel/padata.c b/trunk/kernel/padata.c
index 89fe3d1b9efb..6f10eb285ece 100644
--- a/trunk/kernel/padata.c
+++ b/trunk/kernel/padata.c
@@ -1,8 +1,6 @@
/*
* padata.c - generic interface to process data streams in parallel
*
- * See Documentation/padata.txt for an api documentation.
- *
* Copyright (C) 2008, 2009 secunet Security Networks AG
* Copyright (C) 2008, 2009 Steffen Klassert
*
@@ -356,13 +354,13 @@ static int padata_setup_cpumasks(struct parallel_data *pd,
if (!alloc_cpumask_var(&pd->cpumask.pcpu, GFP_KERNEL))
return -ENOMEM;
- cpumask_and(pd->cpumask.pcpu, pcpumask, cpu_online_mask);
+ cpumask_and(pd->cpumask.pcpu, pcpumask, cpu_active_mask);
if (!alloc_cpumask_var(&pd->cpumask.cbcpu, GFP_KERNEL)) {
free_cpumask_var(pd->cpumask.cbcpu);
return -ENOMEM;
}
- cpumask_and(pd->cpumask.cbcpu, cbcpumask, cpu_online_mask);
+ cpumask_and(pd->cpumask.cbcpu, cbcpumask, cpu_active_mask);
return 0;
}
@@ -566,7 +564,7 @@ EXPORT_SYMBOL(padata_unregister_cpumask_notifier);
static bool padata_validate_cpumask(struct padata_instance *pinst,
const struct cpumask *cpumask)
{
- if (!cpumask_intersects(cpumask, cpu_online_mask)) {
+ if (!cpumask_intersects(cpumask, cpu_active_mask)) {
pinst->flags |= PADATA_INVALID;
return false;
}
@@ -680,7 +678,7 @@ static int __padata_add_cpu(struct padata_instance *pinst, int cpu)
{
struct parallel_data *pd;
- if (cpumask_test_cpu(cpu, cpu_online_mask)) {
+ if (cpumask_test_cpu(cpu, cpu_active_mask)) {
pd = padata_alloc_pd(pinst, pinst->cpumask.pcpu,
pinst->cpumask.cbcpu);
if (!pd)
@@ -748,9 +746,6 @@ static int __padata_remove_cpu(struct padata_instance *pinst, int cpu)
return -ENOMEM;
padata_replace(pinst, pd);
-
- cpumask_clear_cpu(cpu, pd->cpumask.cbcpu);
- cpumask_clear_cpu(cpu, pd->cpumask.pcpu);
}
return 0;
diff --git a/trunk/kernel/power/hibernate.c b/trunk/kernel/power/hibernate.c
index e09dfbfeecee..0a186cfde788 100644
--- a/trunk/kernel/power/hibernate.c
+++ b/trunk/kernel/power/hibernate.c
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -610,10 +611,14 @@ int hibernate(void)
if (error)
goto Exit;
+ error = usermodehelper_disable();
+ if (error)
+ goto Exit;
+
/* Allocate memory management structures */
error = create_basic_memory_bitmaps();
if (error)
- goto Exit;
+ goto Enable_umh;
printk(KERN_INFO "PM: Syncing filesystems ... ");
sys_sync();
@@ -656,6 +661,8 @@ int hibernate(void)
Free_bitmaps:
free_basic_memory_bitmaps();
+ Enable_umh:
+ usermodehelper_enable();
Exit:
pm_notifier_call_chain(PM_POST_HIBERNATION);
pm_restore_console();
@@ -770,10 +777,16 @@ static int software_resume(void)
if (error)
goto close_finish;
- error = create_basic_memory_bitmaps();
+ error = usermodehelper_disable();
if (error)
goto close_finish;
+ error = create_basic_memory_bitmaps();
+ if (error) {
+ usermodehelper_enable();
+ goto close_finish;
+ }
+
pr_debug("PM: Preparing processes for restore.\n");
error = freeze_processes();
if (error) {
@@ -793,6 +806,7 @@ static int software_resume(void)
thaw_processes();
Done:
free_basic_memory_bitmaps();
+ usermodehelper_enable();
Finish:
pm_notifier_call_chain(PM_POST_RESTORE);
pm_restore_console();
diff --git a/trunk/kernel/power/process.c b/trunk/kernel/power/process.c
index 19db29f67558..0d2aeb226108 100644
--- a/trunk/kernel/power/process.c
+++ b/trunk/kernel/power/process.c
@@ -16,7 +16,6 @@
#include
#include
#include
-#include
/*
* Timeout for stopping processes
@@ -123,10 +122,6 @@ int freeze_processes(void)
{
int error;
- error = __usermodehelper_disable(UMH_FREEZING);
- if (error)
- return error;
-
if (!pm_freezing)
atomic_inc(&system_freezing_cnt);
@@ -135,7 +130,6 @@ int freeze_processes(void)
error = try_to_freeze_tasks(true);
if (!error) {
printk("done.");
- __usermodehelper_set_disable_depth(UMH_DISABLED);
oom_killer_disable();
}
printk("\n");
@@ -193,8 +187,6 @@ void thaw_processes(void)
} while_each_thread(g, p);
read_unlock(&tasklist_lock);
- usermodehelper_enable();
-
schedule();
printk("done.\n");
}
diff --git a/trunk/kernel/power/qos.c b/trunk/kernel/power/qos.c
index 6a031e684026..d6d6dbd1ecc0 100644
--- a/trunk/kernel/power/qos.c
+++ b/trunk/kernel/power/qos.c
@@ -229,21 +229,6 @@ int pm_qos_request_active(struct pm_qos_request *req)
}
EXPORT_SYMBOL_GPL(pm_qos_request_active);
-/**
- * pm_qos_work_fn - the timeout handler of pm_qos_update_request_timeout
- * @work: work struct for the delayed work (timeout)
- *
- * This cancels the timeout request by falling back to the default at timeout.
- */
-static void pm_qos_work_fn(struct work_struct *work)
-{
- struct pm_qos_request *req = container_of(to_delayed_work(work),
- struct pm_qos_request,
- work);
-
- pm_qos_update_request(req, PM_QOS_DEFAULT_VALUE);
-}
-
/**
* pm_qos_add_request - inserts new qos request into the list
* @req: pointer to a preallocated handle
@@ -268,7 +253,6 @@ void pm_qos_add_request(struct pm_qos_request *req,
return;
}
req->pm_qos_class = pm_qos_class;
- INIT_DELAYED_WORK(&req->work, pm_qos_work_fn);
pm_qos_update_target(pm_qos_array[pm_qos_class]->constraints,
&req->node, PM_QOS_ADD_REQ, value);
}
@@ -295,9 +279,6 @@ void pm_qos_update_request(struct pm_qos_request *req,
return;
}
- if (delayed_work_pending(&req->work))
- cancel_delayed_work_sync(&req->work);
-
if (new_value != req->node.prio)
pm_qos_update_target(
pm_qos_array[req->pm_qos_class]->constraints,
@@ -305,34 +286,6 @@ void pm_qos_update_request(struct pm_qos_request *req,
}
EXPORT_SYMBOL_GPL(pm_qos_update_request);
-/**
- * pm_qos_update_request_timeout - modifies an existing qos request temporarily.
- * @req : handle to list element holding a pm_qos request to use
- * @new_value: defines the temporal qos request
- * @timeout_us: the effective duration of this qos request in usecs.
- *
- * After timeout_us, this qos request is cancelled automatically.
- */
-void pm_qos_update_request_timeout(struct pm_qos_request *req, s32 new_value,
- unsigned long timeout_us)
-{
- if (!req)
- return;
- if (WARN(!pm_qos_request_active(req),
- "%s called for unknown object.", __func__))
- return;
-
- if (delayed_work_pending(&req->work))
- cancel_delayed_work_sync(&req->work);
-
- if (new_value != req->node.prio)
- pm_qos_update_target(
- pm_qos_array[req->pm_qos_class]->constraints,
- &req->node, PM_QOS_UPDATE_REQ, new_value);
-
- schedule_delayed_work(&req->work, usecs_to_jiffies(timeout_us));
-}
-
/**
* pm_qos_remove_request - modifies an existing qos request
* @req: handle to request list element
@@ -352,9 +305,6 @@ void pm_qos_remove_request(struct pm_qos_request *req)
return;
}
- if (delayed_work_pending(&req->work))
- cancel_delayed_work_sync(&req->work);
-
pm_qos_update_target(pm_qos_array[req->pm_qos_class]->constraints,
&req->node, PM_QOS_REMOVE_REQ,
PM_QOS_DEFAULT_VALUE);
diff --git a/trunk/kernel/power/suspend.c b/trunk/kernel/power/suspend.c
index 396d262b8fd0..88e5c967370d 100644
--- a/trunk/kernel/power/suspend.c
+++ b/trunk/kernel/power/suspend.c
@@ -12,6 +12,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -101,12 +102,17 @@ static int suspend_prepare(void)
if (error)
goto Finish;
+ error = usermodehelper_disable();
+ if (error)
+ goto Finish;
+
error = suspend_freeze_processes();
if (!error)
return 0;
suspend_stats.failed_freeze++;
dpm_save_failed_step(SUSPEND_FREEZE);
+ usermodehelper_enable();
Finish:
pm_notifier_call_chain(PM_POST_SUSPEND);
pm_restore_console();
@@ -253,6 +259,7 @@ int suspend_devices_and_enter(suspend_state_t state)
static void suspend_finish(void)
{
suspend_thaw_processes();
+ usermodehelper_enable();
pm_notifier_call_chain(PM_POST_SUSPEND);
pm_restore_console();
}
diff --git a/trunk/kernel/power/user.c b/trunk/kernel/power/user.c
index 91b0fd021a95..33c4329205af 100644
--- a/trunk/kernel/power/user.c
+++ b/trunk/kernel/power/user.c
@@ -12,6 +12,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -221,8 +222,14 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,
sys_sync();
printk("done.\n");
+ error = usermodehelper_disable();
+ if (error)
+ break;
+
error = freeze_processes();
- if (!error)
+ if (error)
+ usermodehelper_enable();
+ else
data->frozen = 1;
break;
@@ -231,6 +238,7 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,
break;
pm_restore_gfp_mask();
thaw_processes();
+ usermodehelper_enable();
data->frozen = 0;
break;
diff --git a/trunk/kernel/trace/blktrace.c b/trunk/kernel/trace/blktrace.c
index c0bd0308741c..cdea7b56b0c9 100644
--- a/trunk/kernel/trace/blktrace.c
+++ b/trunk/kernel/trace/blktrace.c
@@ -311,6 +311,13 @@ int blk_trace_remove(struct request_queue *q)
}
EXPORT_SYMBOL_GPL(blk_trace_remove);
+static int blk_dropped_open(struct inode *inode, struct file *filp)
+{
+ filp->private_data = inode->i_private;
+
+ return 0;
+}
+
static ssize_t blk_dropped_read(struct file *filp, char __user *buffer,
size_t count, loff_t *ppos)
{
@@ -324,11 +331,18 @@ static ssize_t blk_dropped_read(struct file *filp, char __user *buffer,
static const struct file_operations blk_dropped_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = blk_dropped_open,
.read = blk_dropped_read,
.llseek = default_llseek,
};
+static int blk_msg_open(struct inode *inode, struct file *filp)
+{
+ filp->private_data = inode->i_private;
+
+ return 0;
+}
+
static ssize_t blk_msg_write(struct file *filp, const char __user *buffer,
size_t count, loff_t *ppos)
{
@@ -357,7 +371,7 @@ static ssize_t blk_msg_write(struct file *filp, const char __user *buffer,
static const struct file_operations blk_msg_fops = {
.owner = THIS_MODULE,
- .open = simple_open,
+ .open = blk_msg_open,
.write = blk_msg_write,
.llseek = noop_llseek,
};
diff --git a/trunk/net/802/garp.c b/trunk/net/802/garp.c
index a5c224830439..8e21b6db3981 100644
--- a/trunk/net/802/garp.c
+++ b/trunk/net/802/garp.c
@@ -167,8 +167,7 @@ static struct garp_attr *garp_attr_lookup(const struct garp_applicant *app,
return NULL;
}
-static struct garp_attr *garp_attr_create(struct garp_applicant *app,
- const void *data, u8 len, u8 type)
+static void garp_attr_insert(struct garp_applicant *app, struct garp_attr *new)
{
struct rb_node *parent = NULL, **p = &app->gid.rb_node;
struct garp_attr *attr;
@@ -177,16 +176,21 @@ static struct garp_attr *garp_attr_create(struct garp_applicant *app,
while (*p) {
parent = *p;
attr = rb_entry(parent, struct garp_attr, node);
- d = garp_attr_cmp(attr, data, len, type);
+ d = garp_attr_cmp(attr, new->data, new->dlen, new->type);
if (d < 0)
p = &parent->rb_left;
else if (d > 0)
p = &parent->rb_right;
- else {
- /* The attribute already exists; re-use it. */
- return attr;
- }
}
+ rb_link_node(&new->node, parent, p);
+ rb_insert_color(&new->node, &app->gid);
+}
+
+static struct garp_attr *garp_attr_create(struct garp_applicant *app,
+ const void *data, u8 len, u8 type)
+{
+ struct garp_attr *attr;
+
attr = kmalloc(sizeof(*attr) + len, GFP_ATOMIC);
if (!attr)
return attr;
@@ -194,9 +198,7 @@ static struct garp_attr *garp_attr_create(struct garp_applicant *app,
attr->type = type;
attr->dlen = len;
memcpy(attr->data, data, len);
-
- rb_link_node(&attr->node, parent, p);
- rb_insert_color(&attr->node, &app->gid);
+ garp_attr_insert(app, attr);
return attr;
}
diff --git a/trunk/net/core/dev.c b/trunk/net/core/dev.c
index 6c7dc9d78e10..5d59155adf2a 100644
--- a/trunk/net/core/dev.c
+++ b/trunk/net/core/dev.c
@@ -1596,7 +1596,6 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
kfree_skb(skb);
return NET_RX_DROP;
}
- skb->skb_iif = 0;
skb_set_dev(skb, dev);
skb->tstamp.tv64 = 0;
skb->pkt_type = PACKET_HOST;
diff --git a/trunk/net/ipv4/route.c b/trunk/net/ipv4/route.c
index 167ea10b521a..4dc1c104c942 100644
--- a/trunk/net/ipv4/route.c
+++ b/trunk/net/ipv4/route.c
@@ -2041,7 +2041,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
if (err < 0)
goto e_err;
}
- rth = rt_dst_alloc(dev_net(dev)->loopback_dev,
+ rth = rt_dst_alloc(init_net.loopback_dev,
IN_DEV_CONF_GET(in_dev, NOPOLICY), false);
if (!rth)
goto e_nobufs;
diff --git a/trunk/net/ipv6/route.c b/trunk/net/ipv6/route.c
index 3992e26a6039..496b62712fe8 100644
--- a/trunk/net/ipv6/route.c
+++ b/trunk/net/ipv6/route.c
@@ -881,16 +881,6 @@ static struct rt6_info *ip6_pol_route_input(struct net *net, struct fib6_table *
return ip6_pol_route(net, table, fl6->flowi6_iif, fl6, flags);
}
-static struct dst_entry *ip6_route_input_lookup(struct net *net,
- struct net_device *dev,
- struct flowi6 *fl6, int flags)
-{
- if (rt6_need_strict(&fl6->daddr) && dev->type != ARPHRD_PIMREG)
- flags |= RT6_LOOKUP_F_IFACE;
-
- return fib6_rule_lookup(net, fl6, flags, ip6_pol_route_input);
-}
-
void ip6_route_input(struct sk_buff *skb)
{
const struct ipv6hdr *iph = ipv6_hdr(skb);
@@ -905,7 +895,10 @@ void ip6_route_input(struct sk_buff *skb)
.flowi6_proto = iph->nexthdr,
};
- skb_dst_set(skb, ip6_route_input_lookup(net, skb->dev, &fl6, flags));
+ if (rt6_need_strict(&iph->daddr) && skb->dev->type != ARPHRD_PIMREG)
+ flags |= RT6_LOOKUP_F_IFACE;
+
+ skb_dst_set(skb, fib6_rule_lookup(net, &fl6, flags, ip6_pol_route_input));
}
static struct rt6_info *ip6_pol_route_output(struct net *net, struct fib6_table *table,
@@ -2544,7 +2537,7 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void
struct sk_buff *skb;
struct rtmsg *rtm;
struct flowi6 fl6;
- int err, iif = 0, oif = 0;
+ int err, iif = 0;
err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy);
if (err < 0)
@@ -2571,29 +2564,15 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void
iif = nla_get_u32(tb[RTA_IIF]);
if (tb[RTA_OIF])
- oif = nla_get_u32(tb[RTA_OIF]);
+ fl6.flowi6_oif = nla_get_u32(tb[RTA_OIF]);
if (iif) {
struct net_device *dev;
- int flags = 0;
-
dev = __dev_get_by_index(net, iif);
if (!dev) {
err = -ENODEV;
goto errout;
}
-
- fl6.flowi6_iif = iif;
-
- if (!ipv6_addr_any(&fl6.saddr))
- flags |= RT6_LOOKUP_F_HAS_SADDR;
-
- rt = (struct rt6_info *)ip6_route_input_lookup(net, dev, &fl6,
- flags);
- } else {
- fl6.flowi6_oif = oif;
-
- rt = (struct rt6_info *)ip6_route_output(net, NULL, &fl6);
}
skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);
@@ -2608,6 +2587,7 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void
skb_reset_mac_header(skb);
skb_reserve(skb, MAX_HEADER + sizeof(struct ipv6hdr));
+ rt = (struct rt6_info*) ip6_route_output(net, NULL, &fl6);
skb_dst_set(skb, &rt->dst);
err = rt6_fill_node(net, skb, rt, &fl6.daddr, &fl6.saddr, iif,
diff --git a/trunk/net/mac80211/agg-rx.c b/trunk/net/mac80211/agg-rx.c
index 64d3ce5ea1a0..1068f668ac4e 100644
--- a/trunk/net/mac80211/agg-rx.c
+++ b/trunk/net/mac80211/agg-rx.c
@@ -49,8 +49,6 @@ static void ieee80211_free_tid_rx(struct rcu_head *h)
container_of(h, struct tid_ampdu_rx, rcu_head);
int i;
- del_timer_sync(&tid_rx->reorder_timer);
-
for (i = 0; i < tid_rx->buf_size; i++)
dev_kfree_skb(tid_rx->reorder_buf[i]);
kfree(tid_rx->reorder_buf);
@@ -93,6 +91,7 @@ void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
tid, WLAN_BACK_RECIPIENT, reason);
del_timer_sync(&tid_rx->session_timer);
+ del_timer_sync(&tid_rx->reorder_timer);
call_rcu(&tid_rx->rcu_head, ieee80211_free_tid_rx);
}
diff --git a/trunk/net/mac80211/debugfs.c b/trunk/net/mac80211/debugfs.c
index 778e5916d7c3..cc5b7a6e7e0b 100644
--- a/trunk/net/mac80211/debugfs.c
+++ b/trunk/net/mac80211/debugfs.c
@@ -15,6 +15,12 @@
#include "rate.h"
#include "debugfs.h"
+int mac80211_open_file_generic(struct inode *inode, struct file *file)
+{
+ file->private_data = inode->i_private;
+ return 0;
+}
+
#define DEBUGFS_FORMAT_BUFFER_SIZE 100
int mac80211_format_buffer(char __user *userbuf, size_t count,
@@ -44,7 +50,7 @@ static ssize_t name## _read(struct file *file, char __user *userbuf, \
#define DEBUGFS_READONLY_FILE_OPS(name) \
static const struct file_operations name## _ops = { \
.read = name## _read, \
- .open = simple_open, \
+ .open = mac80211_open_file_generic, \
.llseek = generic_file_llseek, \
};
@@ -87,7 +93,7 @@ static ssize_t reset_write(struct file *file, const char __user *user_buf,
static const struct file_operations reset_ops = {
.write = reset_write,
- .open = simple_open,
+ .open = mac80211_open_file_generic,
.llseek = noop_llseek,
};
@@ -248,7 +254,7 @@ static ssize_t stats_ ##name## _read(struct file *file, \
\
static const struct file_operations stats_ ##name## _ops = { \
.read = stats_ ##name## _read, \
- .open = simple_open, \
+ .open = mac80211_open_file_generic, \
.llseek = generic_file_llseek, \
};
diff --git a/trunk/net/mac80211/debugfs.h b/trunk/net/mac80211/debugfs.h
index 9be4e6d71d00..7c87529630f5 100644
--- a/trunk/net/mac80211/debugfs.h
+++ b/trunk/net/mac80211/debugfs.h
@@ -3,6 +3,7 @@
#ifdef CONFIG_MAC80211_DEBUGFS
extern void debugfs_hw_add(struct ieee80211_local *local);
+extern int mac80211_open_file_generic(struct inode *inode, struct file *file);
extern int mac80211_format_buffer(char __user *userbuf, size_t count,
loff_t *ppos, char *fmt, ...);
#else
diff --git a/trunk/net/mac80211/debugfs_key.c b/trunk/net/mac80211/debugfs_key.c
index 7932767bb482..59edcd95a58d 100644
--- a/trunk/net/mac80211/debugfs_key.c
+++ b/trunk/net/mac80211/debugfs_key.c
@@ -30,7 +30,7 @@ static ssize_t key_##name##_read(struct file *file, \
#define KEY_OPS(name) \
static const struct file_operations key_ ##name## _ops = { \
.read = key_##name##_read, \
- .open = simple_open, \
+ .open = mac80211_open_file_generic, \
.llseek = generic_file_llseek, \
}
@@ -45,7 +45,7 @@ static const struct file_operations key_ ##name## _ops = { \
#define KEY_CONF_OPS(name) \
static const struct file_operations key_ ##name## _ops = { \
.read = key_conf_##name##_read, \
- .open = simple_open, \
+ .open = mac80211_open_file_generic, \
.llseek = generic_file_llseek, \
}
diff --git a/trunk/net/mac80211/debugfs_netdev.c b/trunk/net/mac80211/debugfs_netdev.c
index 30f99c344847..a32eeda04aa3 100644
--- a/trunk/net/mac80211/debugfs_netdev.c
+++ b/trunk/net/mac80211/debugfs_netdev.c
@@ -135,7 +135,7 @@ static ssize_t ieee80211_if_read_##name(struct file *file, \
static const struct file_operations name##_ops = { \
.read = ieee80211_if_read_##name, \
.write = (_write), \
- .open = simple_open, \
+ .open = mac80211_open_file_generic, \
.llseek = generic_file_llseek, \
}
diff --git a/trunk/net/mac80211/debugfs_sta.c b/trunk/net/mac80211/debugfs_sta.c
index 832b2da5e4cd..6d45804d09bc 100644
--- a/trunk/net/mac80211/debugfs_sta.c
+++ b/trunk/net/mac80211/debugfs_sta.c
@@ -33,7 +33,7 @@ static ssize_t sta_ ##name## _read(struct file *file, \
#define STA_OPS(name) \
static const struct file_operations sta_ ##name## _ops = { \
.read = sta_##name##_read, \
- .open = simple_open, \
+ .open = mac80211_open_file_generic, \
.llseek = generic_file_llseek, \
}
@@ -41,7 +41,7 @@ static const struct file_operations sta_ ##name## _ops = { \
static const struct file_operations sta_ ##name## _ops = { \
.read = sta_##name##_read, \
.write = sta_##name##_write, \
- .open = simple_open, \
+ .open = mac80211_open_file_generic, \
.llseek = generic_file_llseek, \
}
diff --git a/trunk/net/mac80211/main.c b/trunk/net/mac80211/main.c
index 16336480c631..b581a24fa15c 100644
--- a/trunk/net/mac80211/main.c
+++ b/trunk/net/mac80211/main.c
@@ -102,6 +102,9 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
might_sleep();
+ /* If this off-channel logic ever changes, ieee80211_on_oper_channel
+ * may need to change as well.
+ */
offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
if (local->scan_channel) {
chan = local->scan_channel;
diff --git a/trunk/net/mac80211/rate.c b/trunk/net/mac80211/rate.c
index 3313c117b322..b4f7600a3e36 100644
--- a/trunk/net/mac80211/rate.c
+++ b/trunk/net/mac80211/rate.c
@@ -145,7 +145,7 @@ static ssize_t rcname_read(struct file *file, char __user *userbuf,
static const struct file_operations rcname_ops = {
.read = rcname_read,
- .open = simple_open,
+ .open = mac80211_open_file_generic,
.llseek = default_llseek,
};
#endif
diff --git a/trunk/net/mac80211/scan.c b/trunk/net/mac80211/scan.c
index c70e17677135..33cd16901378 100644
--- a/trunk/net/mac80211/scan.c
+++ b/trunk/net/mac80211/scan.c
@@ -370,7 +370,7 @@ static int ieee80211_start_sw_scan(struct ieee80211_local *local)
*/
drv_sw_scan_start(local);
- local->leave_oper_channel_time = jiffies;
+ local->leave_oper_channel_time = 0;
local->next_scan_state = SCAN_DECISION;
local->scan_channel_idx = 0;
diff --git a/trunk/net/netfilter/nfnetlink_acct.c b/trunk/net/netfilter/nfnetlink_acct.c
index d98c868c148b..3eb348bfc4fb 100644
--- a/trunk/net/netfilter/nfnetlink_acct.c
+++ b/trunk/net/netfilter/nfnetlink_acct.c
@@ -10,7 +10,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -18,6 +17,7 @@
#include
#include
#include
+#include