Thread (43 messages) 43 messages, 5 authors, 2014-10-10
STALE4272d

[PATCH v2 1/8] ARM: add mach-asm9260

From: Oleksij Rempel <hidden>
Date: 2014-09-24 11:30:53

Am 24.09.2014 um 12:33 schrieb Arnd Bergmann:
On Wednesday 24 September 2014 11:25:42 Russell King - ARM Linux wrote:
quoted
On Wed, Sep 24, 2014 at 11:56:03AM +0200, Oleksij Rempel wrote:
quoted
Am 24.09.2014 um 11:43 schrieb Russell King - ARM Linux:
quoted
The "why" is in the text from your oops dump.  That's precisely /why/ we
print that text - so that we know /why/ the fault happened.
Here is oops message:
http://pastebin.com/qYWeAyfV

i can avoid this oops by setting size at least 0x2000 per register
range. Do it mean my TLB supports only 8 KiB pages?
No, it has nothing to do with the TLB.

Unable to handle kernel paging request at virtual address c2802174
pgd = c0004000
[c2802174] *pgd=21805811, *pte=00000000, *ppte=00000000
Internal error: Oops: 7 [#1] PREEMPT ARM

The number after the Oops: is the FSR value, which means "page translation
fault", and sure enough, the pgd/pte values show that there is no page
table entry at the faulting address.

That's odd, because ioremap() aligns the size of the requested mapping up
to a multiple of the page size, and inserts page table entries according
to the rounded size.

Where are you calling ioremap(), iounmap() etc?  IOW, please show your
code for this.
It's the clock driver from patch 5. It starts out with an ioremap of
the clock controller node:

+               acc: clock-controller at 80040000 {
+                       compatible = "alphascale,asm9260-clock-controller";
+                       #clock-cells = <1>;
+                       clocks = <&osc24m>;
+                       reg = <0x80040000 0x500>;
+               };

Oh, and there is the bug:

+       /* check for errors on leaf clocks */
+       for (n = 0; n < MAX_CLKS; n++) {
+               if (!IS_ERR(clks[n]))
+                       continue;
+
+               pr_err("%s: Unable to register leaf clock %d\n",
+                               np->full_name, n);
+               goto fail;
+       }
+
+       /* register clk-provider */
+       clk_data.clks = clks;
+       clk_data.clk_num = MAX_CLKS;
+       of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
+fail:
+       iounmap(base);
+}

There should be a 'return' in front of the 'fail:', otherwise it
get unmapped unconditionally.
Ouch... thank you!!!
Still weird why it was not always oopsing.

-- 
Regards,
Oleksij

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140924/6ed577a2/attachment-0001.sig>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help