I believe I've encountered this as well. Does your dmesg push to your syslog? Look in there for something like so:
I've yet to find a solution that doesn't involve switching to a different driver or rolling back to an older kernel, but I believe there's a bug up on the tracker about this, at least. I didn't try, but building a non-preemptible kernel might work, too. That's sort of not an option on my end in this case, so I took the easy route.
BUG: using smp_processor_id() in preemptible  code: X/26646
caller is KCL_SPINLOCK_STATIC_Grab+0x35/0x60 [fglrx]
Note that if you switch to a VT before your login manager loads fully (at least in my case), you can log in and kill X. At least from there, you can operate via SSH or screen.