You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'pending-misc' (early part) into devel
This commit is contained in:
@@ -103,9 +103,9 @@
|
||||
|
||||
#define ACPI_MAX_REFERENCE_COUNT 0x1000
|
||||
|
||||
/* Size of cached memory mapping for system memory operation region */
|
||||
/* Default page size for use in mapping memory for operation regions */
|
||||
|
||||
#define ACPI_SYSMEM_REGION_WINDOW_SIZE 4096
|
||||
#define ACPI_DEFAULT_PAGE_SIZE 4096 /* Must be power of 2 */
|
||||
|
||||
/* owner_id tracking. 8 entries allows for 255 owner_ids */
|
||||
|
||||
|
||||
@@ -203,8 +203,9 @@ static const union acpi_predefined_info predefined_names[] =
|
||||
{{"_BCT", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_BDN", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_BFS", 1, 0}},
|
||||
{{"_BIF", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (9 Int),(4 Str) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 9, ACPI_RTYPE_STRING}, 4,0}},
|
||||
{{"_BIF", 0, ACPI_RTYPE_PACKAGE} }, /* Fixed-length (9 Int),(4 Str/Buf) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 9,
|
||||
ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER}, 4, 0} },
|
||||
|
||||
{{"_BIX", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (16 Int),(4 Str) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16, ACPI_RTYPE_STRING}, 4,
|
||||
|
||||
@@ -77,7 +77,8 @@ acpi_ex_system_memory_space_handler(u32 function,
|
||||
void *logical_addr_ptr = NULL;
|
||||
struct acpi_mem_space_context *mem_info = region_context;
|
||||
u32 length;
|
||||
acpi_size window_size;
|
||||
acpi_size map_length;
|
||||
acpi_size page_boundary_map_length;
|
||||
#ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
u32 remainder;
|
||||
#endif
|
||||
@@ -144,25 +145,39 @@ acpi_ex_system_memory_space_handler(u32 function,
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't attempt to map memory beyond the end of the region, and
|
||||
* constrain the maximum mapping size to something reasonable.
|
||||
* Attempt to map from the requested address to the end of the region.
|
||||
* However, we will never map more than one page, nor will we cross
|
||||
* a page boundary.
|
||||
*/
|
||||
window_size = (acpi_size)
|
||||
map_length = (acpi_size)
|
||||
((mem_info->address + mem_info->length) - address);
|
||||
|
||||
if (window_size > ACPI_SYSMEM_REGION_WINDOW_SIZE) {
|
||||
window_size = ACPI_SYSMEM_REGION_WINDOW_SIZE;
|
||||
/*
|
||||
* If mapping the entire remaining portion of the region will cross
|
||||
* a page boundary, just map up to the page boundary, do not cross.
|
||||
* On some systems, crossing a page boundary while mapping regions
|
||||
* can cause warnings if the pages have different attributes
|
||||
* due to resource management
|
||||
*/
|
||||
page_boundary_map_length =
|
||||
ACPI_ROUND_UP(address, ACPI_DEFAULT_PAGE_SIZE) - address;
|
||||
|
||||
if (!page_boundary_map_length) {
|
||||
page_boundary_map_length = ACPI_DEFAULT_PAGE_SIZE;
|
||||
}
|
||||
|
||||
if (map_length > page_boundary_map_length) {
|
||||
map_length = page_boundary_map_length;
|
||||
}
|
||||
|
||||
/* Create a new mapping starting at the address given */
|
||||
|
||||
mem_info->mapped_logical_address =
|
||||
acpi_os_map_memory((acpi_physical_address) address, window_size);
|
||||
mem_info->mapped_logical_address = acpi_os_map_memory((acpi_physical_address) address, map_length);
|
||||
if (!mem_info->mapped_logical_address) {
|
||||
ACPI_ERROR((AE_INFO,
|
||||
"Could not map memory at %8.8X%8.8X, size %X",
|
||||
ACPI_FORMAT_NATIVE_UINT(address),
|
||||
(u32) window_size));
|
||||
(u32) map_length));
|
||||
mem_info->mapped_length = 0;
|
||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||
}
|
||||
@@ -170,7 +185,7 @@ acpi_ex_system_memory_space_handler(u32 function,
|
||||
/* Save the physical address and mapping size */
|
||||
|
||||
mem_info->mapped_physical_address = address;
|
||||
mem_info->mapped_length = window_size;
|
||||
mem_info->mapped_length = map_length;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -224,6 +224,7 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
|
||||
* _OSI(Linux) helps sound
|
||||
* DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad R61"),
|
||||
* DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T61"),
|
||||
* T400, T500
|
||||
* _OSI(Linux) has Linux specific hooks
|
||||
* DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X61"),
|
||||
* _OSI(Linux) is a NOP:
|
||||
@@ -254,6 +255,22 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X61"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = dmi_enable_osi_linux,
|
||||
.ident = "Lenovo ThinkPad T400",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T400"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = dmi_enable_osi_linux,
|
||||
.ident = "Lenovo ThinkPad T500",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T500"),
|
||||
},
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -294,7 +294,11 @@ static int set_acpi_trip(struct acpi_power_meter_resource *resource)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return data;
|
||||
/* _PTP returns 0 on success, nonzero otherwise */
|
||||
if (data)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t set_trip(struct device *dev, struct device_attribute *devattr,
|
||||
|
||||
+1
-1
@@ -393,7 +393,7 @@ acpi_system_write_wakeup_device(struct file *file,
|
||||
struct list_head *node, *next;
|
||||
char strbuf[5];
|
||||
char str[5] = "";
|
||||
int len = count;
|
||||
unsigned int len = count;
|
||||
struct acpi_device *found_dev = NULL;
|
||||
|
||||
if (len > 4)
|
||||
|
||||
@@ -770,7 +770,7 @@ static struct notifier_block acpi_cpu_notifier =
|
||||
.notifier_call = acpi_cpu_soft_notify,
|
||||
};
|
||||
|
||||
static int acpi_processor_add(struct acpi_device *device)
|
||||
static int __cpuinit acpi_processor_add(struct acpi_device *device)
|
||||
{
|
||||
struct acpi_processor *pr = NULL;
|
||||
int result = 0;
|
||||
|
||||
@@ -1133,15 +1133,15 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
|
||||
int result = 0;
|
||||
struct acpi_processor_throttling *pthrottling;
|
||||
|
||||
if (!pr)
|
||||
return -EINVAL;
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
|
||||
pr->throttling.address,
|
||||
pr->throttling.duty_offset,
|
||||
pr->throttling.duty_width));
|
||||
|
||||
if (!pr)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* Evaluate _PTC, _TSS and _TPC
|
||||
* They must all be present or none of them can be used.
|
||||
|
||||
@@ -413,6 +413,38 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = init_set_sci_en_on_resume,
|
||||
.ident = "Hewlett-Packard Pavilion dv4",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = init_set_sci_en_on_resume,
|
||||
.ident = "Hewlett-Packard Pavilion dv7",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv7"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = init_set_sci_en_on_resume,
|
||||
.ident = "Hewlett-Packard Compaq Presario C700 Notebook PC",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Compaq Presario C700 Notebook PC"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = init_set_sci_en_on_resume,
|
||||
.ident = "Hewlett-Packard Compaq Presario CQ40 Notebook PC",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Compaq Presario CQ40 Notebook PC"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = init_old_suspend_ordering,
|
||||
.ident = "Panasonic CF51-2L",
|
||||
.matches = {
|
||||
|
||||
@@ -1223,7 +1223,7 @@ acpi_video_device_write_state(struct file *file,
|
||||
u32 state = 0;
|
||||
|
||||
|
||||
if (!dev || count + 1 > sizeof str)
|
||||
if (!dev || count >= sizeof(str))
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(str, buffer, count))
|
||||
@@ -1280,7 +1280,7 @@ acpi_video_device_write_brightness(struct file *file,
|
||||
int i;
|
||||
|
||||
|
||||
if (!dev || !dev->brightness || count + 1 > sizeof str)
|
||||
if (!dev || !dev->brightness || count >= sizeof(str))
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(str, buffer, count))
|
||||
@@ -1562,7 +1562,7 @@ acpi_video_bus_write_POST(struct file *file,
|
||||
unsigned long long opt, options;
|
||||
|
||||
|
||||
if (!video || count + 1 > sizeof str)
|
||||
if (!video || count >= sizeof(str))
|
||||
return -EINVAL;
|
||||
|
||||
status = acpi_video_bus_POST_options(video, &options);
|
||||
@@ -1602,7 +1602,7 @@ acpi_video_bus_write_DOS(struct file *file,
|
||||
unsigned long opt;
|
||||
|
||||
|
||||
if (!video || count + 1 > sizeof str)
|
||||
if (!video || count >= sizeof(str))
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(str, buffer, count))
|
||||
|
||||
+35
-5
@@ -2718,6 +2718,30 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
|
||||
},
|
||||
.driver_data = "20071026", /* yyyymmdd */
|
||||
},
|
||||
/*
|
||||
* All BIOS versions for the MSI K9A2 Platinum (MS-7376)
|
||||
* support 64bit DMA.
|
||||
*
|
||||
* BIOS versions earlier than 1.5 had the Manufacturer DMI
|
||||
* fields as "MICRO-STAR INTERANTIONAL CO.,LTD".
|
||||
* This spelling mistake was fixed in BIOS version 1.5, so
|
||||
* 1.5 and later have the Manufacturer as
|
||||
* "MICRO-STAR INTERNATIONAL CO.,LTD".
|
||||
* So try to match on DMI_BOARD_VENDOR of "MICRO-STAR INTER".
|
||||
*
|
||||
* BIOS versions earlier than 1.9 had a Board Product Name
|
||||
* DMI field of "MS-7376". This was changed to be
|
||||
* "K9A2 Platinum (MS-7376)" in version 1.9, but we can still
|
||||
* match on DMI_BOARD_NAME of "MS-7376".
|
||||
*/
|
||||
{
|
||||
.ident = "MSI K9A2 Platinum",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR,
|
||||
"MICRO-STAR INTER"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "MS-7376"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
const struct dmi_system_id *match;
|
||||
@@ -2729,18 +2753,24 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
|
||||
!match)
|
||||
return false;
|
||||
|
||||
if (!match->driver_data)
|
||||
goto enable_64bit;
|
||||
|
||||
dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
|
||||
snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
|
||||
|
||||
if (strcmp(buf, match->driver_data) >= 0) {
|
||||
dev_printk(KERN_WARNING, &pdev->dev, "%s: enabling 64bit DMA\n",
|
||||
match->ident);
|
||||
return true;
|
||||
} else {
|
||||
if (strcmp(buf, match->driver_data) >= 0)
|
||||
goto enable_64bit;
|
||||
else {
|
||||
dev_printk(KERN_WARNING, &pdev->dev, "%s: BIOS too old, "
|
||||
"forcing 32bit DMA, update BIOS\n", match->ident);
|
||||
return false;
|
||||
}
|
||||
|
||||
enable_64bit:
|
||||
dev_printk(KERN_WARNING, &pdev->dev, "%s: enabling 64bit DMA\n",
|
||||
match->ident);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
|
||||
|
||||
@@ -4919,10 +4919,11 @@ struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev)
|
||||
*/
|
||||
void ata_qc_free(struct ata_queued_cmd *qc)
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
struct ata_port *ap;
|
||||
unsigned int tag;
|
||||
|
||||
WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
|
||||
ap = qc->ap;
|
||||
|
||||
qc->flags = 0;
|
||||
tag = qc->tag;
|
||||
@@ -4934,11 +4935,13 @@ void ata_qc_free(struct ata_queued_cmd *qc)
|
||||
|
||||
void __ata_qc_complete(struct ata_queued_cmd *qc)
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
struct ata_link *link = qc->dev->link;
|
||||
struct ata_port *ap;
|
||||
struct ata_link *link;
|
||||
|
||||
WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
|
||||
WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE));
|
||||
ap = qc->ap;
|
||||
link = qc->dev->link;
|
||||
|
||||
if (likely(qc->flags & ATA_QCFLAG_DMAMAP))
|
||||
ata_sg_clean(qc);
|
||||
|
||||
+44
-40
@@ -707,34 +707,17 @@ static unsigned int sata_fsl_dev_classify(struct ata_port *ap)
|
||||
return ata_dev_classify(&tf);
|
||||
}
|
||||
|
||||
static int sata_fsl_prereset(struct ata_link *link, unsigned long deadline)
|
||||
{
|
||||
/* FIXME: Never skip softreset, sata_fsl_softreset() is
|
||||
* combination of soft and hard resets. sata_fsl_softreset()
|
||||
* needs to be splitted into soft and hard resets.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sata_fsl_softreset(struct ata_link *link, unsigned int *class,
|
||||
static int sata_fsl_hardreset(struct ata_link *link, unsigned int *class,
|
||||
unsigned long deadline)
|
||||
{
|
||||
struct ata_port *ap = link->ap;
|
||||
struct sata_fsl_port_priv *pp = ap->private_data;
|
||||
struct sata_fsl_host_priv *host_priv = ap->host->private_data;
|
||||
void __iomem *hcr_base = host_priv->hcr_base;
|
||||
int pmp = sata_srst_pmp(link);
|
||||
u32 temp;
|
||||
struct ata_taskfile tf;
|
||||
u8 *cfis;
|
||||
u32 Serror;
|
||||
int i = 0;
|
||||
unsigned long start_jiffies;
|
||||
|
||||
DPRINTK("in xx_softreset\n");
|
||||
|
||||
if (pmp != SATA_PMP_CTRL_PORT)
|
||||
goto issue_srst;
|
||||
DPRINTK("in xx_hardreset\n");
|
||||
|
||||
try_offline_again:
|
||||
/*
|
||||
@@ -749,7 +732,7 @@ try_offline_again:
|
||||
|
||||
if (temp & ONLINE) {
|
||||
ata_port_printk(ap, KERN_ERR,
|
||||
"Softreset failed, not off-lined %d\n", i);
|
||||
"Hardreset failed, not off-lined %d\n", i);
|
||||
|
||||
/*
|
||||
* Try to offline controller atleast twice
|
||||
@@ -761,7 +744,7 @@ try_offline_again:
|
||||
goto try_offline_again;
|
||||
}
|
||||
|
||||
DPRINTK("softreset, controller off-lined\n");
|
||||
DPRINTK("hardreset, controller off-lined\n");
|
||||
VPRINTK("HStatus = 0x%x\n", ioread32(hcr_base + HSTATUS));
|
||||
VPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL));
|
||||
|
||||
@@ -786,11 +769,11 @@ try_offline_again:
|
||||
|
||||
if (!(temp & ONLINE)) {
|
||||
ata_port_printk(ap, KERN_ERR,
|
||||
"Softreset failed, not on-lined\n");
|
||||
"Hardreset failed, not on-lined\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
DPRINTK("softreset, controller off-lined & on-lined\n");
|
||||
DPRINTK("hardreset, controller off-lined & on-lined\n");
|
||||
VPRINTK("HStatus = 0x%x\n", ioread32(hcr_base + HSTATUS));
|
||||
VPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL));
|
||||
|
||||
@@ -806,7 +789,7 @@ try_offline_again:
|
||||
"No Device OR PHYRDY change,Hstatus = 0x%x\n",
|
||||
ioread32(hcr_base + HSTATUS));
|
||||
*class = ATA_DEV_NONE;
|
||||
goto out;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -819,11 +802,44 @@ try_offline_again:
|
||||
if ((temp & 0xFF) != 0x18) {
|
||||
ata_port_printk(ap, KERN_WARNING, "No Signature Update\n");
|
||||
*class = ATA_DEV_NONE;
|
||||
goto out;
|
||||
goto do_followup_srst;
|
||||
} else {
|
||||
ata_port_printk(ap, KERN_INFO,
|
||||
"Signature Update detected @ %d msecs\n",
|
||||
jiffies_to_msecs(jiffies - start_jiffies));
|
||||
*class = sata_fsl_dev_classify(ap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
do_followup_srst:
|
||||
/*
|
||||
* request libATA to perform follow-up softreset
|
||||
*/
|
||||
return -EAGAIN;
|
||||
|
||||
err:
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static int sata_fsl_softreset(struct ata_link *link, unsigned int *class,
|
||||
unsigned long deadline)
|
||||
{
|
||||
struct ata_port *ap = link->ap;
|
||||
struct sata_fsl_port_priv *pp = ap->private_data;
|
||||
struct sata_fsl_host_priv *host_priv = ap->host->private_data;
|
||||
void __iomem *hcr_base = host_priv->hcr_base;
|
||||
int pmp = sata_srst_pmp(link);
|
||||
u32 temp;
|
||||
struct ata_taskfile tf;
|
||||
u8 *cfis;
|
||||
u32 Serror;
|
||||
|
||||
DPRINTK("in xx_softreset\n");
|
||||
|
||||
if (ata_link_offline(link)) {
|
||||
DPRINTK("PHY reports no device\n");
|
||||
*class = ATA_DEV_NONE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -834,7 +850,6 @@ try_offline_again:
|
||||
* reached here, we can send a command to the target device
|
||||
*/
|
||||
|
||||
issue_srst:
|
||||
DPRINTK("Sending SRST/device reset\n");
|
||||
|
||||
ata_tf_init(link->device, &tf);
|
||||
@@ -860,6 +875,8 @@ issue_srst:
|
||||
ioread32(CA + hcr_base), ioread32(CC + hcr_base));
|
||||
|
||||
iowrite32(0xFFFF, CC + hcr_base);
|
||||
if (pmp != SATA_PMP_CTRL_PORT)
|
||||
iowrite32(pmp, CQPMP + hcr_base);
|
||||
iowrite32(1, CQ + hcr_base);
|
||||
|
||||
temp = ata_wait_register(CQ + hcr_base, 0x1, 0x1, 1, 5000);
|
||||
@@ -926,7 +943,6 @@ issue_srst:
|
||||
VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE));
|
||||
}
|
||||
|
||||
out:
|
||||
return 0;
|
||||
|
||||
err:
|
||||
@@ -988,18 +1004,6 @@ static void sata_fsl_error_intr(struct ata_port *ap)
|
||||
ehi->err_mask |= AC_ERR_ATA_BUS;
|
||||
ehi->action |= ATA_EH_SOFTRESET;
|
||||
|
||||
/*
|
||||
* Ignore serror in case of fatal errors as we always want
|
||||
* to do a soft-reset of the FSL SATA controller. Analyzing
|
||||
* serror may cause libata to schedule a hard-reset action,
|
||||
* and hard-reset currently does not do controller
|
||||
* offline/online, causing command timeouts and leads to an
|
||||
* un-recoverable state, hence make libATA ignore
|
||||
* autopsy in case of fatal errors.
|
||||
*/
|
||||
|
||||
ehi->flags |= ATA_EHI_NO_AUTOPSY;
|
||||
|
||||
freeze = 1;
|
||||
}
|
||||
|
||||
@@ -1267,8 +1271,8 @@ static struct ata_port_operations sata_fsl_ops = {
|
||||
|
||||
.freeze = sata_fsl_freeze,
|
||||
.thaw = sata_fsl_thaw,
|
||||
.prereset = sata_fsl_prereset,
|
||||
.softreset = sata_fsl_softreset,
|
||||
.hardreset = sata_fsl_hardreset,
|
||||
.pmp_softreset = sata_fsl_softreset,
|
||||
.error_handler = sata_fsl_error_handler,
|
||||
.post_internal_cmd = sata_fsl_post_internal_cmd,
|
||||
|
||||
@@ -93,7 +93,6 @@ static const struct pci_device_id svia_pci_tbl[] = {
|
||||
{ PCI_VDEVICE(VIA, 0x7372), vt6420 },
|
||||
{ PCI_VDEVICE(VIA, 0x5287), vt8251 }, /* 2 sata chnls (Master/Slave) */
|
||||
{ PCI_VDEVICE(VIA, 0x9000), vt8251 },
|
||||
{ PCI_VDEVICE(VIA, 0x9040), vt8251 },
|
||||
|
||||
{ } /* terminate list */
|
||||
};
|
||||
|
||||
+11
-6
@@ -689,15 +689,19 @@ int bus_add_driver(struct device_driver *drv)
|
||||
printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n",
|
||||
__func__, drv->name);
|
||||
}
|
||||
error = add_bind_files(drv);
|
||||
if (error) {
|
||||
/* Ditto */
|
||||
printk(KERN_ERR "%s: add_bind_files(%s) failed\n",
|
||||
__func__, drv->name);
|
||||
|
||||
if (!drv->suppress_bind_attrs) {
|
||||
error = add_bind_files(drv);
|
||||
if (error) {
|
||||
/* Ditto */
|
||||
printk(KERN_ERR "%s: add_bind_files(%s) failed\n",
|
||||
__func__, drv->name);
|
||||
}
|
||||
}
|
||||
|
||||
kobject_uevent(&priv->kobj, KOBJ_ADD);
|
||||
return 0;
|
||||
|
||||
out_unregister:
|
||||
kfree(drv->p);
|
||||
drv->p = NULL;
|
||||
@@ -720,7 +724,8 @@ void bus_remove_driver(struct device_driver *drv)
|
||||
if (!drv->bus)
|
||||
return;
|
||||
|
||||
remove_bind_files(drv);
|
||||
if (!drv->suppress_bind_attrs)
|
||||
remove_bind_files(drv);
|
||||
driver_remove_attrs(drv->bus, drv);
|
||||
driver_remove_file(drv, &driver_attr_uevent);
|
||||
klist_remove(&drv->p->knode_bus);
|
||||
|
||||
@@ -236,7 +236,7 @@ int driver_register(struct device_driver *drv)
|
||||
put_driver(other);
|
||||
printk(KERN_ERR "Error: Driver '%s' is already registered, "
|
||||
"aborting...\n", drv->name);
|
||||
return -EEXIST;
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
ret = bus_add_driver(drv);
|
||||
|
||||
@@ -521,11 +521,15 @@ int __init_or_module platform_driver_probe(struct platform_driver *drv,
|
||||
{
|
||||
int retval, code;
|
||||
|
||||
/* make sure driver won't have bind/unbind attributes */
|
||||
drv->driver.suppress_bind_attrs = true;
|
||||
|
||||
/* temporary section violation during probe() */
|
||||
drv->probe = probe;
|
||||
retval = code = platform_driver_register(drv);
|
||||
|
||||
/* Fixup that section violation, being paranoid about code scanning
|
||||
/*
|
||||
* Fixup that section violation, being paranoid about code scanning
|
||||
* the list of drivers in order to probe new devices. Check to see
|
||||
* if the probe was successful, and make sure any forced probes of
|
||||
* new devices fail.
|
||||
|
||||
@@ -511,6 +511,7 @@ static void dpm_complete(pm_message_t state)
|
||||
|
||||
INIT_LIST_HEAD(&list);
|
||||
mutex_lock(&dpm_list_mtx);
|
||||
transition_started = false;
|
||||
while (!list_empty(&dpm_list)) {
|
||||
struct device *dev = to_device(dpm_list.prev);
|
||||
|
||||
|
||||
@@ -51,8 +51,6 @@ static int __pm_runtime_idle(struct device *dev)
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
dev_dbg(dev, "__pm_runtime_idle()!\n");
|
||||
|
||||
if (dev->power.runtime_error)
|
||||
retval = -EINVAL;
|
||||
else if (dev->power.idle_notification)
|
||||
@@ -93,8 +91,6 @@ static int __pm_runtime_idle(struct device *dev)
|
||||
wake_up_all(&dev->power.wait_queue);
|
||||
|
||||
out:
|
||||
dev_dbg(dev, "__pm_runtime_idle() returns %d!\n", retval);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -332,11 +328,11 @@ int __pm_runtime_resume(struct device *dev, bool from_wq)
|
||||
* necessary.
|
||||
*/
|
||||
parent = dev->parent;
|
||||
spin_unlock_irq(&dev->power.lock);
|
||||
spin_unlock(&dev->power.lock);
|
||||
|
||||
pm_runtime_get_noresume(parent);
|
||||
|
||||
spin_lock_irq(&parent->power.lock);
|
||||
spin_lock(&parent->power.lock);
|
||||
/*
|
||||
* We can resume if the parent's run-time PM is disabled or it
|
||||
* is set to ignore children.
|
||||
@@ -347,9 +343,9 @@ int __pm_runtime_resume(struct device *dev, bool from_wq)
|
||||
if (parent->power.runtime_status != RPM_ACTIVE)
|
||||
retval = -EBUSY;
|
||||
}
|
||||
spin_unlock_irq(&parent->power.lock);
|
||||
spin_unlock(&parent->power.lock);
|
||||
|
||||
spin_lock_irq(&dev->power.lock);
|
||||
spin_lock(&dev->power.lock);
|
||||
if (retval)
|
||||
goto out;
|
||||
goto repeat;
|
||||
@@ -781,7 +777,7 @@ int __pm_runtime_set_status(struct device *dev, unsigned int status)
|
||||
}
|
||||
|
||||
if (parent) {
|
||||
spin_lock_irq(&parent->power.lock);
|
||||
spin_lock(&parent->power.lock);
|
||||
|
||||
/*
|
||||
* It is invalid to put an active child under a parent that is
|
||||
@@ -797,7 +793,7 @@ int __pm_runtime_set_status(struct device *dev, unsigned int status)
|
||||
atomic_inc(&parent->power.child_count);
|
||||
}
|
||||
|
||||
spin_unlock_irq(&parent->power.lock);
|
||||
spin_unlock(&parent->power.lock);
|
||||
|
||||
if (error)
|
||||
goto out;
|
||||
|
||||
@@ -482,7 +482,7 @@ static ssize_t host_store_rescan(struct device *dev,
|
||||
|
||||
return count;
|
||||
}
|
||||
DEVICE_ATTR(rescan, S_IWUSR, NULL, host_store_rescan);
|
||||
static DEVICE_ATTR(rescan, S_IWUSR, NULL, host_store_rescan);
|
||||
|
||||
static ssize_t dev_show_unique_id(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
@@ -512,7 +512,7 @@ static ssize_t dev_show_unique_id(struct device *dev,
|
||||
sn[8], sn[9], sn[10], sn[11],
|
||||
sn[12], sn[13], sn[14], sn[15]);
|
||||
}
|
||||
DEVICE_ATTR(unique_id, S_IRUGO, dev_show_unique_id, NULL);
|
||||
static DEVICE_ATTR(unique_id, S_IRUGO, dev_show_unique_id, NULL);
|
||||
|
||||
static ssize_t dev_show_vendor(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
@@ -536,7 +536,7 @@ static ssize_t dev_show_vendor(struct device *dev,
|
||||
else
|
||||
return snprintf(buf, sizeof(vendor) + 1, "%s\n", drv->vendor);
|
||||
}
|
||||
DEVICE_ATTR(vendor, S_IRUGO, dev_show_vendor, NULL);
|
||||
static DEVICE_ATTR(vendor, S_IRUGO, dev_show_vendor, NULL);
|
||||
|
||||
static ssize_t dev_show_model(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
@@ -560,7 +560,7 @@ static ssize_t dev_show_model(struct device *dev,
|
||||
else
|
||||
return snprintf(buf, sizeof(model) + 1, "%s\n", drv->model);
|
||||
}
|
||||
DEVICE_ATTR(model, S_IRUGO, dev_show_model, NULL);
|
||||
static DEVICE_ATTR(model, S_IRUGO, dev_show_model, NULL);
|
||||
|
||||
static ssize_t dev_show_rev(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
@@ -584,7 +584,7 @@ static ssize_t dev_show_rev(struct device *dev,
|
||||
else
|
||||
return snprintf(buf, sizeof(rev) + 1, "%s\n", drv->rev);
|
||||
}
|
||||
DEVICE_ATTR(rev, S_IRUGO, dev_show_rev, NULL);
|
||||
static DEVICE_ATTR(rev, S_IRUGO, dev_show_rev, NULL);
|
||||
|
||||
static ssize_t cciss_show_lunid(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
@@ -609,7 +609,7 @@ static ssize_t cciss_show_lunid(struct device *dev,
|
||||
lunid[0], lunid[1], lunid[2], lunid[3],
|
||||
lunid[4], lunid[5], lunid[6], lunid[7]);
|
||||
}
|
||||
DEVICE_ATTR(lunid, S_IRUGO, cciss_show_lunid, NULL);
|
||||
static DEVICE_ATTR(lunid, S_IRUGO, cciss_show_lunid, NULL);
|
||||
|
||||
static ssize_t cciss_show_raid_level(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
@@ -632,7 +632,7 @@ static ssize_t cciss_show_raid_level(struct device *dev,
|
||||
return snprintf(buf, strlen(raid_label[raid]) + 7, "RAID %s\n",
|
||||
raid_label[raid]);
|
||||
}
|
||||
DEVICE_ATTR(raid_level, S_IRUGO, cciss_show_raid_level, NULL);
|
||||
static DEVICE_ATTR(raid_level, S_IRUGO, cciss_show_raid_level, NULL);
|
||||
|
||||
static ssize_t cciss_show_usage_count(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
@@ -651,7 +651,7 @@ static ssize_t cciss_show_usage_count(struct device *dev,
|
||||
spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
|
||||
return snprintf(buf, 20, "%d\n", count);
|
||||
}
|
||||
DEVICE_ATTR(usage_count, S_IRUGO, cciss_show_usage_count, NULL);
|
||||
static DEVICE_ATTR(usage_count, S_IRUGO, cciss_show_usage_count, NULL);
|
||||
|
||||
static struct attribute *cciss_host_attrs[] = {
|
||||
&dev_attr_rescan.attr,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user