View | Details | Raw Unified | Return to bug 121839
Collapse All | Expand All

(-)a/drivers/acpi/namespace/nsload.c (-29 / +22 lines)
Lines 118-134 acpi_ns_load_table(struct acpi_table_des Link Here
118
	 */
118
	 */
119
	ACPI_DEBUG_PRINT((ACPI_DB_INFO,
119
	ACPI_DEBUG_PRINT((ACPI_DB_INFO,
120
			  "**** Loading table into namespace ****\n"));
120
			  "**** Loading table into namespace ****\n"));
121
121
	
122
	status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
122
	status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
123
	if (ACPI_FAILURE(status)) {
123
	if (ACPI_FAILURE(status)) {
124
		return_ACPI_STATUS(status);
124
		return_ACPI_STATUS(status);
125
	}
125
	}
126
	
127
	/* If table already loaded into namespace, just return */
128
	if (table_desc->loaded_into_namespace) {
129
		status = AE_ALREADY_EXISTS;
130
		goto unlock_and_exit;
131
	}
126
132
127
	status = acpi_ns_parse_table(table_desc, node->child);
133
	status = acpi_ns_parse_table(table_desc, node->child);
128
	(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
134
135
	if (ACPI_SUCCESS(status)) {
136
		table_desc->loaded_into_namespace = TRUE;
137
	}
129
138
130
	if (ACPI_FAILURE(status)) {
139
	if (ACPI_FAILURE(status)) {
131
		return_ACPI_STATUS(status);
140
		goto unlock_and_exit;
132
	}
141
	}
133
142
134
	/*
143
	/*
Lines 144-150 acpi_ns_load_table(struct acpi_table_des Link Here
144
153
145
	ACPI_DEBUG_PRINT((ACPI_DB_INFO,
154
	ACPI_DEBUG_PRINT((ACPI_DB_INFO,
146
			  "**** Completed Table Method Parsing and Object Initialization ****\n"));
155
			  "**** Completed Table Method Parsing and Object Initialization ****\n"));
147
156
unlock_and_exit:
157
	(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
148
	return_ACPI_STATUS(status);
158
	return_ACPI_STATUS(status);
149
}
159
}
150
160
Lines 186-203 static acpi_status acpi_ns_load_table_by Link Here
186
196
187
		table_desc = acpi_gbl_table_lists[ACPI_TABLE_DSDT].next;
197
		table_desc = acpi_gbl_table_lists[ACPI_TABLE_DSDT].next;
188
198
189
		/* If table already loaded into namespace, just return */
190
191
		if (table_desc->loaded_into_namespace) {
192
			goto unlock_and_exit;
193
		}
194
195
		/* Now load the single DSDT */
199
		/* Now load the single DSDT */
196
200
197
		status = acpi_ns_load_table(table_desc, acpi_gbl_root_node);
201
		status = acpi_ns_load_table(table_desc, acpi_gbl_root_node);
198
		if (ACPI_SUCCESS(status)) {
199
			table_desc->loaded_into_namespace = TRUE;
200
		}
201
		break;
202
		break;
202
203
203
	case ACPI_TABLE_SSDT:
204
	case ACPI_TABLE_SSDT:
Lines 212-233 static acpi_status acpi_ns_load_table_by Link Here
212
		 */
213
		 */
213
		table_desc = acpi_gbl_table_lists[table_type].next;
214
		table_desc = acpi_gbl_table_lists[table_type].next;
214
		for (i = 0; i < acpi_gbl_table_lists[table_type].count; i++) {
215
		for (i = 0; i < acpi_gbl_table_lists[table_type].count; i++) {
215
			/*
216
			status = acpi_ns_load_table(table_desc,
216
			 * Only attempt to load table into namespace if it is not
217
							acpi_gbl_root_node);
217
			 * already loaded!
218
			 */
219
			if (!table_desc->loaded_into_namespace) {
220
				status =
221
				    acpi_ns_load_table(table_desc,
222
						       acpi_gbl_root_node);
223
				if (ACPI_FAILURE(status)) {
224
					break;
225
				}
226
227
				table_desc->loaded_into_namespace = TRUE;
228
			}
229
230
			table_desc = table_desc->next;
218
			table_desc = table_desc->next;
219
			if (status == AE_ALREADY_EXISTS) {
220
				continue;
221
			}
222
			if (ACPI_FAILURE(status)) {
223
				break;
224
			}
231
		}
225
		}
232
		break;
226
		break;
233
227
Lines 236-242 static acpi_status acpi_ns_load_table_by Link Here
236
		break;
230
		break;
237
	}
231
	}
238
232
239
      unlock_and_exit:
240
	(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
233
	(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
241
	return_ACPI_STATUS(status);
234
	return_ACPI_STATUS(status);
242
}
235
}
(-)a/drivers/acpi/tables/tbutils.c (-4 / +2 lines)
Lines 89-98 acpi_status acpi_tb_is_table_installed(s Link Here
89
		 * we don't check for duplicate tables during the initial installation
89
		 * we don't check for duplicate tables during the initial installation
90
		 * of tables within the RSDT/XSDT.
90
		 * of tables within the RSDT/XSDT.
91
		 */
91
		 */
92
		if ((table_desc->loaded_into_namespace) &&
92
		if (table_desc->pointer->length ==
93
		    (table_desc->pointer->length ==
93
			new_table_desc->pointer->length &&
94
		     new_table_desc->pointer->length)
95
		    &&
96
		    (!ACPI_MEMCMP
94
		    (!ACPI_MEMCMP
97
		     ((const char *)table_desc->pointer,
95
		     ((const char *)table_desc->pointer,
98
		      (const char *)new_table_desc->pointer,
96
		      (const char *)new_table_desc->pointer,

Return to bug 121839