18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file compat.c 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * This file is intended to be up-to-date with the last linux version and 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * provide work-arounds for missing features in previous kernel version 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_dcache.h" 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <linux/ioport.h> 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifdef NEED_2_2_DENTRIES 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* note - assumes you only test for NULL, and not 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * actually care about the return value */ 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid * compat_request_region(unsigned long start, unsigned long n, char const * name) 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (check_region(start, n) != 0) 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return NULL; 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd request_region(start, n, name); 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return (void *)1; 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint wind_dentries_2_2(struct dentry * dentry) 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd struct dentry * root = current->fs->root; 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (dentry->d_parent != dentry && list_empty(&dentry->d_hash)) 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 0; 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for (;;) { 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd struct dentry * parent; 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (dentry == root) 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd break; 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd dentry = dentry->d_covers; 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd parent = dentry->d_parent; 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (dentry == parent) 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd break; 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd push_dname(&dentry->d_name); 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd dentry = parent; 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 1; 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* called with note_lock held */ 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodduint do_path_hash_2_2(struct dentry * dentry) 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /* BKL is already taken */ 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return do_hash(dentry, 0, 0, 0); 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* NEED_2_2_DENTRIES */ 64