mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
Merge branch 'for-jens' of git://git.drbd.org/linux-2.6-drbd into for-linus
This commit is contained in:
@@ -133,46 +133,6 @@ Description:
|
||||
The symbolic link points to the PCI device sysfs entry of the
|
||||
Physical Function this device associates with.
|
||||
|
||||
|
||||
What: /sys/bus/pci/slots/...
|
||||
Date: April 2005 (possibly older)
|
||||
KernelVersion: 2.6.12 (possibly older)
|
||||
Contact: linux-pci@vger.kernel.org
|
||||
Description:
|
||||
When the appropriate driver is loaded, it will create a
|
||||
directory per claimed physical PCI slot in
|
||||
/sys/bus/pci/slots/. The names of these directories are
|
||||
specific to the driver, which in turn, are specific to the
|
||||
platform, but in general, should match the label on the
|
||||
machine's physical chassis.
|
||||
|
||||
The drivers that can create slot directories include the
|
||||
PCI hotplug drivers, and as of 2.6.27, the pci_slot driver.
|
||||
|
||||
The slot directories contain, at a minimum, a file named
|
||||
'address' which contains the PCI bus:device:function tuple.
|
||||
Other files may appear as well, but are specific to the
|
||||
driver.
|
||||
|
||||
What: /sys/bus/pci/slots/.../function[0-7]
|
||||
Date: March 2010
|
||||
KernelVersion: 2.6.35
|
||||
Contact: linux-pci@vger.kernel.org
|
||||
Description:
|
||||
If PCI slot directories (as described above) are created,
|
||||
and the physical slot is actually populated with a device,
|
||||
symbolic links in the slot directory pointing to the
|
||||
device's PCI functions are created as well.
|
||||
|
||||
What: /sys/bus/pci/devices/.../slot
|
||||
Date: March 2010
|
||||
KernelVersion: 2.6.35
|
||||
Contact: linux-pci@vger.kernel.org
|
||||
Description:
|
||||
If PCI slot directories (as described above) are created,
|
||||
a symbolic link pointing to the slot directory will be
|
||||
created as well.
|
||||
|
||||
What: /sys/bus/pci/slots/.../module
|
||||
Date: June 2009
|
||||
Contact: linux-pci@vger.kernel.org
|
||||
|
||||
6
Makefile
6
Makefile
@@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 35
|
||||
EXTRAVERSION = -rc2
|
||||
EXTRAVERSION = -rc3
|
||||
NAME = Sheep on Meth
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@@ -1095,7 +1095,7 @@ all: modules
|
||||
# using awk while concatenating to the final file.
|
||||
|
||||
PHONY += modules
|
||||
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
|
||||
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
|
||||
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
|
||||
@$(kecho) ' Building modules, stage 2.';
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||
@@ -1117,7 +1117,7 @@ PHONY += modules_install
|
||||
modules_install: _modinst_ _modinst_post
|
||||
|
||||
PHONY += _modinst_
|
||||
_modinst_: modules.builtin
|
||||
_modinst_:
|
||||
@if [ -z "`$(DEPMOD) -V 2>/dev/null | grep module-init-tools`" ]; then \
|
||||
echo "Warning: you may need to install module-init-tools"; \
|
||||
echo "See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt";\
|
||||
|
||||
@@ -1277,6 +1277,7 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus)
|
||||
printk(KERN_WARNING "PCI: Cannot allocate resource region "
|
||||
"%d of PCI bridge %d, will remap\n", i, bus->number);
|
||||
clear_resource:
|
||||
res->start = res->end = 0;
|
||||
res->flags = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -117,6 +117,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list)
|
||||
* Invalidate the resource to prevent
|
||||
* child resource allocations in this
|
||||
* range. */
|
||||
r->start = r->end = 0;
|
||||
r->flags = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1309,6 +1309,7 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus)
|
||||
printk(KERN_WARNING "PCI: Cannot allocate resource region "
|
||||
"%d of PCI bridge %d, will remap\n", i, bus->number);
|
||||
clear_resource:
|
||||
res->start = res->end = 0;
|
||||
res->flags = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@ static inline int arch_prepare_suspend(void) { return 0; }
|
||||
struct saved_context {
|
||||
u16 es, fs, gs, ss;
|
||||
unsigned long cr0, cr2, cr3, cr4;
|
||||
u64 misc_enable;
|
||||
bool misc_enable_saved;
|
||||
struct desc_ptr gdt;
|
||||
struct desc_ptr idt;
|
||||
u16 ldt;
|
||||
|
||||
@@ -27,6 +27,8 @@ struct saved_context {
|
||||
u16 ds, es, fs, gs, ss;
|
||||
unsigned long gs_base, gs_kernel_base, fs_base;
|
||||
unsigned long cr0, cr2, cr3, cr4, cr8;
|
||||
u64 misc_enable;
|
||||
bool misc_enable_saved;
|
||||
unsigned long efer;
|
||||
u16 gdt_pad;
|
||||
u16 gdt_limit;
|
||||
|
||||
@@ -96,6 +96,7 @@ EXPORT_SYMBOL(pcibios_align_resource);
|
||||
* the fact the PCI specs explicitly allow address decoders to be
|
||||
* shared between expansion ROMs and other resource regions, it's
|
||||
* at least dangerous)
|
||||
* - bad resource sizes or overlaps with other regions
|
||||
*
|
||||
* Our solution:
|
||||
* (1) Allocate resources for all buses behind PCI-to-PCI bridges.
|
||||
@@ -136,6 +137,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list)
|
||||
* child resource allocations in this
|
||||
* range.
|
||||
*/
|
||||
r->start = r->end = 0;
|
||||
r->flags = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,6 +105,8 @@ static void __save_processor_state(struct saved_context *ctxt)
|
||||
ctxt->cr4 = read_cr4();
|
||||
ctxt->cr8 = read_cr8();
|
||||
#endif
|
||||
ctxt->misc_enable_saved = !rdmsrl_safe(MSR_IA32_MISC_ENABLE,
|
||||
&ctxt->misc_enable);
|
||||
}
|
||||
|
||||
/* Needed by apm.c */
|
||||
@@ -152,6 +154,8 @@ static void fix_processor_context(void)
|
||||
*/
|
||||
static void __restore_processor_state(struct saved_context *ctxt)
|
||||
{
|
||||
if (ctxt->misc_enable_saved)
|
||||
wrmsrl(MSR_IA32_MISC_ENABLE, ctxt->misc_enable);
|
||||
/*
|
||||
* control registers
|
||||
*/
|
||||
|
||||
@@ -622,6 +622,11 @@ static int sil24_exec_polled_cmd(struct ata_port *ap, int pmp,
|
||||
irq_enabled = readl(port + PORT_IRQ_ENABLE_SET);
|
||||
writel(PORT_IRQ_COMPLETE | PORT_IRQ_ERROR, port + PORT_IRQ_ENABLE_CLR);
|
||||
|
||||
/*
|
||||
* The barrier is required to ensure that writes to cmd_block reach
|
||||
* the memory before the write to PORT_CMD_ACTIVATE.
|
||||
*/
|
||||
wmb();
|
||||
writel((u32)paddr, port + PORT_CMD_ACTIVATE);
|
||||
writel((u64)paddr >> 32, port + PORT_CMD_ACTIVATE + 4);
|
||||
|
||||
@@ -865,7 +870,7 @@ static void sil24_qc_prep(struct ata_queued_cmd *qc)
|
||||
} else {
|
||||
prb = &cb->atapi.prb;
|
||||
sge = cb->atapi.sge;
|
||||
memset(cb->atapi.cdb, 0, 32);
|
||||
memset(cb->atapi.cdb, 0, sizeof(cb->atapi.cdb));
|
||||
memcpy(cb->atapi.cdb, qc->cdb, qc->dev->cdb_len);
|
||||
|
||||
if (ata_is_data(qc->tf.protocol)) {
|
||||
@@ -895,6 +900,11 @@ static unsigned int sil24_qc_issue(struct ata_queued_cmd *qc)
|
||||
paddr = pp->cmd_block_dma + tag * sizeof(*pp->cmd_block);
|
||||
activate = port + PORT_CMD_ACTIVATE + tag * 8;
|
||||
|
||||
/*
|
||||
* The barrier is required to ensure that writes to cmd_block reach
|
||||
* the memory before the write to PORT_CMD_ACTIVATE.
|
||||
*/
|
||||
wmb();
|
||||
writel((u32)paddr, activate);
|
||||
writel((u64)paddr >> 32, activate + 4);
|
||||
|
||||
|
||||
@@ -1236,8 +1236,6 @@ static void after_state_ch(struct drbd_conf *mdev, union drbd_state os,
|
||||
/* Last part of the attaching process ... */
|
||||
if (ns.conn >= C_CONNECTED &&
|
||||
os.disk == D_ATTACHING && ns.disk == D_NEGOTIATING) {
|
||||
kfree(mdev->p_uuid); /* We expect to receive up-to-date UUIDs soon. */
|
||||
mdev->p_uuid = NULL; /* ...to not use the old ones in the mean time */
|
||||
drbd_send_sizes(mdev, 0, 0); /* to start sync... */
|
||||
drbd_send_uuids(mdev);
|
||||
drbd_send_state(mdev);
|
||||
|
||||
@@ -1114,6 +1114,12 @@ static int drbd_nl_disk_conf(struct drbd_conf *mdev, struct drbd_nl_cfg_req *nlp
|
||||
mdev->new_state_tmp.i = ns.i;
|
||||
ns.i = os.i;
|
||||
ns.disk = D_NEGOTIATING;
|
||||
|
||||
/* We expect to receive up-to-date UUIDs soon.
|
||||
To avoid a race in receive_state, free p_uuid while
|
||||
holding req_lock. I.e. atomic with the state change */
|
||||
kfree(mdev->p_uuid);
|
||||
mdev->p_uuid = NULL;
|
||||
}
|
||||
|
||||
rv = _drbd_set_state(mdev, ns, CS_VERBOSE, NULL);
|
||||
|
||||
@@ -598,8 +598,8 @@ rx_next:
|
||||
goto rx_status_loop;
|
||||
|
||||
spin_lock_irqsave(&cp->lock, flags);
|
||||
cpw16_f(IntrMask, cp_intr_mask);
|
||||
__napi_complete(napi);
|
||||
cpw16_f(IntrMask, cp_intr_mask);
|
||||
spin_unlock_irqrestore(&cp->lock, flags);
|
||||
}
|
||||
|
||||
|
||||
@@ -2089,8 +2089,8 @@ static int rtl8139_poll(struct napi_struct *napi, int budget)
|
||||
* again when we think we are done.
|
||||
*/
|
||||
spin_lock_irqsave(&tp->lock, flags);
|
||||
RTL_W16_F(IntrMask, rtl8139_intr_mask);
|
||||
__napi_complete(napi);
|
||||
RTL_W16_F(IntrMask, rtl8139_intr_mask);
|
||||
spin_unlock_irqrestore(&tp->lock, flags);
|
||||
}
|
||||
spin_unlock(&tp->rx_lock);
|
||||
|
||||
@@ -747,8 +747,7 @@ static int gfar_of_init(struct of_device *ofdev, struct net_device **pdev)
|
||||
FSL_GIANFAR_DEV_HAS_CSUM |
|
||||
FSL_GIANFAR_DEV_HAS_VLAN |
|
||||
FSL_GIANFAR_DEV_HAS_MAGIC_PACKET |
|
||||
FSL_GIANFAR_DEV_HAS_EXTENDED_HASH |
|
||||
FSL_GIANFAR_DEV_HAS_TIMER;
|
||||
FSL_GIANFAR_DEV_HAS_EXTENDED_HASH;
|
||||
|
||||
ctype = of_get_property(np, "phy-connection-type", NULL);
|
||||
|
||||
|
||||
@@ -322,6 +322,7 @@ static int smc91c92_probe(struct pcmcia_device *link)
|
||||
return -ENOMEM;
|
||||
smc = netdev_priv(dev);
|
||||
smc->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
spin_lock_init(&smc->lock);
|
||||
link->io.NumPorts1 = 16;
|
||||
|
||||
@@ -53,6 +53,9 @@
|
||||
|
||||
#define MII_LXT971_ISR 19 /* Interrupt Status Register */
|
||||
|
||||
/* register definitions for the 973 */
|
||||
#define MII_LXT973_PCR 16 /* Port Configuration Register */
|
||||
#define PCR_FIBER_SELECT 1
|
||||
|
||||
MODULE_DESCRIPTION("Intel LXT PHY driver");
|
||||
MODULE_AUTHOR("Andy Fleming");
|
||||
@@ -119,6 +122,33 @@ static int lxt971_config_intr(struct phy_device *phydev)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int lxt973_probe(struct phy_device *phydev)
|
||||
{
|
||||
int val = phy_read(phydev, MII_LXT973_PCR);
|
||||
|
||||
if (val & PCR_FIBER_SELECT) {
|
||||
/*
|
||||
* If fiber is selected, then the only correct setting
|
||||
* is 100Mbps, full duplex, and auto negotiation off.
|
||||
*/
|
||||
val = phy_read(phydev, MII_BMCR);
|
||||
val |= (BMCR_SPEED100 | BMCR_FULLDPLX);
|
||||
val &= ~BMCR_ANENABLE;
|
||||
phy_write(phydev, MII_BMCR, val);
|
||||
/* Remember that the port is in fiber mode. */
|
||||
phydev->priv = lxt973_probe;
|
||||
} else {
|
||||
phydev->priv = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lxt973_config_aneg(struct phy_device *phydev)
|
||||
{
|
||||
/* Do nothing if port is in fiber mode. */
|
||||
return phydev->priv ? 0 : genphy_config_aneg(phydev);
|
||||
}
|
||||
|
||||
static struct phy_driver lxt970_driver = {
|
||||
.phy_id = 0x78100000,
|
||||
.name = "LXT970",
|
||||
@@ -146,6 +176,18 @@ static struct phy_driver lxt971_driver = {
|
||||
.driver = { .owner = THIS_MODULE,},
|
||||
};
|
||||
|
||||
static struct phy_driver lxt973_driver = {
|
||||
.phy_id = 0x00137a10,
|
||||
.name = "LXT973",
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.features = PHY_BASIC_FEATURES,
|
||||
.flags = 0,
|
||||
.probe = lxt973_probe,
|
||||
.config_aneg = lxt973_config_aneg,
|
||||
.read_status = genphy_read_status,
|
||||
.driver = { .owner = THIS_MODULE,},
|
||||
};
|
||||
|
||||
static int __init lxt_init(void)
|
||||
{
|
||||
int ret;
|
||||
@@ -157,9 +199,15 @@ static int __init lxt_init(void)
|
||||
ret = phy_driver_register(&lxt971_driver);
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
ret = phy_driver_register(&lxt973_driver);
|
||||
if (ret)
|
||||
goto err3;
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
err3:
|
||||
phy_driver_unregister(&lxt971_driver);
|
||||
err2:
|
||||
phy_driver_unregister(&lxt970_driver);
|
||||
err1:
|
||||
return ret;
|
||||
@@ -169,6 +217,7 @@ static void __exit lxt_exit(void)
|
||||
{
|
||||
phy_driver_unregister(&lxt970_driver);
|
||||
phy_driver_unregister(&lxt971_driver);
|
||||
phy_driver_unregister(&lxt973_driver);
|
||||
}
|
||||
|
||||
module_init(lxt_init);
|
||||
|
||||
@@ -560,10 +560,10 @@ static void mdio_write(void __iomem *ioaddr, int reg_addr, int value)
|
||||
udelay(25);
|
||||
}
|
||||
/*
|
||||
* Some configurations require a small delay even after the write
|
||||
* completed indication or the next write might fail.
|
||||
* According to hardware specs a 20us delay is required after write
|
||||
* complete indication, but before sending next command.
|
||||
*/
|
||||
udelay(25);
|
||||
udelay(20);
|
||||
}
|
||||
|
||||
static int mdio_read(void __iomem *ioaddr, int reg_addr)
|
||||
@@ -583,6 +583,12 @@ static int mdio_read(void __iomem *ioaddr, int reg_addr)
|
||||
}
|
||||
udelay(25);
|
||||
}
|
||||
/*
|
||||
* According to hardware specs a 20us delay is required after read
|
||||
* complete indication, but before sending next command.
|
||||
*/
|
||||
udelay(20);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
@@ -1192,7 +1192,7 @@ int i2400m_fw_hdr_check(struct i2400m *i2400m,
|
||||
unsigned module_type, header_len, major_version, minor_version,
|
||||
module_id, module_vendor, date, size;
|
||||
|
||||
module_type = bcf_hdr->module_type;
|
||||
module_type = le32_to_cpu(bcf_hdr->module_type);
|
||||
header_len = sizeof(u32) * le32_to_cpu(bcf_hdr->header_len);
|
||||
major_version = (le32_to_cpu(bcf_hdr->header_version) & 0xffff0000)
|
||||
>> 16;
|
||||
|
||||
@@ -828,7 +828,14 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
pci_name(pdev), err);
|
||||
return err;
|
||||
}
|
||||
|
||||
bus = pdev->subordinate;
|
||||
if (!bus) {
|
||||
dev_notice(&pdev->dev, "the device is not a bridge, "
|
||||
"skipping\n");
|
||||
rc = -ENODEV;
|
||||
goto err_disable_device;
|
||||
}
|
||||
|
||||
/* Need to read VID early b/c it's used to differentiate CPQ and INTC
|
||||
* discovery
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user