.. | .. |
---|
798 | 798 | static int hvfb_on_panic(struct notifier_block *nb, |
---|
799 | 799 | unsigned long e, void *p) |
---|
800 | 800 | { |
---|
| 801 | + struct hv_device *hdev; |
---|
801 | 802 | struct hvfb_par *par; |
---|
802 | 803 | struct fb_info *info; |
---|
803 | 804 | |
---|
804 | 805 | par = container_of(nb, struct hvfb_par, hvfb_panic_nb); |
---|
805 | | - par->synchronous_fb = true; |
---|
806 | 806 | info = par->info; |
---|
| 807 | + hdev = device_to_hv_device(info->device); |
---|
| 808 | + |
---|
| 809 | + if (hv_ringbuffer_spinlock_busy(hdev->channel)) |
---|
| 810 | + return NOTIFY_DONE; |
---|
| 811 | + |
---|
| 812 | + par->synchronous_fb = true; |
---|
807 | 813 | if (par->need_docopy) |
---|
808 | 814 | hvfb_docopy(par, 0, dio_fb_size); |
---|
809 | 815 | synthvid_update(info, 0, 0, INT_MAX, INT_MAX); |
---|