Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Guard fiq_fsm_spin_lock with fiq_enable check #913

Merged
merged 1 commit into from
Mar 30, 2015

Conversation

Clouded
Copy link

@Clouded Clouded commented Mar 30, 2015

I'm not 100% sure if it's done correctly (P33M, please correct me if necessary), but it allows to boot with the non-FIQ USB driver.

Should solve the following issue - #878

@P33M
Copy link
Contributor

P33M commented Mar 30, 2015

Looks acceptable to me.

Have you checked for any other unguarded invocation points?

@Clouded
Copy link
Author

Clouded commented Mar 30, 2015

Yes, all other invocations are guarded with fiq_enable or fiq_fsm_enable checks or are located in fiq functions.

popcornmix added a commit that referenced this pull request Mar 30, 2015
Guard fiq_fsm_spin_lock with fiq_enable check
@popcornmix popcornmix merged commit 2e52974 into raspberrypi:rpi-3.18.y Mar 30, 2015
@popcornmix
Copy link
Collaborator

Thanks.

popcornmix added a commit to raspberrypi/firmware that referenced this pull request Apr 2, 2015
See: raspberrypi/linux#766

kernel: Guard fiq_fsm_spin_lock with fiq_enable check
See: raspberrypi/linux#913

kernel: BCM270x_DT: Add interrupt pin to enc28j60-overlay
See: raspberrypi/linux#795

kernel: Add Device Tree support for RPi-DAC
See: raspberrypi/linux#916

firmware: image_fx: Preserve the DATACORRUPT flag in the generated deinterlaced frame

firmware: image_encode: Send ABORT_ENCODE when flushing codec to avoid a hang

firmware: hdmi: Add config options for setting MAI threshold and dma priority
See: http://forum.kodi.tv/showthread.php?tid=222061

firmware: gencmd: Add command for querying if hvs asserts have occurred
See: #407
popcornmix added a commit to Hexxeh/rpi-firmware that referenced this pull request Apr 2, 2015
See: raspberrypi/linux#766

kernel: Guard fiq_fsm_spin_lock with fiq_enable check
See: raspberrypi/linux#913

kernel: BCM270x_DT: Add interrupt pin to enc28j60-overlay
See: raspberrypi/linux#795

kernel: Add Device Tree support for RPi-DAC
See: raspberrypi/linux#916

firmware: image_fx: Preserve the DATACORRUPT flag in the generated deinterlaced frame

firmware: image_encode: Send ABORT_ENCODE when flushing codec to avoid a hang

firmware: hdmi: Add config options for setting MAI threshold and dma priority
See: http://forum.kodi.tv/showthread.php?tid=222061

firmware: gencmd: Add command for querying if hvs asserts have occurred
See: raspberrypi/firmware#407
neuschaefer pushed a commit to neuschaefer/raspi-binary-firmware that referenced this pull request Feb 27, 2017
See: raspberrypi/linux#766

kernel: Guard fiq_fsm_spin_lock with fiq_enable check
See: raspberrypi/linux#913

kernel: BCM270x_DT: Add interrupt pin to enc28j60-overlay
See: raspberrypi/linux#795

kernel: Add Device Tree support for RPi-DAC
See: raspberrypi/linux#916

firmware: image_fx: Preserve the DATACORRUPT flag in the generated deinterlaced frame

firmware: image_encode: Send ABORT_ENCODE when flushing codec to avoid a hang

firmware: hdmi: Add config options for setting MAI threshold and dma priority
See: http://forum.kodi.tv/showthread.php?tid=222061

firmware: gencmd: Add command for querying if hvs asserts have occurred
See: raspberrypi#407
popcornmix pushed a commit that referenced this pull request Aug 8, 2017
commit 76d5692 upstream.

The ram backend wasn't always initializing its spinlock correctly. Since
it was coming from kzalloc memory, though, it was harmless on
architectures that initialize unlocked spinlocks to 0 (at least x86 and
ARM). This also fixes a possibly ignored flag setting too.

When running under CONFIG_DEBUG_SPINLOCK, the following Oops was visible:

[    0.760836] persistent_ram: found existing buffer, size 29988, start 29988
[    0.765112] persistent_ram: found existing buffer, size 30105, start 30105
[    0.769435] persistent_ram: found existing buffer, size 118542, start 118542
[    0.785960] persistent_ram: found existing buffer, size 0, start 0
[    0.786098] persistent_ram: found existing buffer, size 0, start 0
[    0.786131] pstore: using zlib compression
[    0.790716] BUG: spinlock bad magic on CPU#0, swapper/0/1
[    0.790729]  lock: 0xffffffc0d1ca9bb0, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
[    0.790742] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.10.0-rc2+ #913
[    0.790747] Hardware name: Google Kevin (DT)
[    0.790750] Call trace:
[    0.790768] [<ffffff900808ae88>] dump_backtrace+0x0/0x2bc
[    0.790780] [<ffffff900808b164>] show_stack+0x20/0x28
[    0.790794] [<ffffff9008460ee0>] dump_stack+0xa4/0xcc
[    0.790809] [<ffffff9008113cfc>] spin_dump+0xe0/0xf0
[    0.790821] [<ffffff9008113d3c>] spin_bug+0x30/0x3c
[    0.790834] [<ffffff9008113e28>] do_raw_spin_lock+0x50/0x1b8
[    0.790846] [<ffffff9008a2d2ec>] _raw_spin_lock_irqsave+0x54/0x6c
[    0.790862] [<ffffff90083ac3b4>] buffer_size_add+0x48/0xcc
[    0.790875] [<ffffff90083acb34>] persistent_ram_write+0x60/0x11c
[    0.790888] [<ffffff90083aab1c>] ramoops_pstore_write_buf+0xd4/0x2a4
[    0.790900] [<ffffff90083a9d3c>] pstore_console_write+0xf0/0x134
[    0.790912] [<ffffff900811c304>] console_unlock+0x48c/0x5e8
[    0.790923] [<ffffff900811da18>] register_console+0x3b0/0x4d4
[    0.790935] [<ffffff90083aa7d0>] pstore_register+0x1a8/0x234
[    0.790947] [<ffffff90083ac250>] ramoops_probe+0x6b8/0x7d4
[    0.790961] [<ffffff90085ca548>] platform_drv_probe+0x7c/0xd0
[    0.790972] [<ffffff90085c76ac>] driver_probe_device+0x1b4/0x3bc
[    0.790982] [<ffffff90085c7ac8>] __device_attach_driver+0xc8/0xf4
[    0.790996] [<ffffff90085c4bfc>] bus_for_each_drv+0xb4/0xe4
[    0.791006] [<ffffff90085c7414>] __device_attach+0xd0/0x158
[    0.791016] [<ffffff90085c7b18>] device_initial_probe+0x24/0x30
[    0.791026] [<ffffff90085c648c>] bus_probe_device+0x50/0xe4
[    0.791038] [<ffffff90085c35b8>] device_add+0x3a4/0x76c
[    0.791051] [<ffffff90087d0e84>] of_device_add+0x74/0x84
[    0.791062] [<ffffff90087d19b8>] of_platform_device_create_pdata+0xc0/0x100
[    0.791073] [<ffffff90087d1a2c>] of_platform_device_create+0x34/0x40
[    0.791086] [<ffffff900903c910>] of_platform_default_populate_init+0x58/0x78
[    0.791097] [<ffffff90080831fc>] do_one_initcall+0x88/0x160
[    0.791109] [<ffffff90090010ac>] kernel_init_freeable+0x264/0x31c
[    0.791123] [<ffffff9008a25bd0>] kernel_init+0x18/0x11c
[    0.791133] [<ffffff9008082ec0>] ret_from_fork+0x10/0x50
[    0.793717] console [pstore-1] enabled
[    0.797845] pstore: Registered ramoops as persistent store backend
[    0.804647] ramoops: attached 0x100000@0xf7edc000, ecc: 0/0

Fixes: 663deb4 ("pstore: Allow prz to control need for locking")
Fixes: 1097044 ("pstore: Make spinlock per zone instead of global")
Reported-by: Brian Norris <[email protected]>
Signed-off-by: Kees Cook <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants