mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Linux 3.14-rc5
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAABAgAGBQJTE+9XAAoJEHm+PkMAQRiGrMQIAKI2V49Kj8WlnwGchFvsbGJB
SLALwNi33T/IBKdZRhrfryBu02Zj7eVvZ2ML35dJEnmF88O+dJBDMTkKV1xalrip
mtkBrjUnfAI04fq/daLQ1TsAy4qqlra5tSTuDCw8ILOnGPwT0VydIEHNdtmoUIfw
xlZLxHzny1MslZ78d7uR/cUnV9ylKRRajWzfw1HT8hL51fCt8nRWY0sCvwvl+kMJ
LsK+6I7mHDUuzA7QBmBI+dhzQgos5+JkkrnpmqHAqwmIh+AI3ksmjUCQ4dM7owrO
IvEx+ZNDqxAdLcm1WAxATNfxddFXHc62JTvKuuKqTVWuaxVfK1Aqt8MjDMIPeAQ=
=yV5u
-----END PGP SIGNATURE-----
Merge tag 'v3.14-rc5' into patchwork
Linux 3.14-rc5
* tag 'v3.14-rc5': (1117 commits)
Linux 3.14-rc5
drm/vmwgfx: avoid null pointer dereference at failure paths
drm/vmwgfx: Make sure backing mobs are cleared when allocated. Update driver date.
drm/vmwgfx: Remove some unused surface formats
MAINTAINERS: add maintainer entry for Armada DRM driver
arm64: Fix !CONFIG_SMP kernel build
arm64: mm: Add double logical invert to pte accessors
dm cache: fix truncation bug when mapping I/O to >2TB fast device
perf tools: Fix strict alias issue for find_first_bit
powerpc/powernv: Fix indirect XSCOM unmangling
powerpc/powernv: Fix opal_xscom_{read,write} prototype
powerpc/powernv: Refactor PHB diag-data dump
powerpc/powernv: Dump PHB diag-data immediately
powerpc: Increase stack redzone for 64-bit userspace to 512 bytes
powerpc/ftrace: bugfix for test_24bit_addr
powerpc/crashdump : Fix page frame number check in copy_oldmem_page
powerpc/le: Ensure that the 'stop-self' RTAS token is handled correctly
kvm, vmx: Really fix lazy FPU on nested guest
perf tools: fix BFD detection on opensuse
drm/radeon: enable speaker allocation setup on dce3.2
...
This commit is contained in:
commit
c897df0e2d
1195 changed files with 14559 additions and 7288 deletions
|
|
@ -559,7 +559,8 @@ static void edac_mc_workq_function(struct work_struct *work_req)
|
|||
*
|
||||
* called with the mem_ctls_mutex held
|
||||
*/
|
||||
static void edac_mc_workq_setup(struct mem_ctl_info *mci, unsigned msec)
|
||||
static void edac_mc_workq_setup(struct mem_ctl_info *mci, unsigned msec,
|
||||
bool init)
|
||||
{
|
||||
edac_dbg(0, "\n");
|
||||
|
||||
|
|
@ -567,7 +568,9 @@ static void edac_mc_workq_setup(struct mem_ctl_info *mci, unsigned msec)
|
|||
if (mci->op_state != OP_RUNNING_POLL)
|
||||
return;
|
||||
|
||||
INIT_DELAYED_WORK(&mci->work, edac_mc_workq_function);
|
||||
if (init)
|
||||
INIT_DELAYED_WORK(&mci->work, edac_mc_workq_function);
|
||||
|
||||
mod_delayed_work(edac_workqueue, &mci->work, msecs_to_jiffies(msec));
|
||||
}
|
||||
|
||||
|
|
@ -601,7 +604,7 @@ static void edac_mc_workq_teardown(struct mem_ctl_info *mci)
|
|||
* user space has updated our poll period value, need to
|
||||
* reset our workq delays
|
||||
*/
|
||||
void edac_mc_reset_delay_period(int value)
|
||||
void edac_mc_reset_delay_period(unsigned long value)
|
||||
{
|
||||
struct mem_ctl_info *mci;
|
||||
struct list_head *item;
|
||||
|
|
@ -611,7 +614,7 @@ void edac_mc_reset_delay_period(int value)
|
|||
list_for_each(item, &mc_devices) {
|
||||
mci = list_entry(item, struct mem_ctl_info, link);
|
||||
|
||||
edac_mc_workq_setup(mci, (unsigned long) value);
|
||||
edac_mc_workq_setup(mci, value, false);
|
||||
}
|
||||
|
||||
mutex_unlock(&mem_ctls_mutex);
|
||||
|
|
@ -782,7 +785,7 @@ int edac_mc_add_mc(struct mem_ctl_info *mci)
|
|||
/* This instance is NOW RUNNING */
|
||||
mci->op_state = OP_RUNNING_POLL;
|
||||
|
||||
edac_mc_workq_setup(mci, edac_mc_get_poll_msec());
|
||||
edac_mc_workq_setup(mci, edac_mc_get_poll_msec(), true);
|
||||
} else {
|
||||
mci->op_state = OP_RUNNING_INTERRUPT;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,18 +52,20 @@ int edac_mc_get_poll_msec(void)
|
|||
|
||||
static int edac_set_poll_msec(const char *val, struct kernel_param *kp)
|
||||
{
|
||||
long l;
|
||||
unsigned long l;
|
||||
int ret;
|
||||
|
||||
if (!val)
|
||||
return -EINVAL;
|
||||
|
||||
ret = kstrtol(val, 0, &l);
|
||||
ret = kstrtoul(val, 0, &l);
|
||||
if (ret)
|
||||
return ret;
|
||||
if ((int)l != l)
|
||||
|
||||
if (l < 1000)
|
||||
return -EINVAL;
|
||||
*((int *)kp->arg) = l;
|
||||
|
||||
*((unsigned long *)kp->arg) = l;
|
||||
|
||||
/* notify edac_mc engine to reset the poll period */
|
||||
edac_mc_reset_delay_period(l);
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ extern void edac_device_workq_setup(struct edac_device_ctl_info *edac_dev,
|
|||
extern void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev);
|
||||
extern void edac_device_reset_delay_period(struct edac_device_ctl_info
|
||||
*edac_dev, unsigned long value);
|
||||
extern void edac_mc_reset_delay_period(int value);
|
||||
extern void edac_mc_reset_delay_period(unsigned long value);
|
||||
|
||||
extern void *edac_align_ptr(void **p, unsigned size, int n_elems);
|
||||
|
||||
|
|
|
|||
|
|
@ -943,33 +943,35 @@ static int i7300_get_devices(struct mem_ctl_info *mci)
|
|||
|
||||
/* Attempt to 'get' the MCH register we want */
|
||||
pdev = NULL;
|
||||
while (!pvt->pci_dev_16_1_fsb_addr_map ||
|
||||
!pvt->pci_dev_16_2_fsb_err_regs) {
|
||||
pdev = pci_get_device(PCI_VENDOR_ID_INTEL,
|
||||
PCI_DEVICE_ID_INTEL_I7300_MCH_ERR, pdev);
|
||||
if (!pdev) {
|
||||
/* End of list, leave */
|
||||
i7300_printk(KERN_ERR,
|
||||
"'system address,Process Bus' "
|
||||
"device not found:"
|
||||
"vendor 0x%x device 0x%x ERR funcs "
|
||||
"(broken BIOS?)\n",
|
||||
PCI_VENDOR_ID_INTEL,
|
||||
PCI_DEVICE_ID_INTEL_I7300_MCH_ERR);
|
||||
goto error;
|
||||
}
|
||||
|
||||
while ((pdev = pci_get_device(PCI_VENDOR_ID_INTEL,
|
||||
PCI_DEVICE_ID_INTEL_I7300_MCH_ERR,
|
||||
pdev))) {
|
||||
/* Store device 16 funcs 1 and 2 */
|
||||
switch (PCI_FUNC(pdev->devfn)) {
|
||||
case 1:
|
||||
pvt->pci_dev_16_1_fsb_addr_map = pdev;
|
||||
if (!pvt->pci_dev_16_1_fsb_addr_map)
|
||||
pvt->pci_dev_16_1_fsb_addr_map =
|
||||
pci_dev_get(pdev);
|
||||
break;
|
||||
case 2:
|
||||
pvt->pci_dev_16_2_fsb_err_regs = pdev;
|
||||
if (!pvt->pci_dev_16_2_fsb_err_regs)
|
||||
pvt->pci_dev_16_2_fsb_err_regs =
|
||||
pci_dev_get(pdev);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!pvt->pci_dev_16_1_fsb_addr_map ||
|
||||
!pvt->pci_dev_16_2_fsb_err_regs) {
|
||||
/* At least one device was not found */
|
||||
i7300_printk(KERN_ERR,
|
||||
"'system address,Process Bus' device not found:"
|
||||
"vendor 0x%x device 0x%x ERR funcs (broken BIOS?)\n",
|
||||
PCI_VENDOR_ID_INTEL,
|
||||
PCI_DEVICE_ID_INTEL_I7300_MCH_ERR);
|
||||
goto error;
|
||||
}
|
||||
|
||||
edac_dbg(1, "System Address, processor bus- PCI Bus ID: %s %x:%x\n",
|
||||
pci_name(pvt->pci_dev_16_0_fsb_ctlr),
|
||||
pvt->pci_dev_16_0_fsb_ctlr->vendor,
|
||||
|
|
|
|||
|
|
@ -1334,14 +1334,19 @@ static int i7core_get_onedevice(struct pci_dev **prev,
|
|||
* is at addr 8086:2c40, instead of 8086:2c41. So, we need
|
||||
* to probe for the alternate address in case of failure
|
||||
*/
|
||||
if (dev_descr->dev_id == PCI_DEVICE_ID_INTEL_I7_NONCORE && !pdev)
|
||||
if (dev_descr->dev_id == PCI_DEVICE_ID_INTEL_I7_NONCORE && !pdev) {
|
||||
pci_dev_get(*prev); /* pci_get_device will put it */
|
||||
pdev = pci_get_device(PCI_VENDOR_ID_INTEL,
|
||||
PCI_DEVICE_ID_INTEL_I7_NONCORE_ALT, *prev);
|
||||
}
|
||||
|
||||
if (dev_descr->dev_id == PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE && !pdev)
|
||||
if (dev_descr->dev_id == PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE &&
|
||||
!pdev) {
|
||||
pci_dev_get(*prev); /* pci_get_device will put it */
|
||||
pdev = pci_get_device(PCI_VENDOR_ID_INTEL,
|
||||
PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_ALT,
|
||||
*prev);
|
||||
}
|
||||
|
||||
if (!pdev) {
|
||||
if (*prev) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue