Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5ee5613

Browse files
committed
Merge tag 'for-linus-5.9b-rc8-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip
Pull xen fix from Juergen Gross: "Fix a regression introduced in 5.9-rc3 which caused a system running as fully virtualized guest under Xen to crash when using legacy devices like a floppy"* tag 'for-linus-5.9b-rc8-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: xen/events: don't use chip_data for legacy IRQs
2 parents5f05663 +0891fb3 commit5ee5613

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

‎drivers/xen/events/events_base.c‎

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ static bool (*pirq_needs_eoi)(unsigned irq);
9292
/* Xen will never allocate port zero for any purpose. */
9393
#defineVALID_EVTCHN(chn)((chn) != 0)
9494

95+
staticstructirq_info*legacy_info_ptrs[NR_IRQS_LEGACY];
96+
9597
staticstructirq_chipxen_dynamic_chip;
9698
staticstructirq_chipxen_percpu_chip;
9799
staticstructirq_chipxen_pirq_chip;
@@ -156,7 +158,18 @@ int get_evtchn_to_irq(evtchn_port_t evtchn)
156158
/* Get info for IRQ */
157159
structirq_info*info_for_irq(unsignedirq)
158160
{
159-
returnirq_get_chip_data(irq);
161+
if (irq<nr_legacy_irqs())
162+
returnlegacy_info_ptrs[irq];
163+
else
164+
returnirq_get_chip_data(irq);
165+
}
166+
167+
staticvoidset_info_for_irq(unsignedintirq,structirq_info*info)
168+
{
169+
if (irq<nr_legacy_irqs())
170+
legacy_info_ptrs[irq]=info;
171+
else
172+
irq_set_chip_data(irq,info);
160173
}
161174

162175
/* Constructors for packed IRQ information. */
@@ -377,7 +390,7 @@ static void xen_irq_init(unsigned irq)
377390
info->type=IRQT_UNBOUND;
378391
info->refcnt=-1;
379392

380-
irq_set_chip_data(irq,info);
393+
set_info_for_irq(irq,info);
381394

382395
list_add_tail(&info->list,&xen_irq_list_head);
383396
}
@@ -426,14 +439,14 @@ static int __must_check xen_allocate_irq_gsi(unsigned gsi)
426439

427440
staticvoidxen_free_irq(unsignedirq)
428441
{
429-
structirq_info*info=irq_get_chip_data(irq);
442+
structirq_info*info=info_for_irq(irq);
430443

431444
if (WARN_ON(!info))
432445
return;
433446

434447
list_del(&info->list);
435448

436-
irq_set_chip_data(irq,NULL);
449+
set_info_for_irq(irq,NULL);
437450

438451
WARN_ON(info->refcnt>0);
439452

@@ -603,7 +616,7 @@ EXPORT_SYMBOL_GPL(xen_irq_from_gsi);
603616
staticvoid__unbind_from_irq(unsignedintirq)
604617
{
605618
evtchn_port_tevtchn=evtchn_from_irq(irq);
606-
structirq_info*info=irq_get_chip_data(irq);
619+
structirq_info*info=info_for_irq(irq);
607620

608621
if (info->refcnt>0) {
609622
info->refcnt--;
@@ -1108,7 +1121,7 @@ int bind_ipi_to_irqhandler(enum ipi_vector ipi,
11081121

11091122
voidunbind_from_irqhandler(unsignedintirq,void*dev_id)
11101123
{
1111-
structirq_info*info=irq_get_chip_data(irq);
1124+
structirq_info*info=info_for_irq(irq);
11121125

11131126
if (WARN_ON(!info))
11141127
return;
@@ -1142,7 +1155,7 @@ int evtchn_make_refcounted(evtchn_port_t evtchn)
11421155
if (irq==-1)
11431156
return-ENOENT;
11441157

1145-
info=irq_get_chip_data(irq);
1158+
info=info_for_irq(irq);
11461159

11471160
if (!info)
11481161
return-ENOENT;
@@ -1170,7 +1183,7 @@ int evtchn_get(evtchn_port_t evtchn)
11701183
if (irq==-1)
11711184
gotodone;
11721185

1173-
info=irq_get_chip_data(irq);
1186+
info=info_for_irq(irq);
11741187

11751188
if (!info)
11761189
gotodone;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp