提交 86d9fc12 编写于 作者: L Len Brown

Merge branches 'release', 'idle', 'redhat-bugzilla-436589', 'sbs' and 'video' into release

...@@ -1487,7 +1487,6 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev, ...@@ -1487,7 +1487,6 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
return 0; return 0;
} }
acpi_unlazy_tlb(smp_processor_id());
/* /*
* Must be done before busmaster disable as we might need to * Must be done before busmaster disable as we might need to
* access HPET ! * access HPET !
...@@ -1577,6 +1576,8 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev, ...@@ -1577,6 +1576,8 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
return 0; return 0;
} }
acpi_unlazy_tlb(smp_processor_id());
/* Tell the scheduler that we are going deep-idle: */ /* Tell the scheduler that we are going deep-idle: */
sched_clock_idle_sleep_event(); sched_clock_idle_sleep_event();
/* /*
...@@ -1692,7 +1693,9 @@ static int acpi_processor_setup_cpuidle(struct acpi_processor *pr) ...@@ -1692,7 +1693,9 @@ static int acpi_processor_setup_cpuidle(struct acpi_processor *pr)
switch (cx->type) { switch (cx->type) {
case ACPI_STATE_C1: case ACPI_STATE_C1:
state->flags |= CPUIDLE_FLAG_SHALLOW; state->flags |= CPUIDLE_FLAG_SHALLOW;
state->flags |= CPUIDLE_FLAG_TIME_VALID; if (cx->entry_method == ACPI_CSTATE_FFH)
state->flags |= CPUIDLE_FLAG_TIME_VALID;
state->enter = acpi_idle_enter_c1; state->enter = acpi_idle_enter_c1;
dev->safe_state = state; dev->safe_state = state;
break; break;
......
...@@ -130,7 +130,6 @@ static int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol, ...@@ -130,7 +130,6 @@ static int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol,
goto end; goto end;
} }
smb_hc_write(hc, ACPI_SMB_COMMAND, command); smb_hc_write(hc, ACPI_SMB_COMMAND, command);
smb_hc_write(hc, ACPI_SMB_COMMAND, command);
if (!(protocol & 0x01)) { if (!(protocol & 0x01)) {
smb_hc_write(hc, ACPI_SMB_BLOCK_COUNT, length); smb_hc_write(hc, ACPI_SMB_BLOCK_COUNT, length);
for (i = 0; i < length; ++i) for (i = 0; i < length; ++i)
......
...@@ -39,20 +39,26 @@ static int create_modalias(struct acpi_device *acpi_dev, char *modalias, ...@@ -39,20 +39,26 @@ static int create_modalias(struct acpi_device *acpi_dev, char *modalias,
int size) int size)
{ {
int len; int len;
int count;
if (!acpi_dev->flags.hardware_id) if (!acpi_dev->flags.hardware_id && !acpi_dev->flags.compatible_ids)
return -ENODEV; return -ENODEV;
len = snprintf(modalias, size, "acpi:%s:", len = snprintf(modalias, size, "acpi:");
acpi_dev->pnp.hardware_id);
if (len < 0 || len >= size)
return -EINVAL;
size -= len; size -= len;
if (acpi_dev->flags.hardware_id) {
count = snprintf(&modalias[len], size, "%s:",
acpi_dev->pnp.hardware_id);
if (count < 0 || count >= size)
return -EINVAL;
len += count;
size -= count;
}
if (acpi_dev->flags.compatible_ids) { if (acpi_dev->flags.compatible_ids) {
struct acpi_compatible_id_list *cid_list; struct acpi_compatible_id_list *cid_list;
int i; int i;
int count;
cid_list = acpi_dev->pnp.cid_list; cid_list = acpi_dev->pnp.cid_list;
for (i = 0; i < cid_list->count; i++) { for (i = 0; i < cid_list->count; i++) {
......
...@@ -67,7 +67,7 @@ static void cpuidle_idle_call(void) ...@@ -67,7 +67,7 @@ static void cpuidle_idle_call(void)
/* enter the state and update stats */ /* enter the state and update stats */
dev->last_residency = target_state->enter(dev, target_state); dev->last_residency = target_state->enter(dev, target_state);
dev->last_state = target_state; dev->last_state = target_state;
target_state->time += dev->last_residency; target_state->time += (unsigned long long)dev->last_residency;
target_state->usage++; target_state->usage++;
/* give the governor an opportunity to reflect on the outcome */ /* give the governor an opportunity to reflect on the outcome */
...@@ -224,7 +224,7 @@ static void poll_idle_init(struct cpuidle_device *dev) ...@@ -224,7 +224,7 @@ static void poll_idle_init(struct cpuidle_device *dev)
state->exit_latency = 0; state->exit_latency = 0;
state->target_residency = 0; state->target_residency = 0;
state->power_usage = -1; state->power_usage = -1;
state->flags = CPUIDLE_FLAG_POLL | CPUIDLE_FLAG_TIME_VALID; state->flags = CPUIDLE_FLAG_POLL;
state->enter = poll_idle; state->enter = poll_idle;
} }
#else #else
......
...@@ -218,6 +218,12 @@ static ssize_t show_state_##_name(struct cpuidle_state *state, char *buf) \ ...@@ -218,6 +218,12 @@ static ssize_t show_state_##_name(struct cpuidle_state *state, char *buf) \
return sprintf(buf, "%u\n", state->_name);\ return sprintf(buf, "%u\n", state->_name);\
} }
#define define_show_state_ull_function(_name) \
static ssize_t show_state_##_name(struct cpuidle_state *state, char *buf) \
{ \
return sprintf(buf, "%llu\n", state->_name);\
}
#define define_show_state_str_function(_name) \ #define define_show_state_str_function(_name) \
static ssize_t show_state_##_name(struct cpuidle_state *state, char *buf) \ static ssize_t show_state_##_name(struct cpuidle_state *state, char *buf) \
{ \ { \
...@@ -228,8 +234,8 @@ static ssize_t show_state_##_name(struct cpuidle_state *state, char *buf) \ ...@@ -228,8 +234,8 @@ static ssize_t show_state_##_name(struct cpuidle_state *state, char *buf) \
define_show_state_function(exit_latency) define_show_state_function(exit_latency)
define_show_state_function(power_usage) define_show_state_function(power_usage)
define_show_state_function(usage) define_show_state_ull_function(usage)
define_show_state_function(time) define_show_state_ull_function(time)
define_show_state_str_function(name) define_show_state_str_function(name)
define_show_state_str_function(desc) define_show_state_str_function(desc)
......
...@@ -85,7 +85,7 @@ static void pnpacpi_parse_allocated_irqresource(struct pnp_resource_table *res, ...@@ -85,7 +85,7 @@ static void pnpacpi_parse_allocated_irqresource(struct pnp_resource_table *res,
i < PNP_MAX_IRQ) i < PNP_MAX_IRQ)
i++; i++;
if (i >= PNP_MAX_IRQ && !warned) { if (i >= PNP_MAX_IRQ && !warned) {
printk(KERN_ERR "pnpacpi: exceeded the max number of IRQ " printk(KERN_WARNING "pnpacpi: exceeded the max number of IRQ "
"resources: %d \n", PNP_MAX_IRQ); "resources: %d \n", PNP_MAX_IRQ);
warned = 1; warned = 1;
return; return;
...@@ -187,7 +187,7 @@ static void pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table *res, ...@@ -187,7 +187,7 @@ static void pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table *res,
res->dma_resource[i].start = dma; res->dma_resource[i].start = dma;
res->dma_resource[i].end = dma; res->dma_resource[i].end = dma;
} else if (!warned) { } else if (!warned) {
printk(KERN_ERR "pnpacpi: exceeded the max number of DMA " printk(KERN_WARNING "pnpacpi: exceeded the max number of DMA "
"resources: %d \n", PNP_MAX_DMA); "resources: %d \n", PNP_MAX_DMA);
warned = 1; warned = 1;
} }
...@@ -213,7 +213,7 @@ static void pnpacpi_parse_allocated_ioresource(struct pnp_resource_table *res, ...@@ -213,7 +213,7 @@ static void pnpacpi_parse_allocated_ioresource(struct pnp_resource_table *res,
res->port_resource[i].start = io; res->port_resource[i].start = io;
res->port_resource[i].end = io + len - 1; res->port_resource[i].end = io + len - 1;
} else if (!warned) { } else if (!warned) {
printk(KERN_ERR "pnpacpi: exceeded the max number of IO " printk(KERN_WARNING "pnpacpi: exceeded the max number of IO "
"resources: %d \n", PNP_MAX_PORT); "resources: %d \n", PNP_MAX_PORT);
warned = 1; warned = 1;
} }
...@@ -241,7 +241,7 @@ static void pnpacpi_parse_allocated_memresource(struct pnp_resource_table *res, ...@@ -241,7 +241,7 @@ static void pnpacpi_parse_allocated_memresource(struct pnp_resource_table *res,
res->mem_resource[i].start = mem; res->mem_resource[i].start = mem;
res->mem_resource[i].end = mem + len - 1; res->mem_resource[i].end = mem + len - 1;
} else if (!warned) { } else if (!warned) {
printk(KERN_ERR "pnpacpi: exceeded the max number of mem " printk(KERN_WARNING "pnpacpi: exceeded the max number of mem "
"resources: %d\n", PNP_MAX_MEM); "resources: %d\n", PNP_MAX_MEM);
warned = 1; warned = 1;
} }
......
...@@ -38,8 +38,8 @@ struct cpuidle_state { ...@@ -38,8 +38,8 @@ struct cpuidle_state {
unsigned int power_usage; /* in mW */ unsigned int power_usage; /* in mW */
unsigned int target_residency; /* in US */ unsigned int target_residency; /* in US */
unsigned int usage; unsigned long long usage;
unsigned int time; /* in US */ unsigned long long time; /* in US */
int (*enter) (struct cpuidle_device *dev, int (*enter) (struct cpuidle_device *dev,
struct cpuidle_state *state); struct cpuidle_state *state);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册