On Thu, Oct 20, 2011 at 11:44:50AM +0200, Gerd Hoffmann wrote:
The disk access code is called from 16bit mode, and thus it needs to be compiled in 16bit mode. The link errors you are seeing are there to force a build error (instead of failing mysterously at run time).
What does your driver do that requires 32bit mode?
Access special pages for communication with the hypervisor (grant tables, request ring).
If Xen just wants to run its handler in 32bit mode (and doesn't care about vm86 mode), it should be possible to do something like:
int process_xen_op(struct disk_op_s *op) { extern void _cfunc32flat_process_xen32_op(struct disk_op_s *); return call32(_cfunc32flat_process_xen32_op, op, DISK_RET_EPARAM); }
int VISIBLE32FLAT process_xen32_op(struct disk_op_s *op) { if (! CONFIG_XEN_DISK_HANDLER) return 0; ... }
Be aware that stack space is still limited here though (~512 bytes).
-Kevin