bd91088785
git-svn-id: http://svn.sabayonlinux.org/overlay@1983 d7aec97c-591d-0410-af39-a8856400b30a
1636 lines
61 KiB
Diff
1636 lines
61 KiB
Diff
diff --git a/Documentation/video4linux/CARDLIST.cx23885 b/Documentation/video4linux/CARDLIST.cx23885
|
|
index 00cb646..986ea57 100644
|
|
--- a/Documentation/video4linux/CARDLIST.cx23885
|
|
+++ b/Documentation/video4linux/CARDLIST.cx23885
|
|
@@ -1,5 +1,5 @@
|
|
0 -> UNKNOWN/GENERIC [0070:3400]
|
|
1 -> Hauppauge WinTV-HVR1800lp [0070:7600]
|
|
- 2 -> Hauppauge WinTV-HVR1800 [0070:7800,0070:7801]
|
|
+ 2 -> Hauppauge WinTV-HVR1800 [0070:7800,0070:7801,0070:7809]
|
|
3 -> Hauppauge WinTV-HVR1250 [0070:7911]
|
|
4 -> DViCO FusionHDTV5 Express [18ac:d500]
|
|
diff --git a/arch/x86/kernel/Makefile_32 b/arch/x86/kernel/Makefile_32
|
|
index a7bc93c..5e48bd2 100644
|
|
--- a/arch/x86/kernel/Makefile_32
|
|
+++ b/arch/x86/kernel/Makefile_32
|
|
@@ -19,7 +19,8 @@ obj-$(CONFIG_X86_MSR) += msr.o
|
|
obj-$(CONFIG_X86_CPUID) += cpuid.o
|
|
obj-$(CONFIG_MICROCODE) += microcode.o
|
|
obj-$(CONFIG_PCI) += early-quirks.o
|
|
-obj-$(CONFIG_APM) += apm_32.o
|
|
+apm-y := apm_32.o
|
|
+obj-$(CONFIG_APM) += apm.o
|
|
obj-$(CONFIG_X86_SMP) += smp_32.o smpboot_32.o tsc_sync.o
|
|
obj-$(CONFIG_SMP) += smpcommon_32.o
|
|
obj-$(CONFIG_X86_TRAMPOLINE) += trampoline_32.o
|
|
diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
|
|
index 8809654..bd12c8e 100644
|
|
--- a/drivers/acpi/blacklist.c
|
|
+++ b/drivers/acpi/blacklist.c
|
|
@@ -208,24 +208,24 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
|
|
* Disable OSI(Linux) warnings on all "Acer, inc."
|
|
*
|
|
* _OSI(Linux) disables the latest Windows BIOS code:
|
|
+ * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 3100"),
|
|
* DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5050"),
|
|
+ * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"),
|
|
* DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5580"),
|
|
* DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 3010"),
|
|
* _OSI(Linux) effect unknown:
|
|
* DMI_MATCH(DMI_PRODUCT_NAME, "Ferrari 5000"),
|
|
*/
|
|
- {
|
|
- .callback = dmi_disable_osi_linux,
|
|
- .ident = "Acer, inc.",
|
|
- .matches = {
|
|
- DMI_MATCH(DMI_SYS_VENDOR, "Acer, inc."),
|
|
- },
|
|
- },
|
|
+ /*
|
|
+ * note that dmi_check_system() uses strstr()
|
|
+ * to match sub-strings rather than !strcmp(),
|
|
+ * so "Acer" below matches "Acer, inc." above.
|
|
+ */
|
|
/*
|
|
* Disable OSI(Linux) warnings on all "Acer"
|
|
*
|
|
* _OSI(Linux) effect unknown:
|
|
- * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"),
|
|
+ * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5315"),
|
|
* DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"),
|
|
* DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7720Z"),
|
|
* DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 5520"),
|
|
@@ -300,7 +300,7 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
|
|
DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"),
|
|
},
|
|
},
|
|
- { /* OSI(Linux) touches USB, breaks suspend to disk */
|
|
+ { /* OSI(Linux) touches USB, unknown side-effect */
|
|
.callback = dmi_disable_osi_linux,
|
|
.ident = "Dell Dimension 5150",
|
|
.matches = {
|
|
@@ -474,6 +474,11 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
|
|
*
|
|
* _OSI(Linux) confirmed to be a NOP:
|
|
* DMI_MATCH(DMI_PRODUCT_NAME, "P1-J150B"),
|
|
+ * with DMI_MATCH(DMI_BOARD_NAME, "ROCKY"),
|
|
+ *
|
|
+ * unknown:
|
|
+ * DMI_MATCH(DMI_PRODUCT_NAME, "S1-MDGDG"),
|
|
+ * with DMI_MATCH(DMI_BOARD_NAME, "ROCKY"),
|
|
*/
|
|
{
|
|
.callback = dmi_disable_osi_linux,
|
|
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
|
|
index e53fb51..fde7ac8 100644
|
|
--- a/drivers/acpi/osl.c
|
|
+++ b/drivers/acpi/osl.c
|
|
@@ -120,7 +120,7 @@ static char osi_additional_string[OSI_STRING_LENGTH_MAX];
|
|
*/
|
|
#define OSI_LINUX_ENABLE 0
|
|
|
|
-struct osi_linux {
|
|
+static struct osi_linux {
|
|
unsigned int enable:1;
|
|
unsigned int dmi:1;
|
|
unsigned int cmdline:1;
|
|
@@ -1213,24 +1213,24 @@ acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object)
|
|
*
|
|
* Returns 0 on success
|
|
*/
|
|
-int acpi_dmi_dump(void)
|
|
+static int acpi_dmi_dump(void)
|
|
{
|
|
|
|
if (!dmi_available)
|
|
return -1;
|
|
|
|
printk(KERN_NOTICE PREFIX "DMI System Vendor: %s\n",
|
|
- dmi_get_slot(DMI_SYS_VENDOR));
|
|
+ dmi_get_system_info(DMI_SYS_VENDOR));
|
|
printk(KERN_NOTICE PREFIX "DMI Product Name: %s\n",
|
|
- dmi_get_slot(DMI_PRODUCT_NAME));
|
|
+ dmi_get_system_info(DMI_PRODUCT_NAME));
|
|
printk(KERN_NOTICE PREFIX "DMI Product Version: %s\n",
|
|
- dmi_get_slot(DMI_PRODUCT_VERSION));
|
|
+ dmi_get_system_info(DMI_PRODUCT_VERSION));
|
|
printk(KERN_NOTICE PREFIX "DMI Board Name: %s\n",
|
|
- dmi_get_slot(DMI_BOARD_NAME));
|
|
+ dmi_get_system_info(DMI_BOARD_NAME));
|
|
printk(KERN_NOTICE PREFIX "DMI BIOS Vendor: %s\n",
|
|
- dmi_get_slot(DMI_BIOS_VENDOR));
|
|
+ dmi_get_system_info(DMI_BIOS_VENDOR));
|
|
printk(KERN_NOTICE PREFIX "DMI BIOS Date: %s\n",
|
|
- dmi_get_slot(DMI_BIOS_DATE));
|
|
+ dmi_get_system_info(DMI_BIOS_DATE));
|
|
|
|
return 0;
|
|
}
|
|
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
|
|
index 0295855..4a1b9bf 100644
|
|
--- a/drivers/base/firmware_class.c
|
|
+++ b/drivers/base/firmware_class.c
|
|
@@ -292,7 +292,8 @@ firmware_class_timeout(u_long data)
|
|
|
|
static inline void fw_setup_device_id(struct device *f_dev, struct device *dev)
|
|
{
|
|
- snprintf(f_dev->bus_id, BUS_ID_SIZE, "firmware-%s", dev->bus_id);
|
|
+ /* XXX warning we should watch out for name collisions */
|
|
+ strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
|
|
}
|
|
|
|
static int fw_register_device(struct device **dev_p, const char *fw_name,
|
|
diff --git a/drivers/char/drm/drm_stub.c b/drivers/char/drm/drm_stub.c
|
|
index ee83ff9..a157ee5 100644
|
|
--- a/drivers/char/drm/drm_stub.c
|
|
+++ b/drivers/char/drm/drm_stub.c
|
|
@@ -218,6 +218,7 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
|
|
if (ret)
|
|
goto err_g1;
|
|
|
|
+ pci_set_master(pdev);
|
|
if ((ret = drm_fill_in_dev(dev, pdev, ent, driver))) {
|
|
printk(KERN_ERR "DRM: Fill_in_dev failed.\n");
|
|
goto err_g2;
|
|
diff --git a/drivers/char/drm/drm_vm.c b/drivers/char/drm/drm_vm.c
|
|
index e8d50af..ef5e6b1 100644
|
|
--- a/drivers/char/drm/drm_vm.c
|
|
+++ b/drivers/char/drm/drm_vm.c
|
|
@@ -506,6 +506,7 @@ static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
|
|
vma->vm_ops = &drm_vm_dma_ops;
|
|
|
|
vma->vm_flags |= VM_RESERVED; /* Don't swap */
|
|
+ vma->vm_flags |= VM_DONTEXPAND;
|
|
|
|
vma->vm_file = filp; /* Needed for drm_vm_open() */
|
|
drm_vm_open_locked(vma);
|
|
@@ -655,6 +656,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
|
|
return -EINVAL; /* This should never happen. */
|
|
}
|
|
vma->vm_flags |= VM_RESERVED; /* Don't swap */
|
|
+ vma->vm_flags |= VM_DONTEXPAND;
|
|
|
|
vma->vm_file = filp; /* Needed for drm_vm_open() */
|
|
drm_vm_open_locked(vma);
|
|
diff --git a/drivers/char/mspec.c b/drivers/char/mspec.c
|
|
index 82f2e27..ff146c2 100644
|
|
--- a/drivers/char/mspec.c
|
|
+++ b/drivers/char/mspec.c
|
|
@@ -283,7 +283,7 @@ mspec_mmap(struct file *file, struct vm_area_struct *vma,
|
|
vdata->refcnt = ATOMIC_INIT(1);
|
|
vma->vm_private_data = vdata;
|
|
|
|
- vma->vm_flags |= (VM_IO | VM_RESERVED | VM_PFNMAP);
|
|
+ vma->vm_flags |= (VM_IO | VM_RESERVED | VM_PFNMAP | VM_DONTEXPAND);
|
|
if (vdata->type == MSPEC_FETCHOP || vdata->type == MSPEC_UNCACHED)
|
|
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
|
vma->vm_ops = &mspec_vm_ops;
|
|
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
|
|
index 5e596a7..b2fb6ba 100644
|
|
--- a/drivers/firmware/dmi_scan.c
|
|
+++ b/drivers/firmware/dmi_scan.c
|
|
@@ -469,12 +469,3 @@ int dmi_get_year(int field)
|
|
|
|
return year;
|
|
}
|
|
-
|
|
-/**
|
|
- * dmi_get_slot - return dmi_ident[slot]
|
|
- * @slot: index into dmi_ident[]
|
|
- */
|
|
-char *dmi_get_slot(int slot)
|
|
-{
|
|
- return(dmi_ident[slot]);
|
|
-}
|
|
diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c
|
|
index b9012ac..db00193 100644
|
|
--- a/drivers/media/video/cx23885/cx23885-cards.c
|
|
+++ b/drivers/media/video/cx23885/cx23885-cards.c
|
|
@@ -138,6 +138,10 @@ struct cx23885_subid cx23885_subids[] = {
|
|
.card = CX23885_BOARD_HAUPPAUGE_HVR1800,
|
|
},{
|
|
.subvendor = 0x0070,
|
|
+ .subdevice = 0x7809,
|
|
+ .card = CX23885_BOARD_HAUPPAUGE_HVR1800,
|
|
+ },{
|
|
+ .subvendor = 0x0070,
|
|
.subdevice = 0x7911,
|
|
.card = CX23885_BOARD_HAUPPAUGE_HVR1250,
|
|
},{
|
|
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
|
|
index f84c752..399592d 100644
|
|
--- a/drivers/net/forcedeth.c
|
|
+++ b/drivers/net/forcedeth.c
|
|
@@ -5593,35 +5593,35 @@ static struct pci_device_id pci_tbl[] = {
|
|
},
|
|
{ /* MCP77 Ethernet Controller */
|
|
PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_32),
|
|
- .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
|
|
+ .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR,
|
|
},
|
|
{ /* MCP77 Ethernet Controller */
|
|
PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_33),
|
|
- .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
|
|
+ .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR,
|
|
},
|
|
{ /* MCP77 Ethernet Controller */
|
|
PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_34),
|
|
- .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
|
|
+ .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR,
|
|
},
|
|
{ /* MCP77 Ethernet Controller */
|
|
PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_35),
|
|
- .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
|
|
+ .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR,
|
|
},
|
|
{ /* MCP79 Ethernet Controller */
|
|
PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_36),
|
|
- .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
|
|
+ .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR,
|
|
},
|
|
{ /* MCP79 Ethernet Controller */
|
|
PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_37),
|
|
- .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
|
|
+ .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR,
|
|
},
|
|
{ /* MCP79 Ethernet Controller */
|
|
PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_38),
|
|
- .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
|
|
+ .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR,
|
|
},
|
|
{ /* MCP79 Ethernet Controller */
|
|
PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_39),
|
|
- .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
|
|
+ .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR,
|
|
},
|
|
{0,},
|
|
};
|
|
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
|
|
index bc15940..962e28b 100644
|
|
--- a/drivers/net/sky2.c
|
|
+++ b/drivers/net/sky2.c
|
|
@@ -621,6 +621,7 @@ static void sky2_phy_power(struct sky2_hw *hw, unsigned port, int onoff)
|
|
static const u32 phy_power[] = { PCI_Y2_PHY1_POWD, PCI_Y2_PHY2_POWD };
|
|
static const u32 coma_mode[] = { PCI_Y2_PHY1_COMA, PCI_Y2_PHY2_COMA };
|
|
|
|
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
|
|
reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
|
|
/* Turn on/off phy power saving */
|
|
if (onoff)
|
|
@@ -632,7 +633,8 @@ static void sky2_phy_power(struct sky2_hw *hw, unsigned port, int onoff)
|
|
reg1 |= coma_mode[port];
|
|
|
|
sky2_pci_write32(hw, PCI_DEV_REG1, reg1);
|
|
- reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
|
|
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
|
|
+ sky2_pci_read32(hw, PCI_DEV_REG1);
|
|
|
|
udelay(100);
|
|
}
|
|
@@ -1412,6 +1414,7 @@ static int sky2_up(struct net_device *dev)
|
|
imask |= portirq_msk[port];
|
|
sky2_write32(hw, B0_IMSK, imask);
|
|
|
|
+ sky2_set_multicast(dev);
|
|
return 0;
|
|
|
|
err_out:
|
|
@@ -2426,6 +2429,7 @@ static void sky2_hw_intr(struct sky2_hw *hw)
|
|
if (status & (Y2_IS_MST_ERR | Y2_IS_IRQ_STAT)) {
|
|
u16 pci_err;
|
|
|
|
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
|
|
pci_err = sky2_pci_read16(hw, PCI_STATUS);
|
|
if (net_ratelimit())
|
|
dev_err(&pdev->dev, "PCI hardware error (0x%x)\n",
|
|
@@ -2433,12 +2437,14 @@ static void sky2_hw_intr(struct sky2_hw *hw)
|
|
|
|
sky2_pci_write16(hw, PCI_STATUS,
|
|
pci_err | PCI_STATUS_ERROR_BITS);
|
|
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
|
|
}
|
|
|
|
if (status & Y2_IS_PCI_EXP) {
|
|
/* PCI-Express uncorrectable Error occurred */
|
|
u32 err;
|
|
|
|
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
|
|
err = sky2_read32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS);
|
|
sky2_write32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS,
|
|
0xfffffffful);
|
|
@@ -2446,6 +2452,7 @@ static void sky2_hw_intr(struct sky2_hw *hw)
|
|
dev_err(&pdev->dev, "PCI Express error (0x%x)\n", err);
|
|
|
|
sky2_read32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS);
|
|
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
|
|
}
|
|
|
|
if (status & Y2_HWE_L1_MASK)
|
|
@@ -2811,6 +2818,7 @@ static void sky2_reset(struct sky2_hw *hw)
|
|
}
|
|
|
|
sky2_power_on(hw);
|
|
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
|
|
|
|
for (i = 0; i < hw->ports; i++) {
|
|
sky2_write8(hw, SK_REG(i, GMAC_LINK_CTRL), GMLC_RST_SET);
|
|
@@ -3533,8 +3541,6 @@ static int sky2_set_ringparam(struct net_device *dev,
|
|
err = sky2_up(dev);
|
|
if (err)
|
|
dev_close(dev);
|
|
- else
|
|
- sky2_set_multicast(dev);
|
|
}
|
|
|
|
return err;
|
|
@@ -4368,8 +4374,6 @@ static int sky2_resume(struct pci_dev *pdev)
|
|
dev_close(dev);
|
|
goto out;
|
|
}
|
|
-
|
|
- sky2_set_multicast(dev);
|
|
}
|
|
}
|
|
|
|
diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
|
|
index 5e8f8ac..559a9a9 100644
|
|
--- a/drivers/net/wireless/b43/dma.c
|
|
+++ b/drivers/net/wireless/b43/dma.c
|
|
@@ -1106,7 +1106,7 @@ static int dma_tx_fragment(struct b43_dmaring *ring,
|
|
{
|
|
const struct b43_dma_ops *ops = ring->ops;
|
|
u8 *header;
|
|
- int slot;
|
|
+ int slot, old_top_slot, old_used_slots;
|
|
int err;
|
|
struct b43_dmadesc_generic *desc;
|
|
struct b43_dmadesc_meta *meta;
|
|
@@ -1116,20 +1116,31 @@ static int dma_tx_fragment(struct b43_dmaring *ring,
|
|
#define SLOTS_PER_PACKET 2
|
|
B43_WARN_ON(skb_shinfo(skb)->nr_frags);
|
|
|
|
+ old_top_slot = ring->current_slot;
|
|
+ old_used_slots = ring->used_slots;
|
|
+
|
|
/* Get a slot for the header. */
|
|
slot = request_slot(ring);
|
|
desc = ops->idx2desc(ring, slot, &meta_hdr);
|
|
memset(meta_hdr, 0, sizeof(*meta_hdr));
|
|
|
|
header = &(ring->txhdr_cache[slot * sizeof(struct b43_txhdr_fw4)]);
|
|
- b43_generate_txhdr(ring->dev, header,
|
|
+ err = b43_generate_txhdr(ring->dev, header,
|
|
skb->data, skb->len, ctl,
|
|
generate_cookie(ring, slot));
|
|
+ if (unlikely(err)) {
|
|
+ ring->current_slot = old_top_slot;
|
|
+ ring->used_slots = old_used_slots;
|
|
+ return err;
|
|
+ }
|
|
|
|
meta_hdr->dmaaddr = map_descbuffer(ring, (unsigned char *)header,
|
|
sizeof(struct b43_txhdr_fw4), 1);
|
|
- if (dma_mapping_error(meta_hdr->dmaaddr))
|
|
+ if (dma_mapping_error(meta_hdr->dmaaddr)) {
|
|
+ ring->current_slot = old_top_slot;
|
|
+ ring->used_slots = old_used_slots;
|
|
return -EIO;
|
|
+ }
|
|
ops->fill_descriptor(ring, desc, meta_hdr->dmaaddr,
|
|
sizeof(struct b43_txhdr_fw4), 1, 0, 0);
|
|
|
|
@@ -1147,6 +1158,8 @@ static int dma_tx_fragment(struct b43_dmaring *ring,
|
|
if (dma_mapping_error(meta->dmaaddr)) {
|
|
bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA);
|
|
if (!bounce_skb) {
|
|
+ ring->current_slot = old_top_slot;
|
|
+ ring->used_slots = old_used_slots;
|
|
err = -ENOMEM;
|
|
goto out_unmap_hdr;
|
|
}
|
|
@@ -1157,6 +1170,8 @@ static int dma_tx_fragment(struct b43_dmaring *ring,
|
|
meta->skb = skb;
|
|
meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
|
|
if (dma_mapping_error(meta->dmaaddr)) {
|
|
+ ring->current_slot = old_top_slot;
|
|
+ ring->used_slots = old_used_slots;
|
|
err = -EIO;
|
|
goto out_free_bounce;
|
|
}
|
|
@@ -1219,6 +1234,13 @@ int b43_dma_tx(struct b43_wldev *dev,
|
|
B43_WARN_ON(ring->stopped);
|
|
|
|
err = dma_tx_fragment(ring, skb, ctl);
|
|
+ if (unlikely(err == -ENOKEY)) {
|
|
+ /* Drop this packet, as we don't have the encryption key
|
|
+ * anymore and must not transmit it unencrypted. */
|
|
+ dev_kfree_skb_any(skb);
|
|
+ err = 0;
|
|
+ goto out_unlock;
|
|
+ }
|
|
if (unlikely(err)) {
|
|
b43err(dev->wl, "DMA tx mapping failure\n");
|
|
goto out_unlock;
|
|
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
|
|
index 1c93b4f..69795fd 100644
|
|
--- a/drivers/net/wireless/b43/main.c
|
|
+++ b/drivers/net/wireless/b43/main.c
|
|
@@ -1800,6 +1800,18 @@ static int b43_upload_microcode(struct b43_wldev *dev)
|
|
err = -EOPNOTSUPP;
|
|
goto out;
|
|
}
|
|
+ if (fwrev > 351) {
|
|
+ b43err(dev->wl, "YOUR FIRMWARE IS TOO NEW. Please downgrade your "
|
|
+ "firmware.\n");
|
|
+ b43err(dev->wl, "Use this firmware tarball: "
|
|
+ "http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2\n");
|
|
+ b43err(dev->wl, "Use this b43-fwcutter tarball: "
|
|
+ "http://bu3sch.de/b43/fwcutter/b43-fwcutter-009.tar.bz2\n");
|
|
+ b43err(dev->wl, "Read, understand and _do_ what this message says, please.\n");
|
|
+ b43_write32(dev, B43_MMIO_MACCTL, 0);
|
|
+ err = -EOPNOTSUPP;
|
|
+ goto out;
|
|
+ }
|
|
b43dbg(dev->wl, "Loading firmware version %u.%u "
|
|
"(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)\n",
|
|
fwrev, fwpatch,
|
|
@@ -3395,8 +3407,6 @@ static int b43_wireless_core_init(struct b43_wldev *dev)
|
|
b43_bluetooth_coext_enable(dev);
|
|
|
|
ssb_bus_powerup(bus, 1); /* Enable dynamic PCTL */
|
|
- memset(wl->bssid, 0, ETH_ALEN);
|
|
- memset(wl->mac_addr, 0, ETH_ALEN);
|
|
b43_upload_card_macaddress(dev);
|
|
b43_security_init(dev);
|
|
b43_rng_init(wl);
|
|
@@ -3493,6 +3503,13 @@ static int b43_start(struct ieee80211_hw *hw)
|
|
int did_init = 0;
|
|
int err = 0;
|
|
|
|
+ /* Kill all old instance specific information to make sure
|
|
+ * the card won't use it in the short timeframe between start
|
|
+ * and mac80211 reconfiguring it. */
|
|
+ memset(wl->bssid, 0, ETH_ALEN);
|
|
+ memset(wl->mac_addr, 0, ETH_ALEN);
|
|
+ wl->filter_flags = 0;
|
|
+
|
|
/* First register RFkill.
|
|
* LEDs that are registered later depend on it. */
|
|
b43_rfkill_init(dev);
|
|
diff --git a/drivers/net/wireless/b43/xmit.c b/drivers/net/wireless/b43/xmit.c
|
|
index 3307ba1..a856b9f 100644
|
|
--- a/drivers/net/wireless/b43/xmit.c
|
|
+++ b/drivers/net/wireless/b43/xmit.c
|
|
@@ -177,7 +177,7 @@ static u8 b43_calc_fallback_rate(u8 bitrate)
|
|
return 0;
|
|
}
|
|
|
|
-static void generate_txhdr_fw4(struct b43_wldev *dev,
|
|
+static int generate_txhdr_fw4(struct b43_wldev *dev,
|
|
struct b43_txhdr_fw4 *txhdr,
|
|
const unsigned char *fragment_data,
|
|
unsigned int fragment_len,
|
|
@@ -235,7 +235,15 @@ static void generate_txhdr_fw4(struct b43_wldev *dev,
|
|
|
|
B43_WARN_ON(key_idx >= dev->max_nr_keys);
|
|
key = &(dev->key[key_idx]);
|
|
- B43_WARN_ON(!key->keyconf);
|
|
+
|
|
+ if (unlikely(!key->keyconf)) {
|
|
+ /* This key is invalid. This might only happen
|
|
+ * in a short timeframe after machine resume before
|
|
+ * we were able to reconfigure keys.
|
|
+ * Drop this packet completely. Do not transmit it
|
|
+ * unencrypted to avoid leaking information. */
|
|
+ return -ENOKEY;
|
|
+ }
|
|
|
|
/* Hardware appends ICV. */
|
|
plcp_fragment_len += txctl->icv_len;
|
|
@@ -352,16 +360,18 @@ static void generate_txhdr_fw4(struct b43_wldev *dev,
|
|
txhdr->mac_ctl = cpu_to_le32(mac_ctl);
|
|
txhdr->phy_ctl = cpu_to_le16(phy_ctl);
|
|
txhdr->extra_ft = extra_ft;
|
|
+
|
|
+ return 0;
|
|
}
|
|
|
|
-void b43_generate_txhdr(struct b43_wldev *dev,
|
|
+int b43_generate_txhdr(struct b43_wldev *dev,
|
|
u8 * txhdr,
|
|
const unsigned char *fragment_data,
|
|
unsigned int fragment_len,
|
|
const struct ieee80211_tx_control *txctl, u16 cookie)
|
|
{
|
|
- generate_txhdr_fw4(dev, (struct b43_txhdr_fw4 *)txhdr,
|
|
- fragment_data, fragment_len, txctl, cookie);
|
|
+ return generate_txhdr_fw4(dev, (struct b43_txhdr_fw4 *)txhdr,
|
|
+ fragment_data, fragment_len, txctl, cookie);
|
|
}
|
|
|
|
static s8 b43_rssi_postprocess(struct b43_wldev *dev,
|
|
diff --git a/drivers/net/wireless/b43/xmit.h b/drivers/net/wireless/b43/xmit.h
|
|
index 6dc0793..e3bac08 100644
|
|
--- a/drivers/net/wireless/b43/xmit.h
|
|
+++ b/drivers/net/wireless/b43/xmit.h
|
|
@@ -82,7 +82,7 @@ struct b43_txhdr_fw4 {
|
|
#define B43_TX4_PHY_ANT1 0x0100 /* Use antenna 1 */
|
|
#define B43_TX4_PHY_ANTLAST 0x0300 /* Use last used antenna */
|
|
|
|
-void b43_generate_txhdr(struct b43_wldev *dev,
|
|
+int b43_generate_txhdr(struct b43_wldev *dev,
|
|
u8 * txhdr,
|
|
const unsigned char *fragment_data,
|
|
unsigned int fragment_len,
|
|
diff --git a/drivers/net/wireless/b43legacy/dma.c b/drivers/net/wireless/b43legacy/dma.c
|
|
index 83161d9..6e08405 100644
|
|
--- a/drivers/net/wireless/b43legacy/dma.c
|
|
+++ b/drivers/net/wireless/b43legacy/dma.c
|
|
@@ -1164,7 +1164,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
|
|
{
|
|
const struct b43legacy_dma_ops *ops = ring->ops;
|
|
u8 *header;
|
|
- int slot;
|
|
+ int slot, old_top_slot, old_used_slots;
|
|
int err;
|
|
struct b43legacy_dmadesc_generic *desc;
|
|
struct b43legacy_dmadesc_meta *meta;
|
|
@@ -1174,6 +1174,9 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
|
|
#define SLOTS_PER_PACKET 2
|
|
B43legacy_WARN_ON(skb_shinfo(skb)->nr_frags != 0);
|
|
|
|
+ old_top_slot = ring->current_slot;
|
|
+ old_used_slots = ring->used_slots;
|
|
+
|
|
/* Get a slot for the header. */
|
|
slot = request_slot(ring);
|
|
desc = ops->idx2desc(ring, slot, &meta_hdr);
|
|
@@ -1181,9 +1184,14 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
|
|
|
|
header = &(ring->txhdr_cache[slot * sizeof(
|
|
struct b43legacy_txhdr_fw3)]);
|
|
- b43legacy_generate_txhdr(ring->dev, header,
|
|
+ err = b43legacy_generate_txhdr(ring->dev, header,
|
|
skb->data, skb->len, ctl,
|
|
generate_cookie(ring, slot));
|
|
+ if (unlikely(err)) {
|
|
+ ring->current_slot = old_top_slot;
|
|
+ ring->used_slots = old_used_slots;
|
|
+ return err;
|
|
+ }
|
|
|
|
meta_hdr->dmaaddr = map_descbuffer(ring, (unsigned char *)header,
|
|
sizeof(struct b43legacy_txhdr_fw3), 1);
|
|
@@ -1206,6 +1214,8 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
|
|
if (dma_mapping_error(meta->dmaaddr)) {
|
|
bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA);
|
|
if (!bounce_skb) {
|
|
+ ring->current_slot = old_top_slot;
|
|
+ ring->used_slots = old_used_slots;
|
|
err = -ENOMEM;
|
|
goto out_unmap_hdr;
|
|
}
|
|
@@ -1216,6 +1226,8 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
|
|
meta->skb = skb;
|
|
meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
|
|
if (dma_mapping_error(meta->dmaaddr)) {
|
|
+ ring->current_slot = old_top_slot;
|
|
+ ring->used_slots = old_used_slots;
|
|
err = -EIO;
|
|
goto out_free_bounce;
|
|
}
|
|
@@ -1282,6 +1294,13 @@ int b43legacy_dma_tx(struct b43legacy_wldev *dev,
|
|
B43legacy_BUG_ON(ring->stopped);
|
|
|
|
err = dma_tx_fragment(ring, skb, ctl);
|
|
+ if (unlikely(err == -ENOKEY)) {
|
|
+ /* Drop this packet, as we don't have the encryption key
|
|
+ * anymore and must not transmit it unencrypted. */
|
|
+ dev_kfree_skb_any(skb);
|
|
+ err = 0;
|
|
+ goto out_unlock;
|
|
+ }
|
|
if (unlikely(err)) {
|
|
b43legacyerr(dev->wl, "DMA tx mapping failure\n");
|
|
goto out_unlock;
|
|
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
|
|
index 32d5e17..cdb0497 100644
|
|
--- a/drivers/net/wireless/b43legacy/main.c
|
|
+++ b/drivers/net/wireless/b43legacy/main.c
|
|
@@ -3215,8 +3215,6 @@ static int b43legacy_wireless_core_init(struct b43legacy_wldev *dev)
|
|
b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0414, 0x01F4);
|
|
|
|
ssb_bus_powerup(bus, 1); /* Enable dynamic PCTL */
|
|
- memset(wl->bssid, 0, ETH_ALEN);
|
|
- memset(wl->mac_addr, 0, ETH_ALEN);
|
|
b43legacy_upload_card_macaddress(dev);
|
|
b43legacy_security_init(dev);
|
|
b43legacy_rng_init(wl);
|
|
@@ -3311,6 +3309,13 @@ static int b43legacy_start(struct ieee80211_hw *hw)
|
|
int did_init = 0;
|
|
int err = 0;
|
|
|
|
+ /* Kill all old instance specific information to make sure
|
|
+ * the card won't use it in the short timeframe between start
|
|
+ * and mac80211 reconfiguring it. */
|
|
+ memset(wl->bssid, 0, ETH_ALEN);
|
|
+ memset(wl->mac_addr, 0, ETH_ALEN);
|
|
+ wl->filter_flags = 0;
|
|
+
|
|
mutex_lock(&wl->mutex);
|
|
|
|
if (b43legacy_status(dev) < B43legacy_STAT_INITIALIZED) {
|
|
diff --git a/drivers/net/wireless/b43legacy/pio.c b/drivers/net/wireless/b43legacy/pio.c
|
|
index de843ac..3034503 100644
|
|
--- a/drivers/net/wireless/b43legacy/pio.c
|
|
+++ b/drivers/net/wireless/b43legacy/pio.c
|
|
@@ -181,7 +181,7 @@ union txhdr_union {
|
|
struct b43legacy_txhdr_fw3 txhdr_fw3;
|
|
};
|
|
|
|
-static void pio_tx_write_fragment(struct b43legacy_pioqueue *queue,
|
|
+static int pio_tx_write_fragment(struct b43legacy_pioqueue *queue,
|
|
struct sk_buff *skb,
|
|
struct b43legacy_pio_txpacket *packet,
|
|
size_t txhdr_size)
|
|
@@ -189,14 +189,17 @@ static void pio_tx_write_fragment(struct b43legacy_pioqueue *queue,
|
|
union txhdr_union txhdr_data;
|
|
u8 *txhdr = NULL;
|
|
unsigned int octets;
|
|
+ int err;
|
|
|
|
txhdr = (u8 *)(&txhdr_data.txhdr_fw3);
|
|
|
|
B43legacy_WARN_ON(skb_shinfo(skb)->nr_frags != 0);
|
|
- b43legacy_generate_txhdr(queue->dev,
|
|
+ err = b43legacy_generate_txhdr(queue->dev,
|
|
txhdr, skb->data, skb->len,
|
|
&packet->txstat.control,
|
|
generate_cookie(queue, packet));
|
|
+ if (err)
|
|
+ return err;
|
|
|
|
tx_start(queue);
|
|
octets = skb->len + txhdr_size;
|
|
@@ -204,6 +207,8 @@ static void pio_tx_write_fragment(struct b43legacy_pioqueue *queue,
|
|
octets--;
|
|
tx_data(queue, txhdr, (u8 *)skb->data, octets);
|
|
tx_complete(queue, skb);
|
|
+
|
|
+ return 0;
|
|
}
|
|
|
|
static void free_txpacket(struct b43legacy_pio_txpacket *packet,
|
|
@@ -226,6 +231,7 @@ static int pio_tx_packet(struct b43legacy_pio_txpacket *packet)
|
|
struct b43legacy_pioqueue *queue = packet->queue;
|
|
struct sk_buff *skb = packet->skb;
|
|
u16 octets;
|
|
+ int err;
|
|
|
|
octets = (u16)skb->len + sizeof(struct b43legacy_txhdr_fw3);
|
|
if (queue->tx_devq_size < octets) {
|
|
@@ -247,8 +253,14 @@ static int pio_tx_packet(struct b43legacy_pio_txpacket *packet)
|
|
if (queue->tx_devq_used + octets > queue->tx_devq_size)
|
|
return -EBUSY;
|
|
/* Now poke the device. */
|
|
- pio_tx_write_fragment(queue, skb, packet,
|
|
+ err = pio_tx_write_fragment(queue, skb, packet,
|
|
sizeof(struct b43legacy_txhdr_fw3));
|
|
+ if (unlikely(err == -ENOKEY)) {
|
|
+ /* Drop this packet, as we don't have the encryption key
|
|
+ * anymore and must not transmit it unencrypted. */
|
|
+ free_txpacket(packet, 1);
|
|
+ return 0;
|
|
+ }
|
|
|
|
/* Account for the packet size.
|
|
* (We must not overflow the device TX queue)
|
|
@@ -486,6 +498,9 @@ void b43legacy_pio_handle_txstatus(struct b43legacy_wldev *dev,
|
|
queue = parse_cookie(dev, status->cookie, &packet);
|
|
B43legacy_WARN_ON(!queue);
|
|
|
|
+ if (!packet->skb)
|
|
+ return;
|
|
+
|
|
queue->tx_devq_packets--;
|
|
queue->tx_devq_used -= (packet->skb->len +
|
|
sizeof(struct b43legacy_txhdr_fw3));
|
|
diff --git a/drivers/net/wireless/b43legacy/xmit.c b/drivers/net/wireless/b43legacy/xmit.c
|
|
index fa1e656..f10d637 100644
|
|
--- a/drivers/net/wireless/b43legacy/xmit.c
|
|
+++ b/drivers/net/wireless/b43legacy/xmit.c
|
|
@@ -181,7 +181,7 @@ static u8 b43legacy_calc_fallback_rate(u8 bitrate)
|
|
return 0;
|
|
}
|
|
|
|
-static void generate_txhdr_fw3(struct b43legacy_wldev *dev,
|
|
+static int generate_txhdr_fw3(struct b43legacy_wldev *dev,
|
|
struct b43legacy_txhdr_fw3 *txhdr,
|
|
const unsigned char *fragment_data,
|
|
unsigned int fragment_len,
|
|
@@ -252,6 +252,13 @@ static void generate_txhdr_fw3(struct b43legacy_wldev *dev,
|
|
iv_len = min((size_t)txctl->iv_len,
|
|
ARRAY_SIZE(txhdr->iv));
|
|
memcpy(txhdr->iv, ((u8 *)wlhdr) + wlhdr_len, iv_len);
|
|
+ } else {
|
|
+ /* This key is invalid. This might only happen
|
|
+ * in a short timeframe after machine resume before
|
|
+ * we were able to reconfigure keys.
|
|
+ * Drop this packet completely. Do not transmit it
|
|
+ * unencrypted to avoid leaking information. */
|
|
+ return -ENOKEY;
|
|
}
|
|
}
|
|
b43legacy_generate_plcp_hdr((struct b43legacy_plcp_hdr4 *)
|
|
@@ -344,16 +351,18 @@ static void generate_txhdr_fw3(struct b43legacy_wldev *dev,
|
|
/* Apply the bitfields */
|
|
txhdr->mac_ctl = cpu_to_le32(mac_ctl);
|
|
txhdr->phy_ctl = cpu_to_le16(phy_ctl);
|
|
+
|
|
+ return 0;
|
|
}
|
|
|
|
-void b43legacy_generate_txhdr(struct b43legacy_wldev *dev,
|
|
+int b43legacy_generate_txhdr(struct b43legacy_wldev *dev,
|
|
u8 *txhdr,
|
|
const unsigned char *fragment_data,
|
|
unsigned int fragment_len,
|
|
const struct ieee80211_tx_control *txctl,
|
|
u16 cookie)
|
|
{
|
|
- generate_txhdr_fw3(dev, (struct b43legacy_txhdr_fw3 *)txhdr,
|
|
+ return generate_txhdr_fw3(dev, (struct b43legacy_txhdr_fw3 *)txhdr,
|
|
fragment_data, fragment_len,
|
|
txctl, cookie);
|
|
}
|
|
diff --git a/drivers/net/wireless/b43legacy/xmit.h b/drivers/net/wireless/b43legacy/xmit.h
|
|
index 8a155d0..bab4792 100644
|
|
--- a/drivers/net/wireless/b43legacy/xmit.h
|
|
+++ b/drivers/net/wireless/b43legacy/xmit.h
|
|
@@ -76,7 +76,7 @@ struct b43legacy_txhdr_fw3 {
|
|
|
|
|
|
|
|
-void b43legacy_generate_txhdr(struct b43legacy_wldev *dev,
|
|
+int b43legacy_generate_txhdr(struct b43legacy_wldev *dev,
|
|
u8 *txhdr,
|
|
const unsigned char *fragment_data,
|
|
unsigned int fragment_len,
|
|
diff --git a/drivers/pci/hotplug/fakephp.c b/drivers/pci/hotplug/fakephp.c
|
|
index d7a293e..94b6401 100644
|
|
--- a/drivers/pci/hotplug/fakephp.c
|
|
+++ b/drivers/pci/hotplug/fakephp.c
|
|
@@ -39,6 +39,7 @@
|
|
#include <linux/init.h>
|
|
#include <linux/string.h>
|
|
#include <linux/slab.h>
|
|
+#include <linux/workqueue.h>
|
|
#include "../pci.h"
|
|
|
|
#if !defined(MODULE)
|
|
@@ -63,10 +64,16 @@ struct dummy_slot {
|
|
struct list_head node;
|
|
struct hotplug_slot *slot;
|
|
struct pci_dev *dev;
|
|
+ struct work_struct remove_work;
|
|
+ unsigned long removed;
|
|
};
|
|
|
|
static int debug;
|
|
static LIST_HEAD(slot_list);
|
|
+static struct workqueue_struct *dummyphp_wq;
|
|
+
|
|
+static void pci_rescan_worker(struct work_struct *work);
|
|
+static DECLARE_WORK(pci_rescan_work, pci_rescan_worker);
|
|
|
|
static int enable_slot (struct hotplug_slot *slot);
|
|
static int disable_slot (struct hotplug_slot *slot);
|
|
@@ -109,7 +116,7 @@ static int add_slot(struct pci_dev *dev)
|
|
slot->name = &dev->dev.bus_id[0];
|
|
dbg("slot->name = %s\n", slot->name);
|
|
|
|
- dslot = kmalloc(sizeof(struct dummy_slot), GFP_KERNEL);
|
|
+ dslot = kzalloc(sizeof(struct dummy_slot), GFP_KERNEL);
|
|
if (!dslot)
|
|
goto error_info;
|
|
|
|
@@ -164,6 +171,14 @@ static void remove_slot(struct dummy_slot *dslot)
|
|
err("Problem unregistering a slot %s\n", dslot->slot->name);
|
|
}
|
|
|
|
+/* called from the single-threaded workqueue handler to remove a slot */
|
|
+static void remove_slot_worker(struct work_struct *work)
|
|
+{
|
|
+ struct dummy_slot *dslot =
|
|
+ container_of(work, struct dummy_slot, remove_work);
|
|
+ remove_slot(dslot);
|
|
+}
|
|
+
|
|
/**
|
|
* pci_rescan_slot - Rescan slot
|
|
* @temp: Device template. Should be set: bus and devfn.
|
|
@@ -267,11 +282,17 @@ static inline void pci_rescan(void) {
|
|
pci_rescan_buses(&pci_root_buses);
|
|
}
|
|
|
|
+/* called from the single-threaded workqueue handler to rescan all pci buses */
|
|
+static void pci_rescan_worker(struct work_struct *work)
|
|
+{
|
|
+ pci_rescan();
|
|
+}
|
|
|
|
static int enable_slot(struct hotplug_slot *hotplug_slot)
|
|
{
|
|
/* mis-use enable_slot for rescanning of the pci bus */
|
|
- pci_rescan();
|
|
+ cancel_work_sync(&pci_rescan_work);
|
|
+ queue_work(dummyphp_wq, &pci_rescan_work);
|
|
return -ENODEV;
|
|
}
|
|
|
|
@@ -306,6 +327,10 @@ static int disable_slot(struct hotplug_slot *slot)
|
|
err("Can't remove PCI devices with other PCI devices behind it yet.\n");
|
|
return -ENODEV;
|
|
}
|
|
+ if (test_and_set_bit(0, &dslot->removed)) {
|
|
+ dbg("Slot already scheduled for removal\n");
|
|
+ return -ENODEV;
|
|
+ }
|
|
/* search for subfunctions and disable them first */
|
|
if (!(dslot->dev->devfn & 7)) {
|
|
for (func = 1; func < 8; func++) {
|
|
@@ -328,8 +353,9 @@ static int disable_slot(struct hotplug_slot *slot)
|
|
/* remove the device from the pci core */
|
|
pci_remove_bus_device(dslot->dev);
|
|
|
|
- /* blow away this sysfs entry and other parts. */
|
|
- remove_slot(dslot);
|
|
+ /* queue work item to blow away this sysfs entry and other parts. */
|
|
+ INIT_WORK(&dslot->remove_work, remove_slot_worker);
|
|
+ queue_work(dummyphp_wq, &dslot->remove_work);
|
|
|
|
return 0;
|
|
}
|
|
@@ -340,6 +366,7 @@ static void cleanup_slots (void)
|
|
struct list_head *next;
|
|
struct dummy_slot *dslot;
|
|
|
|
+ destroy_workqueue(dummyphp_wq);
|
|
list_for_each_safe (tmp, next, &slot_list) {
|
|
dslot = list_entry (tmp, struct dummy_slot, node);
|
|
remove_slot(dslot);
|
|
@@ -351,6 +378,10 @@ static int __init dummyphp_init(void)
|
|
{
|
|
info(DRIVER_DESC "\n");
|
|
|
|
+ dummyphp_wq = create_singlethread_workqueue(MY_NAME);
|
|
+ if (!dummyphp_wq)
|
|
+ return -ENOMEM;
|
|
+
|
|
return pci_scan_buses();
|
|
}
|
|
|
|
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
|
|
index c51f8e9..b469718 100644
|
|
--- a/drivers/usb/core/driver.c
|
|
+++ b/drivers/usb/core/driver.c
|
|
@@ -534,8 +534,8 @@ const struct usb_device_id *usb_match_id(struct usb_interface *interface,
|
|
id->driver_info is the way to create an entry that
|
|
indicates that the driver want to examine every
|
|
device and interface. */
|
|
- for (; id->idVendor || id->bDeviceClass || id->bInterfaceClass ||
|
|
- id->driver_info; id++) {
|
|
+ for (; id->idVendor || id->idProduct || id->bDeviceClass ||
|
|
+ id->bInterfaceClass || id->driver_info; id++) {
|
|
if (usb_match_one_id(interface, id))
|
|
return id;
|
|
}
|
|
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
|
|
index b04d232..1b17f63 100644
|
|
--- a/drivers/usb/core/hub.c
|
|
+++ b/drivers/usb/core/hub.c
|
|
@@ -2946,7 +2946,7 @@ static int config_descriptors_changed(struct usb_device *udev)
|
|
if (len < le16_to_cpu(udev->config[index].desc.wTotalLength))
|
|
len = le16_to_cpu(udev->config[index].desc.wTotalLength);
|
|
}
|
|
- buf = kmalloc (len, GFP_KERNEL);
|
|
+ buf = kmalloc(len, GFP_NOIO);
|
|
if (buf == NULL) {
|
|
dev_err(&udev->dev, "no mem to re-read configs after reset\n");
|
|
/* assume the worst */
|
|
diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
|
|
index 038e7d7..d59eb92 100644
|
|
--- a/drivers/usb/gadget/fsl_usb2_udc.c
|
|
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
|
|
@@ -776,7 +776,7 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
|
|
VDBG("%s, bad params\n", __FUNCTION__);
|
|
return -EINVAL;
|
|
}
|
|
- if (!_ep || (!ep->desc && ep_index(ep))) {
|
|
+ if (unlikely(!_ep || !ep->desc)) {
|
|
VDBG("%s, bad ep\n", __FUNCTION__);
|
|
return -EINVAL;
|
|
}
|
|
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
|
|
index ea31621..81755d0 100644
|
|
--- a/drivers/usb/misc/usbtest.c
|
|
+++ b/drivers/usb/misc/usbtest.c
|
|
@@ -1151,6 +1151,7 @@ static int verify_halted (int ep, struct urb *urb)
|
|
dbg ("ep %02x couldn't get halt status, %d", ep, retval);
|
|
return retval;
|
|
}
|
|
+ le16_to_cpus(&status);
|
|
if (status != 1) {
|
|
dbg ("ep %02x bogus status: %04x != 1", ep, status);
|
|
return -EINVAL;
|
|
diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c
|
|
index 2283358..cd5f71b 100644
|
|
--- a/drivers/usb/serial/cp2101.c
|
|
+++ b/drivers/usb/serial/cp2101.c
|
|
@@ -59,6 +59,7 @@ static struct usb_device_id id_table [] = {
|
|
{ USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */
|
|
{ USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */
|
|
{ USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */
|
|
+ { USB_DEVICE(0x10C4, 0x800A) }, /* SPORTident BSM7-D-USB main station */
|
|
{ USB_DEVICE(0x10C4, 0x803B) }, /* Pololu USB-serial converter */
|
|
{ USB_DEVICE(0x10C4, 0x8053) }, /* Enfora EDG1228 */
|
|
{ USB_DEVICE(0x10C4, 0x8066) }, /* Argussoft In-System Programmer */
|
|
@@ -76,8 +77,13 @@ static struct usb_device_id id_table [] = {
|
|
{ USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */
|
|
{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
|
|
{ USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
|
|
+ { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */
|
|
+ { USB_DEVICE(0x10C4, 0xF002) }, /* Elan Digital Systems USBwave12 */
|
|
+ { USB_DEVICE(0x10C4, 0xF003) }, /* Elan Digital Systems USBpulse100 */
|
|
+ { USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */
|
|
{ USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */
|
|
{ USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
|
|
+ { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */
|
|
{ USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
|
|
{ } /* Terminating Entry */
|
|
};
|
|
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
|
|
index c40e77d..1382af9 100644
|
|
--- a/drivers/usb/serial/ftdi_sio.c
|
|
+++ b/drivers/usb/serial/ftdi_sio.c
|
|
@@ -471,30 +471,28 @@ static struct usb_device_id id_table_combined [] = {
|
|
{ USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) },
|
|
{ USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) },
|
|
/*
|
|
- * These will probably use user-space drivers. Uncomment them if
|
|
- * you need them or use the user-specified vendor/product module
|
|
- * parameters (see ftdi_sio.h for the numbers). Make a fuss if
|
|
- * you think the driver should recognize any of them by default.
|
|
+ * Due to many user requests for multiple ELV devices we enable
|
|
+ * them by default.
|
|
*/
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UDF77_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UIO88_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UAD8_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UDA7_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_USI2_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_T1100_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_PCD200_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_ULA200_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_CSI8_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1000DL_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) }, */
|
|
- /* { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) }, */
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_UDF77_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_UIO88_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_UAD8_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_UDA7_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_USI2_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_T1100_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_PCD200_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_ULA200_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_CSI8_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1000DL_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) },
|
|
{ USB_DEVICE(FTDI_VID, LINX_SDMUSBQSS_PID) },
|
|
{ USB_DEVICE(FTDI_VID, LINX_MASTERDEVEL2_PID) },
|
|
{ USB_DEVICE(FTDI_VID, LINX_FUTURE_0_PID) },
|
|
@@ -545,6 +543,7 @@ static struct usb_device_id id_table_combined [] = {
|
|
{ USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16C_PID) },
|
|
{ USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HR_PID) },
|
|
{ USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HRC_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16IC_PID) },
|
|
{ USB_DEVICE(KOBIL_VID, KOBIL_CONV_B1_PID) },
|
|
{ USB_DEVICE(KOBIL_VID, KOBIL_CONV_KAAN_PID) },
|
|
{ USB_DEVICE(POSIFLEX_VID, POSIFLEX_PP7000_PID) },
|
|
@@ -569,6 +568,7 @@ static struct usb_device_id id_table_combined [] = {
|
|
{ USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
|
|
{ USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
|
|
{ USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_ELSTER_UNICOM_PID) },
|
|
{ USB_DEVICE(OLIMEX_VID, OLIMEX_ARM_USB_OCD_PID),
|
|
.driver_info = (kernel_ulong_t)&ftdi_olimex_quirk },
|
|
{ }, /* Optional parameter entry */
|
|
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h
|
|
index b51cbb0..f6053da 100644
|
|
--- a/drivers/usb/serial/ftdi_sio.h
|
|
+++ b/drivers/usb/serial/ftdi_sio.h
|
|
@@ -245,6 +245,7 @@
|
|
#define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */
|
|
#define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */
|
|
#define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */
|
|
+#define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */
|
|
|
|
/*
|
|
* Definitions for ID TECH (www.idt-net.com) devices
|
|
@@ -278,6 +279,7 @@
|
|
#define FTDI_ATIK_ATK16C_PID 0xDF32 /* ATIK ATK-16C Colour Camera */
|
|
#define FTDI_ATIK_ATK16HR_PID 0xDF31 /* ATIK ATK-16HR Grayscale Camera */
|
|
#define FTDI_ATIK_ATK16HRC_PID 0xDF33 /* ATIK ATK-16HRC Colour Camera */
|
|
+#define FTDI_ATIK_ATK16IC_PID 0xDF35 /* ATIK ATK-16IC Grayscale Camera */
|
|
|
|
/*
|
|
* Protego product ids
|
|
@@ -534,6 +536,8 @@
|
|
#define OLIMEX_VID 0x15BA
|
|
#define OLIMEX_ARM_USB_OCD_PID 0x0003
|
|
|
|
+/* www.elsterelectricity.com Elster Unicom III Optical Probe */
|
|
+#define FTDI_ELSTER_UNICOM_PID 0xE700 /* Product Id */
|
|
|
|
/*
|
|
* The Mobility Lab (TML)
|
|
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
|
|
index 7c069a0..ea7bba6 100644
|
|
--- a/drivers/usb/serial/keyspan.c
|
|
+++ b/drivers/usb/serial/keyspan.c
|
|
@@ -838,7 +838,7 @@ static void usa49_indat_callback(struct urb *urb)
|
|
|
|
port = (struct usb_serial_port *) urb->context;
|
|
tty = port->tty;
|
|
- if (urb->actual_length) {
|
|
+ if (tty && urb->actual_length) {
|
|
/* 0x80 bit is error flag */
|
|
if ((data[0] & 0x80) == 0) {
|
|
/* no error on any byte */
|
|
diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
|
|
index aee4502..17b3bae 100644
|
|
--- a/drivers/usb/serial/kobil_sct.c
|
|
+++ b/drivers/usb/serial/kobil_sct.c
|
|
@@ -114,6 +114,7 @@ static struct usb_serial_driver kobil_device = {
|
|
.usb_driver = &kobil_driver,
|
|
.id_table = id_table,
|
|
.num_interrupt_in = NUM_DONT_CARE,
|
|
+ .num_interrupt_out = NUM_DONT_CARE,
|
|
.num_bulk_in = 0,
|
|
.num_bulk_out = 0,
|
|
.num_ports = 1,
|
|
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
|
index d1185f5..bbbe1b9 100644
|
|
--- a/drivers/usb/serial/option.c
|
|
+++ b/drivers/usb/serial/option.c
|
|
@@ -180,6 +180,7 @@ static struct usb_device_id option_ids[] = {
|
|
{ USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
|
|
{ USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
|
|
{ USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */
|
|
+ { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
|
|
{ USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */
|
|
{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) },
|
|
{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
|
|
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
|
|
index 0da1df9..b7da8b5 100644
|
|
--- a/drivers/usb/serial/pl2303.c
|
|
+++ b/drivers/usb/serial/pl2303.c
|
|
@@ -65,6 +65,7 @@ static struct usb_device_id id_table [] = {
|
|
{ USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
|
|
{ USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
|
|
{ USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
|
|
+ { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) },
|
|
{ USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
|
|
{ USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
|
|
{ USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
|
|
@@ -84,9 +85,10 @@ static struct usb_device_id id_table [] = {
|
|
{ USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
|
|
{ USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
|
|
{ USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
|
|
- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ID) },
|
|
{ USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
|
|
{ USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
|
|
+ { USB_DEVICE(HL340_VENDOR_ID, HL340_PRODUCT_ID) },
|
|
+ { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
|
|
{ } /* Terminating entry */
|
|
};
|
|
|
|
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
|
|
index d31f5d2..237a41f 100644
|
|
--- a/drivers/usb/serial/pl2303.h
|
|
+++ b/drivers/usb/serial/pl2303.h
|
|
@@ -35,6 +35,7 @@
|
|
|
|
#define RATOC_VENDOR_ID 0x0584
|
|
#define RATOC_PRODUCT_ID 0xb000
|
|
+#define RATOC_PRODUCT_ID_USB60F 0xb020
|
|
|
|
#define TRIPP_VENDOR_ID 0x2478
|
|
#define TRIPP_PRODUCT_ID 0x2008
|
|
@@ -96,10 +97,6 @@
|
|
#define ALCOR_VENDOR_ID 0x058F
|
|
#define ALCOR_PRODUCT_ID 0x9720
|
|
|
|
-/* Huawei E620 UMTS/HSDPA card (ID: 12d1:1001) */
|
|
-#define HUAWEI_VENDOR_ID 0x12d1
|
|
-#define HUAWEI_PRODUCT_ID 0x1001
|
|
-
|
|
/* Willcom WS002IN Data Driver (by NetIndex Inc.) */
|
|
#define WS002IN_VENDOR_ID 0x11f6
|
|
#define WS002IN_PRODUCT_ID 0x2001
|
|
@@ -107,3 +104,11 @@
|
|
/* Corega CG-USBRS232R Serial Adapter */
|
|
#define COREGA_VENDOR_ID 0x07aa
|
|
#define COREGA_PRODUCT_ID 0x002a
|
|
+
|
|
+/* HL HL-340 (ID: 4348:5523) */
|
|
+#define HL340_VENDOR_ID 0x4348
|
|
+#define HL340_PRODUCT_ID 0x5523
|
|
+
|
|
+/* Y.C. Cable U.S.A., Inc - USB to RS-232 */
|
|
+#define YCCABLE_VENDOR_ID 0x05ad
|
|
+#define YCCABLE_PRODUCT_ID 0x0fba
|
|
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
|
|
index c295d04..b4d7ac9 100644
|
|
--- a/drivers/usb/serial/sierra.c
|
|
+++ b/drivers/usb/serial/sierra.c
|
|
@@ -104,6 +104,7 @@ static struct usb_device_id id_table [] = {
|
|
{ USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */
|
|
{ USB_DEVICE(0x1199, 0x0021) }, /* Sierra Wireless AirCard 597E */
|
|
{ USB_DEVICE(0x1199, 0x0120) }, /* Sierra Wireless USB Dongle 595U */
|
|
+ { USB_DEVICE(0x1199, 0x0023) }, /* Sierra Wireless AirCard */
|
|
|
|
{ USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
|
|
{ USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */
|
|
@@ -117,9 +118,15 @@ static struct usb_device_id id_table [] = {
|
|
{ USB_DEVICE(0x1199, 0x6851) }, /* Sierra Wireless AirCard 881 */
|
|
{ USB_DEVICE(0x1199, 0x6852) }, /* Sierra Wireless AirCard 880 E */
|
|
{ USB_DEVICE(0x1199, 0x6853) }, /* Sierra Wireless AirCard 881 E */
|
|
+ { USB_DEVICE(0x1199, 0x6855) }, /* Sierra Wireless AirCard 880 U */
|
|
+ { USB_DEVICE(0x1199, 0x6856) }, /* Sierra Wireless AirCard 881 U */
|
|
+
|
|
+ { USB_DEVICE(0x1199, 0x6468) }, /* Sierra Wireless MP3G - EVDO */
|
|
+ { USB_DEVICE(0x1199, 0x6469) }, /* Sierra Wireless MP3G - UMTS/HSPA */
|
|
|
|
{ USB_DEVICE(0x1199, 0x0112), .driver_info = DEVICE_1_PORT }, /* Sierra Wireless AirCard 580 */
|
|
{ USB_DEVICE(0x0F3D, 0x0112), .driver_info = DEVICE_1_PORT }, /* Airprime/Sierra PC 5220 */
|
|
+ { USB_DEVICE(0x05C6, 0x6613), .driver_info = DEVICE_1_PORT }, /* Onda H600/ZTE MF330 */
|
|
|
|
{ USB_DEVICE(0x1199, 0x0FFF), .driver_info = DEVICE_INSTALLER},
|
|
{ }
|
|
@@ -129,6 +136,7 @@ MODULE_DEVICE_TABLE(usb, id_table);
|
|
static struct usb_device_id id_table_1port [] = {
|
|
{ USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */
|
|
{ USB_DEVICE(0x0F3D, 0x0112) }, /* AirPrime/Sierra PC 5220 */
|
|
+ { USB_DEVICE(0x05C6, 0x6613) }, /* Onda H600/ZTE MF330 */
|
|
{ }
|
|
};
|
|
|
|
@@ -142,6 +150,7 @@ static struct usb_device_id id_table_3port [] = {
|
|
{ USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */
|
|
{ USB_DEVICE(0x1199, 0x0021) }, /* Sierra Wireless AirCard 597E */
|
|
{ USB_DEVICE(0x1199, 0x0120) }, /* Sierra Wireless USB Dongle 595U*/
|
|
+ { USB_DEVICE(0x1199, 0x0023) }, /* Sierra Wireless AirCard */
|
|
|
|
{ USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
|
|
{ USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */
|
|
@@ -155,6 +164,10 @@ static struct usb_device_id id_table_3port [] = {
|
|
{ USB_DEVICE(0x1199, 0x6851) }, /* Sierra Wireless AirCard 881 */
|
|
{ USB_DEVICE(0x1199, 0x6852) }, /* Sierra Wireless AirCard 880E */
|
|
{ USB_DEVICE(0x1199, 0x6853) }, /* Sierra Wireless AirCard 881E */
|
|
+ { USB_DEVICE(0x1199, 0x6855) }, /* Sierra Wireless AirCard 880 U */
|
|
+ { USB_DEVICE(0x1199, 0x6856) }, /* Sierra Wireless AirCard 881U */
|
|
+ { USB_DEVICE(0x1199, 0x6468) }, /* Sierra Wireless MP3G - EVDO */
|
|
+ { USB_DEVICE(0x1199, 0x6469) }, /* Sierra Wireless MP3G - UMTS/HSPA */
|
|
{ }
|
|
};
|
|
|
|
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
|
|
index 6d6108b..fe12737 100644
|
|
--- a/drivers/usb/storage/unusual_devs.h
|
|
+++ b/drivers/usb/storage/unusual_devs.h
|
|
@@ -86,6 +86,14 @@ UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001,
|
|
US_SC_8070, US_PR_USBAT, init_usbat_cd, 0),
|
|
#endif
|
|
|
|
+/* Reported by Grant Grundler <grundler@parisc-linux.org>
|
|
+ * HP r707 camera in "Disk" mode with 2.00.23 or 2.00.24 firmware.
|
|
+ */
|
|
+UNUSUAL_DEV( 0x03f0, 0x4002, 0x0001, 0x0001,
|
|
+ "HP",
|
|
+ "PhotoSmart R707",
|
|
+ US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_CAPACITY),
|
|
+
|
|
/* Reported by Sebastian Kapfer <sebastian_kapfer@gmx.net>
|
|
* and Olaf Hering <olh@suse.de> (different bcd's, same vendor/product)
|
|
* for USB floppies that need the SINGLE_LUN enforcement.
|
|
diff --git a/fs/eventpoll.c b/fs/eventpoll.c
|
|
index 34f68f3..0a98389 100644
|
|
--- a/fs/eventpoll.c
|
|
+++ b/fs/eventpoll.c
|
|
@@ -353,7 +353,7 @@ static void ep_poll_safewake(struct poll_safewake *psw, wait_queue_head_t *wq)
|
|
spin_unlock_irqrestore(&psw->lock, flags);
|
|
|
|
/* Do really wake up now */
|
|
- wake_up(wq);
|
|
+ wake_up_nested(wq, 1 + wake_nests);
|
|
|
|
/* Remove the current task from the list */
|
|
spin_lock_irqsave(&psw->lock, flags);
|
|
diff --git a/fs/ncpfs/mmap.c b/fs/ncpfs/mmap.c
|
|
index a94473d..5d8dcb9 100644
|
|
--- a/fs/ncpfs/mmap.c
|
|
+++ b/fs/ncpfs/mmap.c
|
|
@@ -50,10 +50,6 @@ static int ncp_file_mmap_fault(struct vm_area_struct *area,
|
|
pos = vmf->pgoff << PAGE_SHIFT;
|
|
|
|
count = PAGE_SIZE;
|
|
- if ((unsigned long)vmf->virtual_address + PAGE_SIZE > area->vm_end) {
|
|
- WARN_ON(1); /* shouldn't happen? */
|
|
- count = area->vm_end - (unsigned long)vmf->virtual_address;
|
|
- }
|
|
/* what we can read in one go */
|
|
bufsize = NCP_SERVER(inode)->buffer_size;
|
|
|
|
diff --git a/fs/splice.c b/fs/splice.c
|
|
index 6bdcb61..e313478 100644
|
|
--- a/fs/splice.c
|
|
+++ b/fs/splice.c
|
|
@@ -1184,6 +1184,9 @@ static int copy_from_user_mmap_sem(void *dst, const void __user *src, size_t n)
|
|
{
|
|
int partial;
|
|
|
|
+ if (!access_ok(VERIFY_READ, src, n))
|
|
+ return -EFAULT;
|
|
+
|
|
pagefault_disable();
|
|
partial = __copy_from_user_inatomic(dst, src, n);
|
|
pagefault_enable();
|
|
@@ -1236,7 +1239,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
|
|
if (unlikely(!len))
|
|
break;
|
|
error = -EFAULT;
|
|
- if (unlikely(!base))
|
|
+ if (!access_ok(VERIFY_READ, base, len))
|
|
break;
|
|
|
|
/*
|
|
@@ -1392,6 +1395,11 @@ static long vmsplice_to_user(struct file *file, const struct iovec __user *iov,
|
|
break;
|
|
}
|
|
|
|
+ if (unlikely(!access_ok(VERIFY_WRITE, base, len))) {
|
|
+ error = -EFAULT;
|
|
+ break;
|
|
+ }
|
|
+
|
|
sd.len = 0;
|
|
sd.total_len = len;
|
|
sd.flags = flags;
|
|
diff --git a/include/linux/dmi.h b/include/linux/dmi.h
|
|
index 5b42a65..b1251b2 100644
|
|
--- a/include/linux/dmi.h
|
|
+++ b/include/linux/dmi.h
|
|
@@ -79,7 +79,6 @@ extern void dmi_scan_machine(void);
|
|
extern int dmi_get_year(int field);
|
|
extern int dmi_name_in_vendors(const char *str);
|
|
extern int dmi_available;
|
|
-extern char *dmi_get_slot(int slot);
|
|
|
|
#else
|
|
|
|
@@ -90,7 +89,6 @@ static inline const struct dmi_device * dmi_find_device(int type, const char *na
|
|
static inline int dmi_get_year(int year) { return 0; }
|
|
static inline int dmi_name_in_vendors(const char *s) { return 0; }
|
|
#define dmi_available 0
|
|
-static inline char *dmi_get_slot(int slot) { return NULL; }
|
|
|
|
#endif
|
|
|
|
diff --git a/include/linux/wait.h b/include/linux/wait.h
|
|
index 0e68628..8eb6420 100644
|
|
--- a/include/linux/wait.h
|
|
+++ b/include/linux/wait.h
|
|
@@ -161,6 +161,22 @@ wait_queue_head_t *FASTCALL(bit_waitqueue(void *, int));
|
|
#define wake_up_locked(x) __wake_up_locked((x), TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE)
|
|
#define wake_up_interruptible_sync(x) __wake_up_sync((x),TASK_INTERRUPTIBLE, 1)
|
|
|
|
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
|
+/*
|
|
+ * macro to avoid include hell
|
|
+ */
|
|
+#define wake_up_nested(x, s) \
|
|
+do { \
|
|
+ unsigned long flags; \
|
|
+ \
|
|
+ spin_lock_irqsave_nested(&(x)->lock, flags, (s)); \
|
|
+ wake_up_locked(x); \
|
|
+ spin_unlock_irqrestore(&(x)->lock, flags); \
|
|
+} while (0)
|
|
+#else
|
|
+#define wake_up_nested(x, s) wake_up(x)
|
|
+#endif
|
|
+
|
|
#define __wait_event(wq, condition) \
|
|
do { \
|
|
DEFINE_WAIT(__wait); \
|
|
diff --git a/kernel/relay.c b/kernel/relay.c
|
|
index 61134eb..7c03733 100644
|
|
--- a/kernel/relay.c
|
|
+++ b/kernel/relay.c
|
|
@@ -92,6 +92,7 @@ static int relay_mmap_buf(struct rchan_buf *buf, struct vm_area_struct *vma)
|
|
return -EINVAL;
|
|
|
|
vma->vm_ops = &relay_file_mmap_ops;
|
|
+ vma->vm_flags |= VM_DONTEXPAND;
|
|
vma->vm_private_data = buf;
|
|
buf->chan->cb->buf_mapped(buf, filp);
|
|
|
|
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
|
|
index da7c061..2288ad8 100644
|
|
--- a/kernel/sched_fair.c
|
|
+++ b/kernel/sched_fair.c
|
|
@@ -511,7 +511,7 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial)
|
|
|
|
if (!initial) {
|
|
/* sleeps upto a single latency don't count. */
|
|
- if (sched_feat(NEW_FAIR_SLEEPERS) && entity_is_task(se))
|
|
+ if (sched_feat(NEW_FAIR_SLEEPERS))
|
|
vruntime -= sysctl_sched_latency;
|
|
|
|
/* ensure we never gain time by being placed backwards. */
|
|
@@ -867,7 +867,11 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p)
|
|
}
|
|
|
|
gran = sysctl_sched_wakeup_granularity;
|
|
- if (unlikely(se->load.weight != NICE_0_LOAD))
|
|
+ /*
|
|
+ * More easily preempt - nice tasks, while not making
|
|
+ * it harder for + nice tasks.
|
|
+ */
|
|
+ if (unlikely(se->load.weight > NICE_0_LOAD))
|
|
gran = calc_delta_fair(gran, &se->load);
|
|
|
|
if (pse->vruntime + gran < se->vruntime)
|
|
diff --git a/mm/filemap.c b/mm/filemap.c
|
|
index f4d0cde..69430d2 100644
|
|
--- a/mm/filemap.c
|
|
+++ b/mm/filemap.c
|
|
@@ -1733,7 +1733,11 @@ static void __iov_iter_advance_iov(struct iov_iter *i, size_t bytes)
|
|
const struct iovec *iov = i->iov;
|
|
size_t base = i->iov_offset;
|
|
|
|
- while (bytes) {
|
|
+ /*
|
|
+ * The !iov->iov_len check ensures we skip over unlikely
|
|
+ * zero-length segments.
|
|
+ */
|
|
+ while (bytes || !iov->iov_len) {
|
|
int copy = min(bytes, iov->iov_len - base);
|
|
|
|
bytes -= copy;
|
|
@@ -2251,6 +2255,7 @@ again:
|
|
|
|
cond_resched();
|
|
|
|
+ iov_iter_advance(i, copied);
|
|
if (unlikely(copied == 0)) {
|
|
/*
|
|
* If we were unable to copy any data at all, we must
|
|
@@ -2264,7 +2269,6 @@ again:
|
|
iov_iter_single_seg_count(i));
|
|
goto again;
|
|
}
|
|
- iov_iter_advance(i, copied);
|
|
pos += copied;
|
|
written += copied;
|
|
|
|
diff --git a/mm/fremap.c b/mm/fremap.c
|
|
index 14bd3bf..69a37c2 100644
|
|
--- a/mm/fremap.c
|
|
+++ b/mm/fremap.c
|
|
@@ -190,10 +190,13 @@ asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,
|
|
*/
|
|
if (mapping_cap_account_dirty(mapping)) {
|
|
unsigned long addr;
|
|
+ struct file *file = vma->vm_file;
|
|
|
|
flags &= MAP_NONBLOCK;
|
|
- addr = mmap_region(vma->vm_file, start, size,
|
|
+ get_file(file);
|
|
+ addr = mmap_region(file, start, size,
|
|
flags, vma->vm_flags, pgoff, 1);
|
|
+ fput(file);
|
|
if (IS_ERR_VALUE(addr)) {
|
|
err = addr;
|
|
} else {
|
|
diff --git a/mm/mmap.c b/mm/mmap.c
|
|
index 15678aa..555b3e7 100644
|
|
--- a/mm/mmap.c
|
|
+++ b/mm/mmap.c
|
|
@@ -2215,7 +2215,7 @@ int install_special_mapping(struct mm_struct *mm,
|
|
vma->vm_start = addr;
|
|
vma->vm_end = addr + len;
|
|
|
|
- vma->vm_flags = vm_flags | mm->def_flags;
|
|
+ vma->vm_flags = vm_flags | mm->def_flags | VM_DONTEXPAND;
|
|
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
|
|
|
|
vma->vm_ops = &special_mapping_vmops;
|
|
diff --git a/mm/slab.c b/mm/slab.c
|
|
index b03b2e4..ff31261 100644
|
|
--- a/mm/slab.c
|
|
+++ b/mm/slab.c
|
|
@@ -304,11 +304,11 @@ struct kmem_list3 {
|
|
/*
|
|
* Need this for bootstrapping a per node allocator.
|
|
*/
|
|
-#define NUM_INIT_LISTS (2 * MAX_NUMNODES + 1)
|
|
+#define NUM_INIT_LISTS (3 * MAX_NUMNODES)
|
|
struct kmem_list3 __initdata initkmem_list3[NUM_INIT_LISTS];
|
|
#define CACHE_CACHE 0
|
|
-#define SIZE_AC 1
|
|
-#define SIZE_L3 (1 + MAX_NUMNODES)
|
|
+#define SIZE_AC MAX_NUMNODES
|
|
+#define SIZE_L3 (2 * MAX_NUMNODES)
|
|
|
|
static int drain_freelist(struct kmem_cache *cache,
|
|
struct kmem_list3 *l3, int tofree);
|
|
@@ -1410,6 +1410,22 @@ static void init_list(struct kmem_cache *cachep, struct kmem_list3 *list,
|
|
}
|
|
|
|
/*
|
|
+ * For setting up all the kmem_list3s for cache whose buffer_size is same as
|
|
+ * size of kmem_list3.
|
|
+ */
|
|
+static void __init set_up_list3s(struct kmem_cache *cachep, int index)
|
|
+{
|
|
+ int node;
|
|
+
|
|
+ for_each_online_node(node) {
|
|
+ cachep->nodelists[node] = &initkmem_list3[index + node];
|
|
+ cachep->nodelists[node]->next_reap = jiffies +
|
|
+ REAPTIMEOUT_LIST3 +
|
|
+ ((unsigned long)cachep) % REAPTIMEOUT_LIST3;
|
|
+ }
|
|
+}
|
|
+
|
|
+/*
|
|
* Initialisation. Called after the page allocator have been initialised and
|
|
* before smp_init().
|
|
*/
|
|
@@ -1432,6 +1448,7 @@ void __init kmem_cache_init(void)
|
|
if (i < MAX_NUMNODES)
|
|
cache_cache.nodelists[i] = NULL;
|
|
}
|
|
+ set_up_list3s(&cache_cache, CACHE_CACHE);
|
|
|
|
/*
|
|
* Fragmentation resistance on low memory - only use bigger
|
|
@@ -1587,10 +1604,9 @@ void __init kmem_cache_init(void)
|
|
{
|
|
int nid;
|
|
|
|
- /* Replace the static kmem_list3 structures for the boot cpu */
|
|
- init_list(&cache_cache, &initkmem_list3[CACHE_CACHE], node);
|
|
-
|
|
for_each_online_node(nid) {
|
|
+ init_list(&cache_cache, &initkmem_list3[CACHE_CACHE], nid);
|
|
+
|
|
init_list(malloc_sizes[INDEX_AC].cs_cachep,
|
|
&initkmem_list3[SIZE_AC + nid], nid);
|
|
|
|
@@ -1960,22 +1976,6 @@ static void slab_destroy(struct kmem_cache *cachep, struct slab *slabp)
|
|
}
|
|
}
|
|
|
|
-/*
|
|
- * For setting up all the kmem_list3s for cache whose buffer_size is same as
|
|
- * size of kmem_list3.
|
|
- */
|
|
-static void __init set_up_list3s(struct kmem_cache *cachep, int index)
|
|
-{
|
|
- int node;
|
|
-
|
|
- for_each_online_node(node) {
|
|
- cachep->nodelists[node] = &initkmem_list3[index + node];
|
|
- cachep->nodelists[node]->next_reap = jiffies +
|
|
- REAPTIMEOUT_LIST3 +
|
|
- ((unsigned long)cachep) % REAPTIMEOUT_LIST3;
|
|
- }
|
|
-}
|
|
-
|
|
static void __kmem_cache_destroy(struct kmem_cache *cachep)
|
|
{
|
|
int i;
|
|
@@ -2099,7 +2099,7 @@ static int __init_refok setup_cpu_cache(struct kmem_cache *cachep)
|
|
g_cpucache_up = PARTIAL_L3;
|
|
} else {
|
|
int node;
|
|
- for_each_node_state(node, N_NORMAL_MEMORY) {
|
|
+ for_each_online_node(node) {
|
|
cachep->nodelists[node] =
|
|
kmalloc_node(sizeof(struct kmem_list3),
|
|
GFP_KERNEL, node);
|
|
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
|
|
index d802b5a..9ddf944 100644
|
|
--- a/scripts/mod/file2alias.c
|
|
+++ b/scripts/mod/file2alias.c
|
|
@@ -155,7 +155,7 @@ static void do_usb_entry_multi(struct usb_device_id *id, struct module *mod)
|
|
* Some modules (visor) have empty slots as placeholder for
|
|
* run-time specification that results in catch-all alias
|
|
*/
|
|
- if (!(id->idVendor | id->bDeviceClass | id->bInterfaceClass))
|
|
+ if (!(id->idVendor | id->idProduct | id->bDeviceClass | id->bInterfaceClass))
|
|
return;
|
|
|
|
/* Convert numeric bcdDevice range into fnmatch-able pattern(s) */
|
|
diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
|
|
index f83b19d..4bf715d 100644
|
|
--- a/security/selinux/ss/services.c
|
|
+++ b/security/selinux/ss/services.c
|
|
@@ -1744,6 +1744,9 @@ int security_genfs_sid(const char *fstype,
|
|
struct ocontext *c;
|
|
int rc = 0, cmp = 0;
|
|
|
|
+ while (path[0] == '/' && path[1] == '/')
|
|
+ path++;
|
|
+
|
|
POLICY_RDLOCK;
|
|
|
|
for (genfs = policydb.genfs; genfs; genfs = genfs->next) {
|
|
diff --git a/sound/oss/via82cxxx_audio.c b/sound/oss/via82cxxx_audio.c
|
|
index 5d3c037..f95aa09 100644
|
|
--- a/sound/oss/via82cxxx_audio.c
|
|
+++ b/sound/oss/via82cxxx_audio.c
|
|
@@ -2104,6 +2104,7 @@ static struct page * via_mm_nopage (struct vm_area_struct * vma,
|
|
{
|
|
struct via_info *card = vma->vm_private_data;
|
|
struct via_channel *chan = &card->ch_out;
|
|
+ unsigned long max_bufs;
|
|
struct page *dmapage;
|
|
unsigned long pgoff;
|
|
int rd, wr;
|
|
@@ -2127,14 +2128,11 @@ static struct page * via_mm_nopage (struct vm_area_struct * vma,
|
|
rd = card->ch_in.is_mapped;
|
|
wr = card->ch_out.is_mapped;
|
|
|
|
-#ifndef VIA_NDEBUG
|
|
- {
|
|
- unsigned long max_bufs = chan->frag_number;
|
|
- if (rd && wr) max_bufs *= 2;
|
|
- /* via_dsp_mmap() should ensure this */
|
|
- assert (pgoff < max_bufs);
|
|
- }
|
|
-#endif
|
|
+ max_bufs = chan->frag_number;
|
|
+ if (rd && wr)
|
|
+ max_bufs *= 2;
|
|
+ if (pgoff >= max_bufs)
|
|
+ return NOPAGE_SIGBUS;
|
|
|
|
/* if full-duplex (read+write) and we have two sets of bufs,
|
|
* then the playback buffers come first, sez soundcard.c */
|
|
diff --git a/sound/usb/usx2y/usX2Yhwdep.c b/sound/usb/usx2y/usX2Yhwdep.c
|
|
index b76b3dd..e617d7e 100644
|
|
--- a/sound/usb/usx2y/usX2Yhwdep.c
|
|
+++ b/sound/usb/usx2y/usX2Yhwdep.c
|
|
@@ -88,7 +88,7 @@ static int snd_us428ctls_mmap(struct snd_hwdep * hw, struct file *filp, struct v
|
|
us428->us428ctls_sharedmem->CtlSnapShotLast = -2;
|
|
}
|
|
area->vm_ops = &us428ctls_vm_ops;
|
|
- area->vm_flags |= VM_RESERVED;
|
|
+ area->vm_flags |= VM_RESERVED | VM_DONTEXPAND;
|
|
area->vm_private_data = hw->private_data;
|
|
return 0;
|
|
}
|
|
diff --git a/sound/usb/usx2y/usx2yhwdeppcm.c b/sound/usb/usx2y/usx2yhwdeppcm.c
|
|
index a5e7bcd..6e70520 100644
|
|
--- a/sound/usb/usx2y/usx2yhwdeppcm.c
|
|
+++ b/sound/usb/usx2y/usx2yhwdeppcm.c
|
|
@@ -728,7 +728,7 @@ static int snd_usX2Y_hwdep_pcm_mmap(struct snd_hwdep * hw, struct file *filp, st
|
|
return -ENODEV;
|
|
}
|
|
area->vm_ops = &snd_usX2Y_hwdep_pcm_vm_ops;
|
|
- area->vm_flags |= VM_RESERVED;
|
|
+ area->vm_flags |= VM_RESERVED | VM_DONTEXPAND;
|
|
area->vm_private_data = hw->private_data;
|
|
return 0;
|
|
}
|