Re: linux-next: build failure after merge of the rtc tree

Hans de Goede
2017-04-10T07:45:55Z

[-- Attachment #1: Type: text/plain, Size: 530 bytes --]

Hi,

On 10-04-17 08:04, Stephen Rothwell wrote:
> Hi Alexandre,
>
> After merging the rtc tree, today's linux-next build (x86_64 allmodconfig)
> failed like this:
>
> ERROR: "legacy_pic" [drivers/rtc/rtc-cmos.ko] undefined!
>
> Caused by commit
>
> d3e3a65c6a96 ("rtc: cmos: Do not assume irq 8 for rtc when there are no legacy irqs")
>
> "legacy_pic" is not exported to modules.
>
> I have used the rtc tree from next-20170407 for today.

I already send out a patch to fix this yesterday. I've attached a copy.

Regards,

Hans

[-- Attachment #2: 0001-x86-i8259-export-legacy_pic-symbol.patch --]
[-- Type: text/x-patch, Size: 1382 bytes --]

>From e869aedc4f19c17057d936f408998da230b92d2f Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Sat, 8 Apr 2017 19:47:45 +0200
Subject: [RFC] x86: i8259: export legacy_pic symbol

The classic PC rtc-coms driver has a workaround for broken ACPI device
nodes for it which lack an irq resource. This workaround used to
unconditionally hardcode the irq to 8 in these cases.

This was causing irq conflict problems on systems without a legacy-pic
so a recent patch added an if (nr_legacy_irqs()) guard to the
workaround to avoid this irq conflict.

nr_legacy_irqs() uses the legacy_pic symbol under the hood causing
an undefined symbol error if the rtc-cmos code is build as a module.

This commit exports the legacy_pic symbol to fix this.

Cc: rtc-linux@googlegroups.com
Cc: alexandre.belloni@free-electrons.com
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
Changes in v2:
-Use EXPORT_SYMBOL_GPL instead of EXPORT_SYMBOL
---
arch/x86/kernel/i8259.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c
index be22f5a..0bcf43d 100644
--- a/arch/x86/kernel/i8259.c
+++ b/arch/x86/kernel/i8259.c
@@ -418,6 +418,7 @@ struct legacy_pic default_legacy_pic = {
};

struct legacy_pic *legacy_pic = &default_legacy_pic;
+EXPORT_SYMBOL_GPL(legacy_pic);

static int __init i8259A_init_ops(void)
{
--
2.9.3